[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:28:03 PDT 2018


LLD revision is r331862.  To add, I had initially tried it on r328903,
which also reproduced the issue.

On Wed, May 9, 2018 at 9:26 AM Pirama Arumuga Nainar <pirama at google.com>
wrote:

> 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/75e9a8b3/attachment.html>


More information about the llvm-dev mailing list