[lld] r282633 - Warn on empty archive files.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 30 10:03:37 PDT 2016


I'd instead make it precise; if an archive file has no symbol table and it
contains a LLVM bitcode file, it is likely that the file was created by
mistake. What do you think?

On Fri, Sep 30, 2016 at 9:58 AM, Nico Weber <thakis at chromium.org> wrote:

> libtool (on mac) warns on this, and it's spectacularly unhelpful. We
> filter out that warning in a wrapper script since there's no flag to turn
> it off and the warning is just noise in our build. If lld gets this
> warning, please provide a way to toggle it off.
>
> On Sep 30, 2016 12:31 PM, "Reid Kleckner" <rnk at google.com> wrote:
>
>> Are you sure we should be warning on empty archives? This comes up in
>> Chromium's build, which apparently has an archive with no symbols:
>> https://build.chromium.org/p/chromium.fyi/builders/ClangToTL
>> inuxLLD/builds/1596/steps/compile/logs/stdio
>>
>> That build also doesn't involve LTO, so the long explanatory comment
>> isn't helpful.
>>
>> On Wed, Sep 28, 2016 at 2:10 PM, Rui Ueyama via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: ruiu
>>> Date: Wed Sep 28 16:10:54 2016
>>> New Revision: 282633
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=282633&view=rev
>>> Log:
>>> Warn on empty archive files.
>>>
>>> Differential Revision: https://reviews.llvm.org/D25044
>>>
>>> Modified:
>>>     lld/trunk/ELF/InputFiles.cpp
>>>     lld/trunk/test/ELF/empty-archive.s
>>>
>>> Modified: lld/trunk/ELF/InputFiles.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles
>>> .cpp?rev=282633&r1=282632&r2=282633&view=diff
>>> ============================================================
>>> ==================
>>> --- lld/trunk/ELF/InputFiles.cpp (original)
>>> +++ lld/trunk/ELF/InputFiles.cpp Wed Sep 28 16:10:54 2016
>>> @@ -427,8 +427,17 @@ template <class ELFT> void ArchiveFile::
>>>    File = check(Archive::create(MB), "failed to parse archive");
>>>
>>>    // Read the symbol table to construct Lazy objects.
>>> -  for (const Archive::Symbol &Sym : File->symbols())
>>> +  bool IsEmpty = true;
>>> +  for (const Archive::Symbol &Sym : File->symbols()) {
>>>      Symtab<ELFT>::X->addLazyArchive(this, Sym);
>>> +    IsEmpty = false;
>>> +  }
>>> +
>>> +  if (IsEmpty)
>>> +    warning(getName() + " has no symbol. Chances are you are doing "
>>> +            "an LTO build and forgot to use an ar command that can
>>> create "
>>> +            "a symbol table for LLVM bitcode files. If so, use llvm-ar
>>> or "
>>> +            "GNU ar + plugin.");
>>>  }
>>>
>>>  // Returns a buffer pointing to a member file containing a given symbol.
>>>
>>> Modified: lld/trunk/test/ELF/empty-archive.s
>>> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/empty
>>> -archive.s?rev=282633&r1=282632&r2=282633&view=diff
>>> ============================================================
>>> ==================
>>> --- lld/trunk/test/ELF/empty-archive.s (original)
>>> +++ lld/trunk/test/ELF/empty-archive.s Wed Sep 28 16:10:54 2016
>>> @@ -1,3 +1,5 @@
>>>  // RUN: llvm-ar rc %t.a
>>>  // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
>>> -// RUN: ld.lld -shared %t.o %t.a -o t
>>> +// RUN: ld.lld -shared %t.o %t.a -o t 2>&1 | FileCheck %s
>>> +
>>> +// CHECK: has no symbol.
>>>
>>>
>>> _______________________________________________
>>> 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/20160930/f6334932/attachment.html>


More information about the llvm-commits mailing list