private Structure buildRegInfoStructure(boolean elf64) {

		String prefix = elf64 ? "Elf64" : "Elf32";

		EnumDataType gprMask = new EnumDataType(prefix + "_GPRMask_MIPS", 4);
		gprMask.add("gpr_zero", 1);
		gprMask.add("gpr_at", 2);
		gprMask.add("gpr_v0", 4);
		gprMask.add("gpr_v1", 8);
		gprMask.add("gpr_a0", 0x10);
		gprMask.add("gpr_a1", 0x20);
		gprMask.add("gpr_a2", 0x40);
		gprMask.add("gpr_a3", 0x80);
		gprMask.add("gpr_t0", 0x100);
		gprMask.add("gpr_t1", 0x200);
		gprMask.add("gpr_t2", 0x400);
		gprMask.add("gpr_t3", 0x800);
		gprMask.add("gpr_t4", 0x1000);
		gprMask.add("gpr_t5", 0x2000);
		gprMask.add("gpr_t6", 0x4000);
		gprMask.add("gpr_t7", 0x8000);
		gprMask.add("gpr_s0", 0x10000);
		gprMask.add("gpr_s1", 0x20000);
		gprMask.add("gpr_s2", 0x40000);
		gprMask.add("gpr_s3", 0x80000);
		gprMask.add("gpr_s4", 0x100000);
		gprMask.add("gpr_s5", 0x200000);
		gprMask.add("gpr_s6", 0x400000);
		gprMask.add("gpr_s7", 0x800000);
		gprMask.add("gpr_t8", 0x1000000);
		gprMask.add("gpr_t9", 0x2000000);
		gprMask.add("gpr_k0", 0x4000000);
		gprMask.add("gpr_k1", 0x8000000);
		gprMask.add("gpr_gp", 0x10000000);
		gprMask.add("gpr_sp", 0x20000000);
		gprMask.add("gpr_fp", 0x40000000);
		gprMask.add("gpr_ra", 0x80000000L);

		Structure regInfoStruct =
			new StructureDataType(new CategoryPath("/ELF"), prefix + "_RegInfo_MIPS", 0);
		regInfoStruct.add(gprMask, "ri_gprmask", null);
		if (elf64) {
			regInfoStruct.add(DWordDataType.dataType, "ri_pad", null);
		}
		regInfoStruct.add(new ArrayDataType(DWordDataType.dataType, 4, 4));
		if (elf64) {
			regInfoStruct.add(QWordDataType.dataType, "ri_gp_value", null);
		}
		else {
			regInfoStruct.add(DWordDataType.dataType, "ri_gp_value", null);
		}
		return regInfoStruct;
	}
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