[lld] r363126 - [ELF][PPC64] Don't report "relocation refers to a discarded section" for .toc

Fāng-ruì Sòng via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 25 06:58:12 PDT 2019


I think the .toc bug has never been fixed in clang so there is no revision
that introduced the regression. I added the date as requested in the review.

> Again would've been nice to have a revision for when the errors started
happening, so this fixed could be correlated to the breaking change.

The ppc64le-lld-multistage-test buildbot was down for a while during my fix
and some links were not available after it was up again...

On Tue, Jun 25, 2019 at 9:34 PM Hans Wennborg <hans at chromium.org> wrote:

> On Wed, Jun 12, 2019 at 9:32 AM Fangrui Song via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
> >
> > Author: maskray
> > Date: Wed Jun 12 00:35:42 2019
> > New Revision: 363126
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=363126&view=rev
> > Log:
> > [ELF][PPC64] Don't report "relocation refers to a discarded section" for
> .toc
> >
> > Summary:
> > clang (as of 2019-06-12) / gcc (as of 8.2.1) PPC64 may emit a .rela.toc
>
> Why a date instead of a specific revision number? The date gives the
> reader no clue of what Clang change introduced this.
>
> > which references an embedded switch table in a discarded .rodata/.text
> > section. The .toc and the .rela.toc are incorrectly not placed in the
> > comdat.
> >
> > Technically a relocation from outside the group is not allowed by the
> ELF spec:
> >
> > > A symbol table entry with STB_LOCAL binding that is defined relative
> > > to one of a group's sections, and that is contained in a symbol table
> > > section that is not part of the group, must be discarded if the group
> > > members are discarded. References to this symbol table entry from
> > > outside the group are not allowed.
> >
> > Don't report errors to work around the bug.
> >
> > This should fix the ppc64le-lld-multistage-test bot while linking
> llvm-tblgen:
>
> Again would've been nice to have a revision for when the errors
> started happening, so this fixed could be correlated to the breaking
> change.
>
> >
> >     ld.lld: error: relocation refers to a discarded section:
> .rodata._ZNK4llvm3MVT13getSizeInBitsEv
> >     >>> defined in
> utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeGenRegisters.cpp.o
> >     >>> referenced by CodeGenRegisters.cpp
> >     >>>
> utils/TableGen/CMakeFiles/llvm-tblgen.dir/CodeGenRegisters.cpp.o:(.toc+0x0)
> >
> > Some other PPC specific sections may have similar problems. We can
> blacklist more
> > section names when problems occur.
> >
> >     // A simple program that reproduces the bug.
> >     // Note .rela.toc (outside the group) references a section symbol
> (STB_LOCAL) in a group.
> >     void puts(const char *);
> >     struct A {
> >       void foo(int a) {
> >         switch (a) {
> >         case 0: puts("0"); break;
> >         case 1: puts("1"); puts("1"); break;
> >         case 2: puts("2"); break;
> >         case 3: puts("3"); puts("4"); break;
> >         case 4: puts("4"); break;
> >         case 5: puts("5"); puts("5"); break;
> >         case 6: puts("6"); break;
> >         }
> >       }
> >       int a;
> >     };
> >     void foo(A x) { x.foo(x.a); }
> >
> > Reviewers: ruiu, sfertile, espindola
> >
> > Reviewed By: ruiu
> >
> > Subscribers: emaste, nemanjai, arichardson, kbarton, jsji, llvm-commits
> >
> > Tags: #llvm
> >
> > Differential Revision: https://reviews.llvm.org/D63182
>


-- 
宋方睿
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190625/057c5d7c/attachment.html>


More information about the llvm-commits mailing list