Fix LTO unreferenced symbol bug due to alias renaming

Mehdi Amini via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 7 16:38:44 PST 2016


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 <mailto: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 <mailto:llvm-commits at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160107/af3a24e9/attachment.html>


More information about the llvm-commits mailing list