<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 22, 2016 at 1:48 PM, Davide Italiano via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: davide<br>
Date: Wed Jun 22 15:48:15 2016<br>
New Revision: 273474<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=273474&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=273474&view=rev</a><br>
Log:<br>
[IRObjectFile] Propagate .weak attribute correctly for ASM symbols.<br>
<br>
PR: 28256<br>
Differential Revision:  <a href="http://reviews.llvm.org/D21616" rel="noreferrer" target="_blank">http://reviews.llvm.org/D21616</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/Object/IRObjectFile.cpp<br>
    llvm/trunk/lib/Object/RecordStreamer.cpp<br>
    llvm/trunk/lib/Object/RecordStreamer.h<br>
    llvm/trunk/test/Object/X86/nm-bitcodeweak.test<br>
<br>
Modified: llvm/trunk/lib/Object/IRObjectFile.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/IRObjectFile.cpp?rev=273474&r1=273473&r2=273474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/IRObjectFile.cpp?rev=273474&r1=273473&r2=273474&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Object/IRObjectFile.cpp (original)<br>
+++ llvm/trunk/lib/Object/IRObjectFile.cpp Wed Jun 22 15:48:15 2016<br>
@@ -116,6 +116,9 @@ void IRObjectFile::CollectAsmUndefinedRe<br>
       Res |= BasicSymbolRef::SF_Undefined;<br>
       Res |= BasicSymbolRef::SF_Global;<br>
       break;<br>
+    case RecordStreamer::GlobalWeak:<br>
+      Res |= BasicSymbolRef::SF_Weak;<br>
+      Res |= BasicSymbolRef::SF_Global;<br></blockquote><div><br></div><div>You probably want a `break` here to be a bit more defensive.</div><div><br></div><div>-- Sean Silva</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     }<br>
     AsmUndefinedRefs(Key, BasicSymbolRef::Flags(Res));<br>
   }<br>
<br>
Modified: llvm/trunk/lib/Object/RecordStreamer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/RecordStreamer.cpp?rev=273474&r1=273473&r2=273474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/RecordStreamer.cpp?rev=273474&r1=273473&r2=273474&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Object/RecordStreamer.cpp (original)<br>
+++ llvm/trunk/lib/Object/RecordStreamer.cpp Wed Jun 22 15:48:15 2016<br>
@@ -23,21 +23,26 @@ void RecordStreamer::markDefined(const M<br>
   case Used:<br>
     S = Defined;<br>
     break;<br>
+  case GlobalWeak:<br>
+    break;<br>
   }<br>
 }<br>
<br>
-void RecordStreamer::markGlobal(const MCSymbol &Symbol) {<br>
+void RecordStreamer::markGlobal(const MCSymbol &Symbol,<br>
+                                MCSymbolAttr Attribute) {<br>
   State &S = Symbols[Symbol.getName()];<br>
   switch (S) {<br>
   case DefinedGlobal:<br>
   case Defined:<br>
-    S = DefinedGlobal;<br>
+    S = (Attribute == MCSA_Weak) ? GlobalWeak : DefinedGlobal;<br>
     break;<br>
<br>
   case NeverSeen:<br>
   case Global:<br>
   case Used:<br>
-    S = Global;<br>
+    S = (Attribute == MCSA_Weak) ? GlobalWeak : Global;<br>
+    break;<br>
+  case GlobalWeak:<br>
     break;<br>
   }<br>
 }<br>
@@ -48,6 +53,7 @@ void RecordStreamer::markUsed(const MCSy<br>
   case DefinedGlobal:<br>
   case Defined:<br>
   case Global:<br>
+  case GlobalWeak:<br>
     break;<br>
<br>
   case NeverSeen:<br>
@@ -85,7 +91,7 @@ void RecordStreamer::EmitAssignment(MCSy<br>
 bool RecordStreamer::EmitSymbolAttribute(MCSymbol *Symbol,<br>
                                          MCSymbolAttr Attribute) {<br>
   if (Attribute == MCSA_Global || Attribute == MCSA_Weak)<br>
-    markGlobal(*Symbol);<br>
+    markGlobal(*Symbol, Attribute);<br>
   return true;<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/lib/Object/RecordStreamer.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/RecordStreamer.h?rev=273474&r1=273473&r2=273474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/RecordStreamer.h?rev=273474&r1=273473&r2=273474&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Object/RecordStreamer.h (original)<br>
+++ llvm/trunk/lib/Object/RecordStreamer.h Wed Jun 22 15:48:15 2016<br>
@@ -15,12 +15,12 @@<br>
 namespace llvm {<br>
 class RecordStreamer : public MCStreamer {<br>
 public:<br>
-  enum State { NeverSeen, Global, Defined, DefinedGlobal, Used };<br>
+  enum State { NeverSeen, Global, GlobalWeak, Defined, DefinedGlobal, Used };<br>
<br>
 private:<br>
   StringMap<State> Symbols;<br>
   void markDefined(const MCSymbol &Symbol);<br>
-  void markGlobal(const MCSymbol &Symbol);<br>
+  void markGlobal(const MCSymbol &Symbol, MCSymbolAttr Attribute);<br>
   void markUsed(const MCSymbol &Symbol);<br>
   void visitUsedSymbol(const MCSymbol &Sym) override;<br>
<br>
<br>
Modified: llvm/trunk/test/Object/X86/nm-bitcodeweak.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/X86/nm-bitcodeweak.test?rev=273474&r1=273473&r2=273474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/X86/nm-bitcodeweak.test?rev=273474&r1=273473&r2=273474&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/Object/X86/nm-bitcodeweak.test (original)<br>
+++ llvm/trunk/test/Object/X86/nm-bitcodeweak.test Wed Jun 22 15:48:15 2016<br>
@@ -1,7 +1,7 @@<br>
 ; RUN: llvm-as %s -o=%t1<br>
 ; RUN: llvm-nm %t1 | FileCheck %s<br>
<br>
-; CHECK: T __libc_blah<br>
+; CHECK: W __libc_blah<br>
<br>
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"<br>
 target triple = "x86_64-unknown-freebsd11.0"<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>