private void processMipsHeaders(ElfLoadHelper elfLoadHelper, TaskMonitor monitor) {
		ElfHeader elf = elfLoadHelper.getElfHeader();

		Address mipsOptionsAddr = null;
		Address regInfoAddr = null;

		for (ElfProgramHeader programHeader : elf.getProgramHeaders()) {
			int headertype = programHeader.getType();
			if (headertype == PT_MIPS_OPTIONS.value) {
				mipsOptionsAddr = elfLoadHelper.findLoadAddress(programHeader, 0);
			}
			else if (headertype == PT_MIPS_REGINFO.value) {
				regInfoAddr = elfLoadHelper.findLoadAddress(programHeader, 0);
			}
		}

		for (ElfSectionHeader sectionHeader : elf.getSections()) {
			int headertype = sectionHeader.getType();
			if (headertype == SHT_MIPS_OPTIONS.value) {
				mipsOptionsAddr = elfLoadHelper.findLoadAddress(sectionHeader, 0);
			}
			else if (headertype == SHT_MIPS_REGINFO.value) {
				regInfoAddr = elfLoadHelper.findLoadAddress(sectionHeader, 0);
			}
		}

		if (mipsOptionsAddr == null) {
			ElfDynamicTable dynamicTable = elf.getDynamicTable();
			if (dynamicTable != null && dynamicTable.containsDynamicValue(DT_MIPS_OPTIONS)) {
				try {
					long optionsOffset =
						elf.adjustAddressForPrelink(dynamicTable.getDynamicValue(DT_MIPS_OPTIONS));
					mipsOptionsAddr = elfLoadHelper.getDefaultAddress(optionsOffset);
				}
				catch (NotFoundException e) {
					throw new AssertException("unexpected", e);
				}
			}
		}

		if (mipsOptionsAddr != null) {
			processMipsOptions(elfLoadHelper, mipsOptionsAddr);
		}
		if (regInfoAddr != null) {
			processMipsRegInfo(elfLoadHelper, regInfoAddr);
		}
	}
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