Fix LTO unreferenced symbol bug due to alias renaming

Yin Ma via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 20 14:28:28 PST 2016


Hi  Rafael,

Thanks a lot. I am so glad that another author has created the extra same fix with a test.

Yin 

-----Original Message-----
From: Rafael Espíndola [mailto:rafael.espindola at gmail.com] 
Sent: Wednesday, January 20, 2016 2:11 PM
To: Yin Ma
Cc: Tim Amini Golling; llvm-commits
Subject: Re: Fix LTO unreferenced symbol bug due to alias renaming

I just approved http://reviews.llvm.org/D16330 which is the same fix but has a testcase.

Sorry for taking so long to reply, I was on vacations at the start of the year and I am still catching up.

Cheers,
Rafael


On 19 January 2016 at 13:46, Yin Ma <yinma at codeaurora.org> wrote:
> Hello,
>
>
>
> Any update on this review?
>
>
>
> Thanks,
>
>
>
> Yin
>
>
>
>
>
> From: mehdi.amini at apple.com [mailto:mehdi.amini at apple.com]
> Sent: Friday, January 08, 2016 8:30 AM
>
>
> To: Yin Ma
> Cc: llvm-commits
> Subject: Re: Fix LTO unreferenced symbol bug due to alias renaming
>
>
>
> Hi,
>
>
>
> Let’s wait Monday, Rafael should be back, it may be easier for him to 
> come up with a simpler test (or he may just take the patch without any 
> tests, we’ll see).
>
>
>
>>
> Mehdi
>
>
>
> On Jan 7, 2016, at 5:20 PM, Yin Ma <yinma at codeaurora.org> wrote:
>
>
>
> Hi Mehdi,
>
>
>
> It is not straight forward to reduce it. If it is just
>
> Extern foo from 1.ll
>
> Define foo from 2.ll
>
> Extern foo from 3.ll
>
> It wouldn’t show the problem. The definition of foo have to be 
> recorded by
>
> scanning other codes before the definition is resolved.
>
>
>
> The current test case is about 1000 lines with a lot of
>
> c++ setup. It has to be
>
> in three files like
>
> llvm-link 1.ll 2.ll 3.ll –o lto.o
>
> llvm-nm lto.o
>
> it shows
>
>                U _ZN7cOfooD2Ev
>
> -------- T _ZN7cOfooD2Ev.1
>
> Which later causes _ZN7cOfooD2Ev unreferenced. Because the definition 
> of
>
> _ZN7cOfooD2Ev becomes ZN7cOfooD2Ev.1
>
>
>
> _ZN7cOfooD2Ev is renamed in copyGlobalValueProto(SGV, ShouldLink);
>
> Because there is already a value with the same name when 1.ll is processed.
>
>
>
> I hope you could come up a test case based on my description if you 
> are
>
> familiar with what IRMover.cpp is doing. Or you have an automatic tool 
> to
>
> have me to reduce it further.
>
>
>
> Thanks,
>
>
>
> Yin
>
>
>
>
>
> From: mehdi.amini at apple.com [mailto:mehdi.amini at apple.com]
> Sent: Thursday, January 07, 2016 4:39 PM
> To: Yin Ma
> Cc: llvm-commits
> Subject: Re: Fix LTO unreferenced symbol bug due to alias renaming
>
>
>
> Hi,
>
>
>
> I’d rather have a test case with it.
>
> Is it hard to “anonymize” the test case? I don’t expect it to be large 
> considering your description of the problem, you should be able to 
> discard almost all the body of all function, strip the metadata, strip 
> the function parameter, strip the custom types if any, and rename the 
> few remaining function to foo and bar?
>
>
>
>>
> Mehdi
>
>
>
>
>
> On Jan 7, 2016, at 4:29 PM, Yin Ma <yinma at codeaurora.org> wrote:
>
>
>
> Hi Mehdi,
>
>
>
> I have developed a test case for llvm-link. However, I just figure out
>
> The test case was developed from licensed code. I cannot released
>
> to the public. Could you review my change without test case.
>
>
>
> Thanks,
>
>
>
> Yin
>
>
>
>
>
> From: mehdi.amini at apple.com [mailto:mehdi.amini at apple.com]
> Sent: Thursday, January 07, 2016 1:34 PM
> To: Yin Ma
> Cc: llvm-commits
> Subject: Re: Fix LTO unreferenced symbol bug due to alias renaming
>
>
>
> Hi Yin,
>
>
>
> Do you have a test-case for that?
>
>
>
> Thanks,
>
>
>
> Mehdi
>
>
>
> On Jan 7, 2016, at 12:28 PM, Yin Ma via llvm-commits 
> <llvm-commits at lists.llvm.org> wrote:
>
>
>
> Hi,
>
>
>
> After 18f201b4db339145af8f340196943ef57b9c8d9f from Rafael was merged 
> in, we are experiencing
>
> unreferenced symbol in several LTO programs. I analyzed the problem 
> and find because 18f201 patch
>
> tries to discard the aliasee by renaming it. However, it will create a 
> problem
>
> If the renaming happens for external functions, where non byte code 
> may reference to the original
>
> name and cause unreferenced symbol at the end.
>
>
>
> So, we have to perform forceRenaming like before without 18f201 for 
> those symbols in ShouldLink.
>
> Like this to force those global symbols which may expose to other 
> module to be the original name.
>
>
>
> diff --git a/lib/Linker/IRMover.cpp b/lib/Linker/IRMover.cpp
>
> index 16de0ec..68c3346 100644
>
> --- a/lib/Linker/IRMover.cpp
>
> +++ b/lib/Linker/IRMover.cpp
>
> @@ -1077,7 +1077,7 @@ Constant 
> *IRLinker::linkGlobalValueProto(GlobalValue
> *SGV, bool ForAlias) {
>
>        return nullptr;
>
>      NewGV = copyGlobalValueProto(SGV, ShouldLink);
>
> -    if (!ForAlias)
>
> +    if (ShouldLink || !ForAlias)
>
>        forceRenaming(NewGV, SGV->getName());
>
>    }
>
>    if (ShouldLink || ForAlias) {
>
>
>
> Please review.
>
>
>
> Thanks,
>
>
>
> Yin
>
>
>
>
>
> <i.diff>_______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>



More information about the llvm-commits mailing list