[lld] r323221 - Don't mark a shared library as needed because of a lazy symbol.

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 23 14:37:39 PST 2018


I agree. I will open the bug.

Rui Ueyama <ruiu at google.com> writes:

> I think this needs to be cherry picked for 6.0.
>
> On Tue, Jan 23, 2018 at 8:59 AM, Rafael Espindola via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: rafael
>> Date: Tue Jan 23 08:59:20 2018
>> New Revision: 323221
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=323221&view=rev
>> Log:
>> Don't mark a shared library as needed because of a lazy symbol.
>>
>> Fixes PR36029.
>>
>> Added:
>>     lld/trunk/test/ELF/Inputs/as-needed-lazy.s
>>     lld/trunk/test/ELF/as-needed-lazy.s
>> Modified:
>>     lld/trunk/ELF/SymbolTable.cpp
>>
>> Modified: lld/trunk/ELF/SymbolTable.cpp
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/
>> SymbolTable.cpp?rev=323221&r1=323220&r2=323221&view=diff
>> ============================================================
>> ==================
>> --- lld/trunk/ELF/SymbolTable.cpp (original)
>> +++ lld/trunk/ELF/SymbolTable.cpp Tue Jan 23 08:59:20 2018
>> @@ -491,12 +491,13 @@ void SymbolTable::addShared(StringRef Na
>>    if (WasInserted ||
>>        ((S->isUndefined() || S->isLazy()) && S->Visibility ==
>> STV_DEFAULT)) {
>>      uint8_t Binding = S->Binding;
>> +    bool WasUndefined = S->isUndefined();
>>      replaceSymbol<SharedSymbol>(S, File, Name, Sym.getBinding(),
>> Sym.st_other,
>>                                  Sym.getType(), Sym.st_value, Sym.st_size,
>>                                  Alignment, VerdefIndex);
>>      if (!WasInserted) {
>>        S->Binding = Binding;
>> -      if (!S->isWeak() && !Config->GcSections)
>> +      if (!S->isWeak() && !Config->GcSections && WasUndefined)
>>          File.IsNeeded = true;
>>      }
>>    }
>>
>> Added: lld/trunk/test/ELF/Inputs/as-needed-lazy.s
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/
>> Inputs/as-needed-lazy.s?rev=323221&view=auto
>> ============================================================
>> ==================
>> --- lld/trunk/test/ELF/Inputs/as-needed-lazy.s (added)
>> +++ lld/trunk/test/ELF/Inputs/as-needed-lazy.s Tue Jan 23 08:59:20 2018
>> @@ -0,0 +1,3 @@
>> +.global foo
>> +foo:
>> +  nop
>>
>> Added: lld/trunk/test/ELF/as-needed-lazy.s
>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/as-
>> needed-lazy.s?rev=323221&view=auto
>> ============================================================
>> ==================
>> --- lld/trunk/test/ELF/as-needed-lazy.s (added)
>> +++ lld/trunk/test/ELF/as-needed-lazy.s Tue Jan 23 08:59:20 2018
>> @@ -0,0 +1,14 @@
>> +# REQUIRES: x86
>> +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t1.o
>> +# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux
>> %p/Inputs/as-needed-lazy.s -o %t2.o
>> +# RUN: ld.lld %t2.o -o %t2.so -shared
>> +# RUN: rm -f %t2.a
>> +# RUN: llvm-ar rc %t2.a %t2.o
>> +# RUN: ld.lld %t1.o %t2.a --as-needed %t2.so -o %t
>> +# RUN: llvm-readobj -d %t | FileCheck %s
>> +
>> +# CHECK-NOT: NEEDED
>> +
>> +.global _start
>> +_start:
>> +  nop
>>
>>
>> _______________________________________________
>> 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