[llvm-commits] [llvm] r79025 - in /llvm/trunk: lib/MC/MCAsmStreamer.cpp test/MC/AsmParser/labels.s

Daniel Dunbar daniel at zuster.org
Fri Aug 14 12:10:46 PDT 2009


Author: ddunbar
Date: Fri Aug 14 14:10:46 2009
New Revision: 79025

URL: http://llvm.org/viewvc/llvm-project?rev=79025&view=rev
Log:
llvm-mc: When handling a .set, make sure to print subsequent references to the
symbol as the symbol name itself, not the expression it was defined to. These
have different semantics due to the quirky .set behavior (which absolutizes an
expression that would otherwise be treated as a relocation).

Modified:
    llvm/trunk/lib/MC/MCAsmStreamer.cpp
    llvm/trunk/test/MC/AsmParser/labels.s

Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=79025&r1=79024&r2=79025&view=diff

==============================================================================
--- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Fri Aug 14 14:10:46 2009
@@ -136,11 +136,18 @@
 
   if (MakeAbsolute) {
     OS << ".set " << Symbol << ", " << Value << '\n';
+
+    // HACK: If the value isn't already absolute, set the symbol value to
+    // itself, we want to use the .set absolute value, not the actual
+    // expression.
+    if (!Value.isAbsolute())
+      getContext().SetSymbolValue(Symbol, MCValue::get(Symbol));
+    else
+      getContext().SetSymbolValue(Symbol, Value);
   } else {
     OS << Symbol << " = " << Value << '\n';
+    getContext().SetSymbolValue(Symbol, Value);
   }
-
-  getContext().SetSymbolValue(Symbol, Value);
 }
 
 void MCAsmStreamer::EmitSymbolAttribute(MCSymbol *Symbol, 

Modified: llvm/trunk/test/MC/AsmParser/labels.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/labels.s?rev=79025&r1=79024&r2=79025&view=diff

==============================================================================
--- llvm/trunk/test/MC/AsmParser/labels.s (original)
+++ llvm/trunk/test/MC/AsmParser/labels.s Fri Aug 14 14:10:46 2009
@@ -23,9 +23,9 @@
 // CHECK: addl $10, %eax
         addl "b$c", %eax
         
-        
 // CHECK: set "a 0", 11
-.set "a 0", 11
+        .set "a 0", 11
+        
 // CHECK: .long 11
         .long "a 0"
 
@@ -49,3 +49,9 @@
 
 // CHECK: .lsym "a 8",1
         .lsym "a 8", 1
+
+// CHECK: set "a 9", a - b
+        .set "a 9", a - b
+        
+// CHECK: .long "a 9"
+        .long "a 9"





More information about the llvm-commits mailing list