@Override
	public long getOriginalValue(Address addr, boolean signExtend) throws MemoryAccessException {
		byte[] bytes = null;
		int len = elf.is64Bit() ? 8 : 4;
		List<Relocation> relocations = program.getRelocationTable().getRelocations(addr);
		for (Relocation r : relocations) {
			bytes = r.getBytes();
			if (bytes != null) {
				if (bytes.length != len) {
					// unsupported relocation length
					throw new MemoryAccessException(
						"Failed to identify " + len + " bytes from relocation at " + addr +
							", was " + bytes.length + " bytes instead");
				}
				break;
			}
		}
		if (bytes == null) {
			bytes = new byte[len];
			memory.getBytes(addr, bytes);
		}

		DataConverter dataConverter = DataConverter.getInstance(elf.isBigEndian());
		return signExtend ? dataConverter.getSignedValue(bytes, len)
				: dataConverter.getValue(bytes, len);
	}
Cases:
1. elf.isRelocatable()
	a) sectionToBeRelocated null (may be NULL section?)
 b) sectionToBeRelocated known - offset relative to section load address

2. !elf.isRelocatable()
 a) sectionToBeRelocated null (may be NULL section?)
 b) sectionToBeRelocated known - offset relative to image base
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/ElfProgramBuilder.java