[llvm-dev] lld + ThinLTO + fprofile-generate causes duplicate symbol errors

Pirama Arumuga Nainar via llvm-dev llvm-dev at lists.llvm.org
Wed May 9 09:26:09 PDT 2018


Hi Teresa,

Thanks for looking into this.  I hadn't initially tried ToT, but it
reproduces in ToT as well when I tried.

$ ./clang --version

clang version 7.0.0 (trunk 331879) (llvm/trunk 331888)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /ssd2/pirama/llvm-upstream/llvm-release/bin/.

$ ./ld.lld --version
LLD 7.0.0 (https://git.llvm.org/git/lld.git
dc4977e104c7f33758ac6119d1528aafcd8a94dc) (compatible with GNU
linkers)


On Wed, May 9, 2018 at 6:44 AM Teresa Johnson <tejohnson at google.com> wrote:

>
>
> On Wed, May 9, 2018 at 6:43 AM Teresa Johnson <tejohnson at google.com>
> wrote:
>
>> Hi Pirama,
>>
>> I can't reproduce with either lld or gold, using a compiler built from
>> head. What version is your clang?
>>
> (and your lld)
>
>
>>
>> Thanks,
>> Teresa
>>
>> On Tue, May 8, 2018 at 7:50 PM Pirama Arumuga Nainar via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>>> The duplicate symbol errors are for __llvm_profile_filename and __llvm_profile_raw_version.
>>> IIUC, these are supposed to be weak symbols but Thin LTO seems to break
>>> this in some way.  This does't happen with gold or no LTO or full LTO.
>>>
>>> $ cat > a.c
>>> extern int foo();
>>>
>>> int main() {
>>>   return foo();
>>> }
>>>
>>> $ cat > b.c
>>> int foo() {
>>>   return 0;
>>> }
>>>
>>> $ clang a.c -fprofile-generate -flto=thin -c
>>> $ clang b.c -fprofile-generate -flto=thin -c
>>> $ clang a.o b.o -fprofile-generate -flto=thin -fuse-ld=lld
>>> ld.lld: error: duplicate symbol: __llvm_profile_filename
>>> >>> defined at a.c
>>> >>>            lto.tmp:(__llvm_profile_filename)
>>> >>> defined at b.c
>>> >>>            lto.tmp:(.rodata.__llvm_profile_filename+0x0)
>>>
>>> ld.lld: error: duplicate symbol: __llvm_profile_raw_version
>>> >>> defined at a.c
>>> >>>            lto.tmp:(__llvm_profile_raw_version)
>>> >>> defined at b.c
>>> >>>            lto.tmp:(.rodata.__llvm_profile_raw_version+0x0)
>>> clang-7: error: linker command failed with exit code 1 (use -v to see
>>> invocation)
>>> Makefile:10: recipe for target 'a.out' failed
>>> make: *** [a.out] Error 1
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>
>>
>> --
>> Teresa Johnson |  Software Engineer |  tejohnson at google.com |
>>  408-460-2413
>>
>
>
> --
> Teresa Johnson |  Software Engineer |  tejohnson at google.com |
>  408-460-2413
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180509/2f859579/attachment.html>


More information about the llvm-dev mailing list