@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	protected final RelocationResult relocate(ElfRelocationContext elfRelocationContext,
			ElfRelocation relocation, Address relocationAddress) throws MemoryAccessException {

		Program program = elfRelocationContext.getProgram();

		int symbolIndex = relocation.getSymbolIndex();

		ElfSymbol sym = elfRelocationContext.getSymbol(symbolIndex); // will never be null
		Address symbolAddr = elfRelocationContext.getSymbolAddress(sym); // may be null
		long symbolValue = elfRelocationContext.getSymbolValue(sym);
		String symbolName = elfRelocationContext.getSymbolName(symbolIndex);

		int typeId = relocation.getType();
		if (typeId == 0) {
			return RelocationResult.SKIPPED;
		}

		T type = getRelocationType(typeId);
		if (type == null) {
			markAsUndefined(program, relocationAddress, typeId, symbolName, symbolIndex,
				elfRelocationContext.getLog());
			return RelocationResult.UNSUPPORTED;
		}

		return relocate((C) elfRelocationContext, relocation, type, relocationAddress, sym,
			symbolAddr, symbolValue, symbolName);
	}
Perform relocation fixup.

@param elfRelocationContext relocation context
@param relocation ELF relocation
@param relocationAddress relocation target address (fixup location)
@return applied relocation result (conveys status and applied byte-length)
@throws MemoryAccessException memory access failure
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/elf/relocation/AbstractElfRelocationHandler.java