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