private static Function checkInsideThunkJump(Program program, Address address,
			TaskMonitor monitor) throws CancelledException {
		Listing listing = program.getListing();
		List<Reference> refList = getReferencesTo(program, address, monitor);
		if (refList.size() != 1) {//sanity check...
			return null;
		}
		Address thunkAddress = refList.get(0).getFromAddress();
		Function thunkFunction = listing.getFunctionAt(thunkAddress);
		if (thunkFunction == null) {
			return null;
		}
		Instruction thunkInstr = listing.getInstructionAt(thunkAddress);
		if (thunkInstr.getFlowType().isJump()) {
			AddressSetView newThunkBody =
				new AddressSet(thunkInstr.getMinAddress(), thunkInstr.getMaxAddress());
			try {
				thunkFunction.setBody(newThunkBody);
			}
			catch (OverlappingFunctionException e) {
				//should never happen...
			}
		}
		Function newFunction = createFunction(program, address);
		thunkFunction.setThunkedFunction(newFunction);
		return newFunction;
	}
Perform parsing and applying of functions 
@param pdbParser PDB parser object
@param xmlParser XML parser position immediately after the functions start element
@param monitor task monitor
@param log message log
@throws CancelledException if task cancelled
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb/ApplyFunctions.java