private void processMipsOptions(ElfLoadHelper elfLoadHelper, Address mipsOptionsAddr) {

		boolean elf64 = elfLoadHelper.getElfHeader().is64Bit();
		String prefix = elf64 ? "Elf64" : "Elf32";

		EnumDataType odkType = new EnumDataType(prefix + "_MipsOptionKind", 1);
		odkType.add("ODK_NULL", ODK_NULL);
		odkType.add("ODK_REGINFO", ODK_REGINFO);
		odkType.add("ODK_EXCEPTIONS", ODK_EXCEPTIONS);
		odkType.add("ODK_PAD", ODK_PAD);
		odkType.add("ODK_HWPATCH", ODK_HWPATCH);
		odkType.add("ODK_FILL", ODK_FILL);
		odkType.add("ODK_TAGS", ODK_TAGS);
		odkType.add("ODK_HWAND", ODK_HWAND);
		odkType.add("ODK_HWOR", ODK_HWOR);
		odkType.add("ODK_GP_GROUP", ODK_GP_GROUP);
		odkType.add("ODK_IDENT", ODK_IDENT);
		odkType.add("ODK_PAGESIZE", ODK_PAGESIZE);

		Structure odkHeader =
			new StructureDataType(new CategoryPath("/ELF"), prefix + "_MipsOptionHeader", 0);
		odkHeader.add(odkType, "kind", null);
		odkHeader.add(ByteDataType.dataType, "size", null);
		odkHeader.add(WordDataType.dataType, "section", null);
		odkHeader.add(DWordDataType.dataType, "info", null);

		Memory memory = elfLoadHelper.getProgram().getMemory();
		long limit = 0;
		MemoryBlock block = memory.getBlock(mipsOptionsAddr);
		if (block != null) {
			limit = block.getEnd().subtract(mipsOptionsAddr) + 1;
		}

		Address nextOptionAddr = mipsOptionsAddr;
		int optionDataSize = 0;
		try {
			while (limit >= odkHeader.getLength()) {

				nextOptionAddr = nextOptionAddr.add(optionDataSize);
				byte kind = memory.getByte(nextOptionAddr);
				if (kind == 0) {
					break;
				}

				Data odkData = elfLoadHelper.createData(nextOptionAddr, odkHeader);
				if (odkData == null) {
					throw new MemoryAccessException();
				}

				int size = (memory.getByte(nextOptionAddr.next()) & 0xff) - odkData.getLength();
				optionDataSize = size + (size % 8);

				if (memory.getByte(nextOptionAddr) == 0) {
					break;
				}

				nextOptionAddr = nextOptionAddr.add(odkData.getLength());

				switch (kind) {

					case ODK_REGINFO:
						processMipsRegInfo(elfLoadHelper, nextOptionAddr);
						break;

					default:
						if (optionDataSize > 0) {
							// consume unprocessed option description bytes
							elfLoadHelper.createData(nextOptionAddr,
								new ArrayDataType(ByteDataType.dataType, optionDataSize, 1));
						}
				}

				limit -= odkHeader.getLength() + optionDataSize;
			}
		}
		catch (AddressOutOfBoundsException | MemoryAccessException e) {
			// Ignore - No memory defined - possible *.debug file
		}
	}
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