[PATCH] D26327: Convert MIPS .reginfo section to synthetic input section.

Simon Atanasyan via llvm-commits llvm-commits at lists.llvm.org
Sun Nov 6 13:40:39 PST 2016


atanasyan added inline comments.


================
Comment at: ELF/InputFiles.cpp:166
     return MipsOptions->Reginfo->ri_gp_value;
-  if (!ELFT::Is64Bits && MipsReginfo && MipsReginfo->Reginfo)
-    return MipsReginfo->Reginfo->ri_gp_value;
----------------
When we calculate R_MIPS_GPREL16/32 relocations we need to know `GP0` value stored in the .MIPS.options or .reginfo sections (take a look at the `computeAddend` routine). Each file might have it's own value. Usually `GP0` is equal to zero but it is not always true. After this change `getMipsGp0()` does not take in account `GP0` value stored in the .reginfo section and the `mips-gprel32-relocs-gp0.s` test case starts to fail.

To solve the problem we can add `MipsGp0` field to the `ObjectFile` class and retrieve and save `GP0` value to this field in the say `ObjectFile::initializeSections` function.

If you want I can work on that and convert MipsOptionsInputSection to synthetic input section too. It looks like it is better to convert .reginfo and .MIPS.options sections in a single patch.


================
Comment at: ELF/SyntheticSections.cpp:110
+    if (Config->Relocatable && RI->ri_gp_value)
+      error("supported non-zero ri_gp_value");
+    Reginfo.ri_gprmask |= RI->ri_gprmask;
----------------
- s/supported/unsupported/
- it is not very important, but it would be nice to continue to show a file's name in this error message. maybe add an argument to the `getSectionContents` routine to be able to pass a //validate// function.


https://reviews.llvm.org/D26327





More information about the llvm-commits mailing list