private void processGOT16Relocation(MIPS_ElfRelocationContext elfRelocationContext,
			MIPS_DeferredRelocation got16reloc, long lo16Addend) {

		long addend;
		if (elfRelocationContext.extractAddend()) {
			addend = ((got16reloc.oldValueL & 0xffff) << 16) + lo16Addend;
		}
		else {
			addend = got16reloc.addendL;
		}

		long symbolValue = (int) elfRelocationContext.getSymbolValue(got16reloc.elfSymbol);
		String symbolName = got16reloc.elfSymbol.getNameAsString();

		long value = (symbolValue + addend + 0x8000) & ~0xffff; // generate page offset

		// Get section GOT entry for local symbol
		Address gotAddr = elfRelocationContext.getSectionGotAddress(value);
		if (gotAddr == null) {
			// failed to allocate section GOT entry for symbol
			markAsError(elfRelocationContext.getProgram(), got16reloc.relocAddr,
				got16reloc.relocType, symbolName, got16reloc.elfSymbol.getSymbolTableIndex(),
				"Unable to allocate GOT entry", elfRelocationContext.getLog());
			return;
		}

		// use address offset within section GOT as value
		value = getGpOffset(elfRelocationContext, gotAddr.getOffset());
		if (value == -1) {
			// Unhandled GOT/GP case
			markAsError(elfRelocationContext.getProgram(), got16reloc.relocAddr,
				got16reloc.relocType, symbolName, got16reloc.elfSymbol.getSymbolTableIndex(),
				"Failed to perform GP-based relocation", elfRelocationContext.getLog());
			return;
		}

		long newValue = (got16reloc.oldValueL & ~0xffff) | ((int) value & 0xffff);

		Memory memory = elfRelocationContext.getProgram().getMemory();
		try {
			memory.setInt(got16reloc.relocAddr,
				shuffle((int) newValue, got16reloc.relocType, elfRelocationContext));
		}
		catch (MemoryAccessException e) {
			// Unexpected since we did a previous getInt without failure
			throw new AssertException(e);
		}
	}
Complete Local GOT16 relocation (R_MIPS_GOT16, R_MIPS16_GOT16, R_MICROMIPS_GOT16) using
specified LO16 relocation data.  Section GOT entry will be utilized.
@param elfRelocationContext
@param got16reloc
@param lo16Addend
@return true if successful or false if unsupported
Ghidra/Processors/MIPS/src/main/java/ghidra/app/util/bin/format/elf/relocation/MIPS_ElfRelocationHandler.java