Fix LTO unreferenced symbol bug due to alias renaming

Mehdi Amini via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 7 13:34:10 PST 2016


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 <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/59843fb1/attachment-0001.html>


More information about the llvm-commits mailing list