private Address evaluateReference(VarnodeContext vContext, Instruction instruction,
			long knownSpaceID, long wordOffset, int size, DataType dataType, RefType refType,
			int pcodeop, boolean knownReference, Address target) {
		if (evaluator == null) {
			return target;
		}

		// if this was a speculative reference, pass to the evaluateConstant
		if (knownSpaceID == -1 || !knownReference) {
			Address constant = program.getAddressFactory().getConstantAddress(wordOffset);
			Address newTarget = evaluator.evaluateConstant(vContext, instruction, pcodeop,
				constant, size, dataType, refType);
			if (newTarget == null) {
				return null;
			}
			if (newTarget != constant) {
				target = newTarget; // updated the target, if same, then don't update to constant
									// since the target address was already computed.
			}
		}

		// was a known reference, or constant evalutator allowed the reference and
		// didn't handle it
		if (!evaluator.evaluateReference(vContext, instruction, pcodeop, target, size,
			dataType, refType)) {
			return null;
		}
			
		return target;
	}
Make a reference from the instruction to the address based on the spaceID,offset passed in.
  This could make a reference into an overlay (overriding the spaceID), or into memory, if
  spaceID is a constant space.
 The target could be an external Address carried along and then finally used.
 External addresses are OK as long as nothing is done to the offset.
 
@param vContext - context to use for any other information needed
@param instruction - instruction to place the reference on.
@param opIndex - operand it should be placed on, or -1 if unknown
@param knownSpaceID target space ID or -1 if only offset is known
@param wordOffset - target offset that is word addressing based
@param size - size of the access to the location
@param refType - type of reference
@param pcodeop - op that caused the reference
@param knownReference - true if reference is known to be a real reference, not speculative
@param preExisting preExisting reference
@param monitor - the task monitor
@return address that was marked up, null otherwise
Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java