private boolean handleExistingFunction(TaskMonitor monitor, Address entry,
			Function existingFunction) throws OverlappingFunctionException, CancelledException {
		long bodySize = existingFunction.getBody().getNumAddresses();
		// if only a single byte function, it is most likely a place-holder function
		if (bodySize > 1) {
			if (!recreateFunction) {
				// Function at entry already exists and recreateFunction not enabled
				return true;
			}
			// if it is a thunk, then we're done
			if (resolveThunk(entry, null, monitor)) {
				return true;
			}
		}
		// function already exists, or size is one, must want to fixup the body.
		//    if re-creating the body, always return true even if the function body didn't change.
		if (fixupFunctionBody(program, existingFunction, monitor) || recreateFunction) {
			return true;
		}
		return false;
	}
Subtract this functions entire body from existing functions.
NewFuncBody keeps any overlapping code that occurs between its entry point and the next entry point.
This rule helps functions keep a contiguous function body if functions share code such as a return, or
even an internal branch.

NOTE: This will change the other functions bodies

@param entry - entry point of new function
@param newFuncBody - new functions body
@param bodyChangeMap - map of functions that have their bodies changed by creating this function
@param monitor task monitor

@return address set of non-overlapping function body, some addresses may be grabbed from existing functions

@throws CancelledException user cancelled
@throws OverlappingFunctionException existing functions overlap and couldn't reconcile
Ghidra/Features/Base/src/main/java/ghidra/app/cmd/function/CreateFunctionCmd.java