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

Teresa Johnson via llvm-dev llvm-dev at lists.llvm.org
Wed May 9 09:52:28 PDT 2018


Sorry, operator error. I can reproduce now. Interestingly, this does not
reproduce using gold, and they utilize the same underlying LTO API. Let me
dig a little using save-temps and see where they diverge.
Teresa

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

> 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
>>>
>>

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


More information about the llvm-dev mailing list