[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:26:57 PST 2017


But if you do, please cherry pick r292940 too because this patch introduced
a new issue of creating an invalid iterator.

On Tue, Jan 24, 2017 at 11:25 AM, Rui Ueyama <ruiu at google.com> wrote:

> 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/SyntheticS
>> ections.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/473c0748/attachment.html>


More information about the llvm-commits mailing list