private Address getNextAllocatedGotEntryAddress() {
		if (nextAllocatedGotEntryAddress == null) {
			if (allocateGot() == null) {
				return Address.NO_ADDRESS; // failed to allocate got
			}
		}

		Address addr = nextAllocatedGotEntryAddress;
		if (addr == Address.NO_ADDRESS) {
			return Address.NO_ADDRESS; // insufficient space in got
		}

		try {
			// verify that entry fits in got
			int pointerSize = loadHelper.getProgram().getDefaultPointerSize();
			Address lastAddr = nextAllocatedGotEntryAddress.addNoWrap(pointerSize - 1);
			if (allocatedGotLimits.contains(lastAddr)) {
				// entry fits in got - update and return entry address
				lastAllocatedGotEntryAddress = lastAddr;
				nextAllocatedGotEntryAddress = lastAllocatedGotEntryAddress.addNoWrap(1);
				if (!allocatedGotLimits.contains(nextAllocatedGotEntryAddress)) {
					// allocated got space fully consumed
					nextAllocatedGotEntryAddress = Address.NO_ADDRESS;
				}
				return addr;
			}
		}
		catch (AddressOverflowException e) {
			// ignore
		}

		// insufficient space in got - fail future allocation attempts
		nextAllocatedGotEntryAddress = Address.NO_ADDRESS;
		return Address.NO_ADDRESS;
	}
Allocate the next section GOT entry location.  If GOT has not been allocated an attempt
will be made to create one.  If allocated gotMap will also be established.
@return Address of GOT entry or {@link Address#NO_ADDRESS} if unable to allocate.
Ghidra/Processors/x86/src/main/java/ghidra/app/util/bin/format/elf/relocation/X86_64_ElfRelocationContext.java