Fix LTO unreferenced symbol bug due to alias renaming

Yin Ma via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 7 14:25:26 PST 2016


HI Mehdi,

 

Currently not. I am trying to reduce my large LTO case into a simple one
right now.

The problem shows when SGV is a function definition (like foo) and it has 

Externallinkage and DGV is declaration of foo. Foo of SGV will be renamed to


foo.xxx. This will make unreferenced error because foo is not there anymore.

 

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
 <mailto:llvm-commits at lists.llvm.org> 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/5b103604/attachment.html>


More information about the llvm-commits mailing list