[ELF] MIPS paired R_MIPS_HI16/LO16 relocations support
Some MIPS relocations including R_MIPS_HI16/R_MIPS_LO16 use combined
addends. Such addend is calculated using addends of both paired relocations.
Each R_MIPS_HI16 relocation is paired with the next R_MIPS_LO16
relocation. ABI requires to compute such combined addend in case of REL
relocation record format only.
For details see p. 4-17 at
This patch implements lookup of the next paired relocation suing new
InputSectionBase::findPairedRelocLocation method. The primary
disadvantage of this approach is that we put MIPS specific logic into
the common code. The next disadvantage is that we lookup R_MIPS_LO16
for each R_MIPS_HI16 relocation, while in fact multiple R_MIPS_HI16
might be paired with the single R_MIPS_LO16. From the other side
this way allows us to keep MipsTargetInfo class stateless and implement
later relocation handling in parallel.
This patch does not support R_MIPS_HI16/R_MIPS_LO16 relocations against
_gp_disp symbol. In that case the relocations use a special formula for
the calculation. That will be implemented later.
Differential Revision: http://reviews.llvm.org/D15112