[PATCH] D21297: [ELF][MIPS] Support GOT entries for non-preemptible symbols with different addends

Simon Atanasyan via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 13 09:24:29 PDT 2016


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.
Herald added a subscriber: sdardis.

There are two motivations for this patch. The first one is a preparation for support MIPS TLS relocations. It might sound like a joke but for GOT entries related to TLS relocations MIPS ABI uses almost regular approach with creation of dynamic relocations for each GOT enty etc. But we need to separate these 'regular' TLS related entries from MIPS specific local/global parts of GOT. ABI declare simple solution - all TLS related entries allocated at the end of GOT after local/global parts. The second motivation it to support GOT relocations for non-preemptible symbols with addends. If we have more than one GOT relocations against symbol S with different addends we need to create GOT entries for each unique Symbol/Addend pairs.

So we store all MIPS GOT entries in separate containers. For non-preemptible symbols we have to maintain two data structures. The first one is `MipsLocal` vector. Each entry corresponds to the GOT entry from the 'local' part of the GOT contains the symbol's address plus addend. The second one is `MipsLocalMap`. It is a map from Symbol/Addend pair to the GOT index.

Repository:
  rL LLVM

http://reviews.llvm.org/D21297

Files:
  ELF/InputSection.cpp
  ELF/OutputSections.cpp
  ELF/OutputSections.h
  ELF/Relocations.cpp
  ELF/Symbols.cpp
  ELF/Symbols.h
  test/ELF/mips-64-disp.s
  test/ELF/mips-64-got.s
  test/ELF/mips-dynamic.s
  test/ELF/mips-got16.s
  test/ELF/mips-plt-copy.s
  test/ELF/mips-sto-plt.s

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D21297.60531.patch
Type: text/x-patch
Size: 25378 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160613/3d63f3b6/attachment.bin>


More information about the llvm-commits mailing list