void checkForJumpTable(Program program, Instruction refInstr, int opIndex, Object opObjects[],
			Address addr) {
		Instruction instr = program.getListing().getInstructionContaining(addr);

		if (instr == null) {
			return;
		}

		FlowType ftype = instr.getFlowType();
		if (!(ftype.isJump() && ftype.isComputed())) {
			return;
		}

		// figure out the multiple away
		long entryLen = 0;
		for (int i = 0; i < opObjects.length; i++) {
			if (opObjects[i] instanceof Scalar) {
				Scalar sc = (Scalar) opObjects[i];
				long value = sc.getUnsignedValue();
				if (value == 4 || value == 2 || value == 8) {
					entryLen = value;
					break;
				}
			}
		}
		if (entryLen == 0) {
			return;
		}

		// look for a positive offset 1 away
		Address offAddr;
		try {
			offAddr = addr.addNoWrap(entryLen);
		}
		catch (AddressOverflowException e) {
			return;
		}
		// if there is an instruction at the offset
		if (program.getListing().getInstructionContaining(offAddr) != null) {
			return;
		}
		AddressTable table =
			AddressTable.getEntry(program, offAddr, monitor, false, 3, alignment, 0,
				AddressTable.MINIMUM_SAFE_ADDRESS, relocationGuideEnabled);
		if (table != null) {
			// add in an offcut reference
			program.getReferenceManager()
					.addOffsetMemReference(refInstr.getMinAddress(), offAddr,
						false, -entryLen, RefType.DATA, SourceType.ANALYSIS, opIndex);
			return;
		}

		// look for a negative offset table
		AddressTable lastGoodTable = null;
		int i;
		for (i = 0; i < MAX_NEG_ENTRIES; i++) {
			Address negAddr = null;
			try {
				negAddr = addr.subtractNoWrap((entryLen + 3) * entryLen);
			}
			catch (AddressOverflowException e) {
				break;
			}

			// if there is an instruction at the offset
			if (program.getListing().getInstructionContaining(negAddr) != null) {
				return;
			}

			AddressTable negTable =
				AddressTable.getEntry(program, negAddr, monitor, false, 3, alignment, 0,
					AddressTable.MINIMUM_SAFE_ADDRESS, relocationGuideEnabled);
			if (negTable != null) {
				lastGoodTable = negTable;
			}
		}
		if (i == MAX_NEG_ENTRIES) {
			return;
		}

		if (lastGoodTable != null) {
			offAddr = lastGoodTable.getTopAddress();

			// add in an offcut reference
			program.getReferenceManager()
					.addOffsetMemReference(instr.getMinAddress(), offAddr,
						false, (i + 3) * entryLen, RefType.DATA, SourceType.ANALYSIS, opIndex);
			return;
		}
	}
Check if the address is in the Relocation table.
This only counts for relocatable programs.  Every address should be in the relocation table.
@param target location to check
@return
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/ScalarOperandAnalyzer.java