private synchronized Map<String, String> getTargetFixupMap(Program program) {
		// Its possible for different compiler specs (for different processors) to share the same name
		// So we need to check both the compilerspec id and the language id
		LanguageID languageid = program.getLanguageID();
		CompilerSpec compilerSpec = program.getCompilerSpec();
		if (compilerSpec.getCompilerSpecID().equals(cachedSpecId) &&
			languageid.equals(cachedLanguageId)) {
			return cachedTargetFixupMap;
		}
		cachedLanguageId = languageid;
		cachedSpecId = compilerSpec.getCompilerSpecID();
		cachedTargetFixupMap = new HashMap<>();
		PcodeInjectLibrary snippetLibrary = compilerSpec.getPcodeInjectLibrary();
		String[] callFixupNames = snippetLibrary.getCallFixupNames();
		for (String fixupName : callFixupNames) {
			InjectPayload payload =
				snippetLibrary.getPayload(InjectPayload.CALLFIXUP_TYPE, fixupName);
			List<String> callFixupTargets = ((InjectPayloadCallfixup) payload).getTargets();
			for (String name : callFixupTargets) {
				cachedTargetFixupMap.put(name, fixupName);
			}
		}
		return cachedTargetFixupMap;
	}
Fix the bodies of all functions that called the non-returning function.

@param program containing the functions
@param callLocations that need the bodies of the functions containing them fixed
@param monitor to allow canceling

@return the set of all repaired function entry points

@throws CancelledException
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/disassembler/CallFixupAnalyzer.java