public final RelocationResult processRelocation(ElfRelocation relocation,
			Address relocationAddress) {

		int symbolIndex = relocation.getSymbolIndex();
		ElfSymbol sym = getSymbol(symbolIndex);

		if (handler == null) {
			String symbolName = sym != null ? sym.getNameAsString() : null;
			ElfRelocationHandler.bookmarkNoHandlerError(program, relocationAddress,
				relocation.getType(), symbolIndex, symbolName);
			return RelocationResult.FAILURE;
		}

		if (sym == null) {
			handler.markAsError(program, relocationAddress, relocation.getType(), null, -1,
				"Invalid symbol index (" + symbolIndex + ")", getLog());
			return RelocationResult.FAILURE;
		}
		if (sym.isTLS()) {
			handler.markAsWarning(program, relocationAddress, relocation.getType(),
				sym.getNameAsString(), symbolIndex, "Relocation for TLS Symbol not supported",
				getLog());
			return RelocationResult.UNSUPPORTED;
		}

		try {
			return processRelocation(relocation, sym, relocationAddress);
		}
		catch (MemoryAccessException | NotFoundException e) {
			loadHelper.log(e);
			handler.markAsError(program, relocationAddress, relocation.getType(),
				sym.getNameAsString(), symbolIndex, "Processing Failure - " + e.getMessage(),
				getLog());
		}
		return RelocationResult.FAILURE;
	}
Process a relocation from the relocation table which corresponds to this context.
All relocation entries will be processed in the order they appear within the table.
@param relocation relocation to be processed
@param relocationAddress relocation address where it should be applied
@return applied relocation result
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/elf/relocation/ElfRelocationContext.java