[PATCH] D15112: [ELF] MIPS paired R_MIPS_HI16/LO16 relocations support

Simon Atanasyan via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 1 08:02:49 PST 2015


atanasyan created this revision.
atanasyan added reviewers: ruiu, rafael.
atanasyan added a subscriber: llvm-commits.
atanasyan set the repository for this revision to rL LLVM.
atanasyan added a project: lld.

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 ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf

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.

Repository:
  rL LLVM

http://reviews.llvm.org/D15112

Files:
  ELF/InputSection.cpp
  ELF/InputSection.h
  ELF/Target.cpp
  ELF/Target.h
  test/ELF/mips-hilo-hi-only.s
  test/ELF/mips-hilo.s

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15112.41515.patch
Type: text/x-patch
Size: 13202 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151201/d8edaa98/attachment.bin>


More information about the llvm-commits mailing list