8fe1b0abe6
Don't mess up RelIplt symbols during relocatable processing Summary: During upgrading of the FreeBSD source tree with lld 7.0.0, I noticed that it started complaining about crt1.o having an "index past the end of the symbol table". Such a symbol table looks approximately like this, viewed with readelf -s (note the Ndx field being messed up): Symbol table '.symtab' contains 4 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 SECTION LOCAL DEFAULT 1 2: 00000000 0 NOTYPE WEAK HIDDEN RSV[0xffff] __rel_iplt_end 3: 00000000 0 NOTYPE WEAK HIDDEN RSV[0xffff] __rel_iplt_start At first, it seemed that recent ifunc relocation work had caused this: <https://reviews.freebsd.org/rS339351>, but it turned out that it was due to incorrect processing of the object files by lld, when using -r (a.k.a. --relocatable). Bisecting showed that rL324421 ("Convert a use of Config->Static") was the commit where this new behavior began. Simply reverting it solved the issue, and the __rel_iplt symbols had an index of UND again. Looking at Rafael's commit message, I think he simply missed the possibility of --relocatable being in effect, so I have added an additional check for it. I also added a simple regression test case. Reviewers: grimar, ruiu, emaste, espindola Reviewed By: ruiu Subscribers: arichardson, krytarowski, llvm-commits Differential Revision: https://reviews.llvm.org/D53515 This fixes a problem in lld where it places incorrect indexes for ifunc related symbols in crt1.o and friends, making it impossible to link most normal programs with it. |
||
---|---|---|
.. | ||
bugpoint | ||
clang | ||
llc | ||
lld | ||
lldb | ||
lli | ||
llvm-ar | ||
llvm-as | ||
llvm-bcanalyzer | ||
llvm-cov | ||
llvm-cxxdump | ||
llvm-cxxfilt | ||
llvm-diff | ||
llvm-dis | ||
llvm-dwarfdump | ||
llvm-extract | ||
llvm-link | ||
llvm-lto | ||
llvm-lto2 | ||
llvm-mc | ||
llvm-mca | ||
llvm-modextract | ||
llvm-nm | ||
llvm-objcopy | ||
llvm-objdump | ||
llvm-pdbutil | ||
llvm-profdata | ||
llvm-readobj | ||
llvm-rtdyld | ||
llvm-stress | ||
llvm-symbolizer | ||
llvm-xray | ||
opt |