<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>