private void updateNonRelocatebleGotEntries(ElfLoadHelper elfLoadHelper, ElfSymbol elfSymbol,
			Address address) {

		ElfHeader elfHeader = elfLoadHelper.getElfHeader();
		if (elfHeader.isRelocatable() || !elfSymbol.getSymbolTable().isDynamic()) {
			return;
		}

		Long gotBaseOffset = elfLoadHelper.getGOTValue();
		if (gotBaseOffset == null) {
			return;
		}

		ElfDynamicTable dynamicTable = elfHeader.getDynamicTable();
		if (dynamicTable == null || !dynamicTable.containsDynamicValue(DT_MIPS_LOCAL_GOTNO) ||
			!dynamicTable.containsDynamicValue(DT_MIPS_GOTSYM)) {
			return;
		}

		try {
			int gotLocalEntryCount = (int) dynamicTable.getDynamicValue(DT_MIPS_LOCAL_GOTNO);
			int gotSymbolIndex = (int) dynamicTable.getDynamicValue(DT_MIPS_GOTSYM);

			int symbolIndex = elfSymbol.getSymbolTableIndex();
			if (symbolIndex < gotSymbolIndex) {
				return; // assume non-external symbol
			}

			int gotIndex = gotLocalEntryCount + (symbolIndex - gotSymbolIndex);

			Program program = elfLoadHelper.getProgram();

			Address gotBaseAddress =
				program.getAddressFactory().getDefaultAddressSpace().getAddress(gotBaseOffset);

			// Need to apply adjusted address since fixupGot will re-adjust for image base shift
			long imageShift = elfLoadHelper.getImageBaseWordAdjustmentOffset();
			long symbolOffset = address.getOffset() - imageShift;

			setTableEntryIfZero(gotBaseAddress, gotIndex, symbolOffset, elfLoadHelper);
		}
		catch (MemoryAccessException e) {
			Msg.error(this, "Failed to update .got table entry", e);
		}
		catch (NotFoundException e) {
			throw new AssertException("unexpected", e);
		}
	}
Attempt to update external dynamic .got entries for non-relocatable binaries.
@param elfLoadHelper ELF load helper
@param elfSymbol ELF symbol being processed
@param address dynamic symbol address
Ghidra/Processors/MIPS/src/main/java/ghidra/app/util/bin/format/elf/extend/MIPS_ElfExtension.java