private void createGot() {
		if (lastAllocatedGotEntryAddress == null) {
			return;
		}
		int size = (int) lastAllocatedGotEntryAddress.subtract(allocatedGotAddress) + 1;
		try {
			MemoryBlock block = MemoryBlockUtils.createInitializedBlock(program, false,
				ElfRelocationHandler.GOT_BLOCK_NAME, allocatedGotAddress, size,
				"NOTE: This block is artificial and allows ELF Relocations to work correctly",
				"Elf Loader", true, false, false, loadHelper.getLog());

			// Mark block as an artificial fabrication
			block.setArtificial(true);

			DataConverter converter =
				program.getMemory().isBigEndian() ? BigEndianDataConverter.INSTANCE
						: LittleEndianDataConverter.INSTANCE;
			for (long symbolValue : gotMap.keySet()) {
				Address addr = gotMap.get(symbolValue);
				byte[] bytes = converter.getBytes(symbolValue); // 8-byte pointer value
				block.putBytes(addr, bytes);
				loadHelper.createData(addr, PointerDataType.dataType);
			}
		}
		catch (MemoryAccessException e) {
			String msg = "Failed to create GOT at " + allocatedGotAddress;
			loadHelper.log(msg);
			Msg.error(this, msg, e);
		}
	}
Flush the section GOT table to a new %got memory block
Ghidra/Processors/x86/src/main/java/ghidra/app/util/bin/format/elf/relocation/X86_64_ElfRelocationContext.java