Previously, we have an input section and an output section
for MIPS .reginfo. This patch reorganizes the code structure.
Now we have only one class for .reginfo, which is MipsReginfoSection.
MipsReginfoSection is a synthetic input section.
.reginfo sections are handled as regular sections until the
control reaches Writer. Writer then aggregates all sections whose
type is SHT_MIPS_REGINFO to create a single synthesized input section.
The synthesized section is then processed normally as if it came
from an input file.
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.