<div dir="ltr">Thanks, H.J.<div><br></div><div>Did you commit this or do you want me to go ahead and do that?</div><div><br></div><div>Teresa</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 4, 2016 at 1:08 PM, H.J. Lu <span dir="ltr"><<a href="mailto:hjl.tools@gmail.com" target="_blank">hjl.tools@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Fri, Mar 4, 2016 at 9:48 AM, Teresa Johnson via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: tejohnson<br>
> Date: Fri Mar  4 11:48:35 2016<br>
> New Revision: 262727<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=262727&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=262727&view=rev</a><br>
> Log:<br>
> [ThinLTO] Ensure prevailing linkonce emitted as weak in ThinLTO backends<br>
><br>
> Summary:<br>
> Since IR files are all compiled into separate independent object files<br>
> in ThinLTO mode, the prevailing linkonce symbols must be emitted in its<br>
> object file even if it is no longer referenced there, e.g. if no<br>
> references remain in the module after inlining, since it may be<br>
> referenced by another ThinLTO compiled object file. This is done by<br>
> changing LDPR_PREVAILING_DEF_IRONLY* symbols to LDPR_PREVAILING_DEF,<br>
> which converts the prevailing linkonce to weak. We also don't need the<br>
> other prevailing IRONLY handling for internalization, which is not<br>
> currently performed for ThinLTO.<br>
><br>
> Test case included.<br>
><br>
> Reviewers: davidxl, rafael<br>
><br>
> Subscribers: rafael, joker.eph, llvm-commits<br>
><br>
> Differential Revision: <a href="http://reviews.llvm.org/D16173" rel="noreferrer" target="_blank">http://reviews.llvm.org/D16173</a><br>
><br>
> Added:<br>
>     llvm/trunk/test/tools/gold/X86/Inputs/thinlto_linkonceresolution.ll<br>
>     llvm/trunk/test/tools/gold/X86/thinlto_linkonceresolution.ll<br>
> Modified:<br>
>     llvm/trunk/tools/gold/gold-plugin.cpp<br>
><br>
> Added: llvm/trunk/test/tools/gold/X86/Inputs/thinlto_linkonceresolution.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/gold/X86/Inputs/thinlto_linkonceresolution.ll?rev=262727&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/gold/X86/Inputs/thinlto_linkonceresolution.ll?rev=262727&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/tools/gold/X86/Inputs/thinlto_linkonceresolution.ll (added)<br>
> +++ llvm/trunk/test/tools/gold/X86/Inputs/thinlto_linkonceresolution.ll Fri Mar  4 11:48:35 2016<br>
> @@ -0,0 +1,4 @@<br>
> +target triple = "x86_64-unknown-linux-gnu"<br>
> +define linkonce_odr hidden void @f() {<br>
> +  ret void<br>
> +}<br>
><br>
> Added: llvm/trunk/test/tools/gold/X86/thinlto_linkonceresolution.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/gold/X86/thinlto_linkonceresolution.ll?rev=262727&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/gold/X86/thinlto_linkonceresolution.ll?rev=262727&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/tools/gold/X86/thinlto_linkonceresolution.ll (added)<br>
> +++ llvm/trunk/test/tools/gold/X86/thinlto_linkonceresolution.ll Fri Mar  4 11:48:35 2016<br>
> @@ -0,0 +1,32 @@<br>
> +; RUN: llvm-as -function-summary %s -o %t.o<br>
> +; RUN: llvm-as -function-summary %p/Inputs/thinlto_linkonceresolution.ll -o %t2.o<br>
> +<br>
> +; Ensure the plugin ensures that for ThinLTO the prevailing copy of a<br>
> +; linkonce symbol is changed to weak to ensure it is not eliminated.<br>
> +; Note that gold picks the first copy of f() as the prevailing one,<br>
> +; so listing %t2.o first is sufficient to ensure that this copy is<br>
> +; preempted. Also, set the import-instr-limit to 0 to prevent f() from<br>
> +; being imported from %t2.o which hides the problem.<br>
> +; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \<br>
> +; RUN:     --plugin-opt=thinlto \<br>
> +; RUN:     --plugin-opt=-import-instr-limit=0 \<br>
> +; RUN:     --plugin-opt=save-temps \<br>
> +; RUN:     -o %t3.o %t2.o %t.o<br>
> +; RUN: llvm-nm %t3.o | FileCheck %s<br>
> +; RUN: llvm-dis %t.o.opt.bc -o - | FileCheck --check-prefix=OPT %s<br>
> +; RUN: llvm-dis %t2.o.opt.bc -o - | FileCheck --check-prefix=OPT2 %s<br>
> +<br>
> +; Ensure that f() is defined in resulting object file, and also<br>
> +; confirm the weak linkage directly in the saved opt bitcode files.<br>
> +; CHECK-NOT: U f<br>
> +; OPT: declare extern_weak hidden void @f()<br>
> +; OPT2: define weak_odr hidden void @f()<br>
> +<br>
> +target triple = "x86_64-unknown-linux-gnu"<br>
<br>
</div></div>When you specify target triple, you should pass -m elf_x86_64<br>
to linker since the default linker target may be different.<br>
<br>
<br>
--<br>
H.J.<br>
----<br>
diff --git a/test/tools/gold/X86/thinlto_linkonceresolution.ll<br>
b/test/tools/gold/X86/thinlto_linkonceresolution.ll<br>
index 044087b..e6ed95b 100644<br>
--- a/test/tools/gold/X86/thinlto_linkonceresolution.ll<br>
+++ b/test/tools/gold/X86/thinlto_linkonceresolution.ll<br>
@@ -7,7 +7,7 @@<br>
<span class=""> ; so listing %t2.o first is sufficient to ensure that this copy is<br>
</span><span class=""> ; preempted. Also, set the import-instr-limit to 0 to prevent f() from<br>
</span><span class=""> ; being imported from %t2.o which hides the problem.<br>
</span>-; RUN: %gold -plugin %llvmshlibdir/LLVMgold.so \<br>
+; RUN: %gold -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold.so \<br>
 ; RUN:     --plugin-opt=thinlto \<br>
 ; RUN:     --plugin-opt=-import-instr-limit=0 \<br>
 ; RUN:     --plugin-opt=save-temps \<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><span style="font-family:Times;font-size:medium"><table cellspacing="0" cellpadding="0"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px">Teresa Johnson |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"> Software Engineer |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"> <a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"> 408-460-2413</td></tr></tbody></table></span></div>
</div>