[lld] r292910 - [ELF] Correct sh_info for static symbol table
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 24 11:25:32 PST 2017
That's OK.
On Tue, Jan 24, 2017 at 10:02 AM, Rafael Avila de Espindola <
rafael.espindola at gmail.com> wrote:
>
> Thanks!
>
> I think we should port this to 4.0. Is that OK?
>
> Cheers,
> Rafael
>
> Peter Smith via llvm-commits <llvm-commits at lists.llvm.org> writes:
>
> > Author: psmith
> > Date: Tue Jan 24 04:43:40 2017
> > New Revision: 292910
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=292910&view=rev
> > Log:
> > [ELF] Correct sh_info for static symbol table
> >
> > The sh_info field of the SHT_SYMTAB section holds the index for the
> > first non-local symbol. When there are global symbols that are output
> > with STB_LOCAL binding due to having hidden visibility or matching
> > the local version from a version script, the calculated value of
> > NumLocals + 1 does not account for them. This change accounts for
> > global symbols being output with local binding.
> >
> > Differential Revision: https://reviews.llvm.org/D28950
> >
> > Modified:
> > lld/trunk/ELF/SyntheticSections.cpp
> > lld/trunk/test/ELF/basic-mips.s
> > lld/trunk/test/ELF/basic-ppc.s
> >
> > Modified: lld/trunk/ELF/SyntheticSections.cpp
> > URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/
> SyntheticSections.cpp?rev=292910&r1=292909&r2=292910&view=diff
> > ============================================================
> ==================
> > --- lld/trunk/ELF/SyntheticSections.cpp (original)
> > +++ lld/trunk/ELF/SyntheticSections.cpp Tue Jan 24 04:43:40 2017
> > @@ -1073,11 +1073,13 @@ template <class ELFT> void SymbolTableSe
> >
> > if (!StrTabSec.isDynamic()) {
> > auto GlobBegin = Symbols.begin() + NumLocals;
> > - std::stable_sort(GlobBegin, Symbols.end(), [](const
> SymbolTableEntry &L,
> > - const
> SymbolTableEntry &R) {
> > - return L.Symbol->symbol()->computeBinding() == STB_LOCAL &&
> > - R.Symbol->symbol()->computeBinding() != STB_LOCAL;
> > - });
> > + auto It = std::stable_partition(
> > + GlobBegin, Symbols.end(), [](const SymbolTableEntry &S) {
> > + return S.Symbol->symbol()->computeBinding() == STB_LOCAL;
> > + });
> > + // update sh_info with number of Global symbols output with computed
> > + // binding of STB_LOCAL
> > + this->OutSec->Info = this->Info = 1 + It - Symbols.begin();
> > return;
> > }
> >
> >
> > Modified: lld/trunk/test/ELF/basic-mips.s
> > URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/
> basic-mips.s?rev=292910&r1=292909&r2=292910&view=diff
> > ============================================================
> ==================
> > --- lld/trunk/test/ELF/basic-mips.s (original)
> > +++ lld/trunk/test/ELF/basic-mips.s Tue Jan 24 04:43:40 2017
> > @@ -176,7 +176,7 @@ __start:
> > # CHECK-NEXT: Offset: 0x20010
> > # CHECK-NEXT: Size: 48
> > # CHECK-NEXT: Link: 10
> > -# CHECK-NEXT: Info: 1
> > +# CHECK-NEXT: Info: 2
> > # CHECK-NEXT: AddressAlignment: 4
> > # CHECK-NEXT: EntrySize: 16
> > # CHECK-NEXT: }
> >
> > Modified: lld/trunk/test/ELF/basic-ppc.s
> > URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/
> basic-ppc.s?rev=292910&r1=292909&r2=292910&view=diff
> > ============================================================
> ==================
> > --- lld/trunk/test/ELF/basic-ppc.s (original)
> > +++ lld/trunk/test/ELF/basic-ppc.s Tue Jan 24 04:43:40 2017
> > @@ -178,7 +178,7 @@
> > // CHECK-NEXT: Offset: 0x2038
> > // CHECK-NEXT: Size: 32
> > // CHECK-NEXT: Link: 9
> > -// CHECK-NEXT: Info: 1
> > +// CHECK-NEXT: Info: 2
> > // CHECK-NEXT: AddressAlignment: 4
> > // CHECK-NEXT: EntrySize: 16
> > // CHECK-NEXT: SectionData (
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170124/7c9f7735/attachment.html>
More information about the llvm-commits
mailing list