<div dir="ltr">D19954 should fix this problem.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 3, 2016 at 10:03 PM, Peter Collingbourne <span dir="ltr"><<a href="mailto:peter@pcc.me.uk" target="_blank">peter@pcc.me.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks Davide, I'll try to take a look tomorrow.<div><br></div><div>Peter</div></div><div class="gmail_extra"><div><div class="h5"><br><div class="gmail_quote">On Tue, May 3, 2016 at 6:54 PM, Davide Italiano <span dir="ltr"><<a href="mailto:davide@freebsd.org" target="_blank">davide@freebsd.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I'm sorry to bring bad news but this patch breaks (or exposes an<br>
existing bug) with --lto-jobs=N, with N > 1.<br>
If I try to link llvm-tblgen, I get the following:<br>
<br>
[...]<br>
<br>
duplicate symbol:<br>
llvm::Twine::toNullTerminatedStringRef(llvm::SmallVectorImpl<char>&)<br>
const in lib/libLLVMSupport.a(Twine.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol:<br>
llvm::Record::getValueAsListOfStrings(llvm::StringRef) const in<br>
lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol: llvm::Record::dump() const in<br>
lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol: llvm::DefInit::getAsString() const in<br>
lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol: llvm::DefInit::getFieldInit(llvm::Record&,<br>
llvm::RecordVal const*, std::__cxx11::basic_string<char,<br>
std::char_traits<char>, std::allocator<char> > const&) const in<br>
lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol: llvm::IntInit::getAsString() const in<br>
lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol:<br>
llvm::VarInit::getFieldType(std::__cxx11::basic_string<char,<br>
std::char_traits<char>, std::allocator<char> > const&) const in<br>
lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol:<br>
llvm::VarInit::resolveListElementReference(llvm::Record&,<br>
llvm::RecordVal const*, unsigned int) const in<br>
lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol: llvm::BitRecTy::typeIsConvertibleTo(llvm::RecTy<br>
const*) const in lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol: llvm::BitsInit::convertInitializerTo(llvm::RecTy*)<br>
const in lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol: llvm::DagRecTy::getAsString() const in<br>
lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol: llvm::UnOpInit::resolveReferences(llvm::Record&,<br>
llvm::RecordVal const*) const in lib/libLLVMTableGen.a(Record.cpp.o)<br>
and LLD-INTERNAL-combined-lto-object<br>
duplicate symbol: llvm::BitsRecTy::getAsString() const in<br>
lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol:<br>
llvm::FieldInit::resolveListElementReference(llvm::Record&,<br>
llvm::RecordVal const*, unsigned int) const in<br>
lib/libLLVMTableGen.a(Record.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
duplicate symbol: llvm::SourceMgr::PrintMessage(llvm::SMLoc,<br>
llvm::SourceMgr::DiagKind, llvm::Twine const&,<br>
llvm::ArrayRef<llvm::SMRange>, llvm::ArrayRef<llvm::SMFixIt>, bool)<br>
const in lib/libLLVMSupport.a(SourceMgr.cpp.o) and<br>
LLD-INTERNAL-combined-lto-object<br>
<br>
[...]<br>
<br>
The cmake invocation looks pretty much like this one:<br>
<br>
$ cmake -GNinja -DCMAKE_C_COMPILER="/home/davide/llvm/build/bin/clang"<br>
-DCMAKE_AR="/home/davide/llvm/build/bin/llvm-ar"<br>
-DCMAKE_RANLIB="/usr/bin/true"<br>
-DCMAKE_CXX_COMPILER="/home/davide/llvm/build/bin/clang++"<br>
-DCMAKE_C_FLAGS="-flto -fuse-ld=lld -Wl,--lto-jobs=4"<br>
-DCMAKE_CXX_FLAGS="-flto -fuse-ld=lld -Wl,--lto-jobs=4"<br>
-DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=OFF ../<br>
<br>
If I revert the patch, llvm-tblgen links successfully.<br>
<br>
Peter, can you please take a look when you get a chance?<br>
As a general consideration, we might want to set up a bot (or enhance<br>
existing bots) to test this configuration (e.g. --lto-jobs=2).<br>
<br>
Thanks!<br>
<div><div><br>
<br>
On Mon, May 2, 2016 at 6:45 PM, Rui Ueyama via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
> I sync'ed to the head today, and I saw the improvement on my machine as<br>
> well. This is one of the best patches committed to LLD/ELF. Thank you for<br>
> doing this!<br>
><br>
> On Mon, May 2, 2016 at 6:41 PM, Peter Collingbourne via llvm-commits<br>
> <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
>><br>
>> <a href="http://reviews.llvm.org/D19836" rel="noreferrer" target="_blank">http://reviews.llvm.org/D19836</a> is the fix for Rafael's reproducer. Ed,<br>
>> please let me know if it fixes the issue for you.<br>
>><br>
>> Peter<br>
>><br>
>> On Mon, May 2, 2016 at 1:02 PM, Peter Collingbourne <<a href="mailto:peter@pcc.me.uk" target="_blank">peter@pcc.me.uk</a>><br>
>> wrote:<br>
>>><br>
>>> On Mon, May 2, 2016 at 12:55 PM, Rafael Espíndola<br>
>>> <<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>> wrote:<br>
>>>><br>
>>>> To reproduce the problem:<br>
>>>><br>
>>>> clang -c test.s<br>
>>>> clang -c test2.s<br>
>>>> llvm-ar rc test2.a test2.o<br>
>>>> ld.lld -shared -o test.so  test2.a test.o<br>
>>>><br>
>>>> with<br>
>>>><br>
>>>> test.s:<br>
>>>>         addq    a@GOTTPOFF(%rip), %rax<br>
>>>> test2.s:<br>
>>>>         .section        .tdata,"awT",@progbits<br>
>>>>         .globl  a<br>
>>>> a:<br>
>>>>         .long   42<br>
>>><br>
>>><br>
>>> Was able to reproduce, looking.<br>
>>><br>
>>> Thanks,<br>
>>> --<br>
>>> --<br>
>>> Peter<br>
>><br>
>><br>
>><br>
>><br>
>> --<br>
>> --<br>
>> Peter<br>
>><br>
>> _______________________________________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
>><br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
><br>
<br>
</div></div><span><font color="#888888">--<br>
Davide<br>
<br>
"There are no solved problems; there are only problems that are more<br>
or less solved" -- Henri Poincare<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div></div></div><span class="HOEnZb"><font color="#888888">-- <br><div><div dir="ltr">-- <div>Peter</div></div></div>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">-- <div>Peter</div></div></div>
</div>