[lld] r292910 - [ELF] Correct sh_info for static symbol table
Rafael Avila de Espindola via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 24 10:02:56 PST 2017
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
More information about the llvm-commits
mailing list