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

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 24 06:55:24 PST 2018


Merged to 6.0 in r323327.

On Tue, Jan 23, 2018 at 11:37 PM, Rafael Avila de Espindola via
llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 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
>>>
> _______________________________________________
> 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