[llvm-commits] [llvm] r122268 - in /llvm/trunk: lib/MC/ELFObjectWriter.cpp test/MC/ELF/set.s

Roman Divacky rdivacky at freebsd.org
Mon Dec 20 13:14:39 PST 2010


Author: rdivacky
Date: Mon Dec 20 15:14:39 2010
New Revision: 122268

URL: http://llvm.org/viewvc/llvm-project?rev=122268&view=rev
Log:
Set the value of absolute symbols.


Modified:
    llvm/trunk/lib/MC/ELFObjectWriter.cpp
    llvm/trunk/test/MC/ELF/set.s

Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=122268&r1=122267&r2=122268&view=diff
==============================================================================
--- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Mon Dec 20 15:14:39 2010
@@ -518,6 +518,15 @@
     return Data.getCommonAlignment();
 
   const MCSymbol &Symbol = Data.getSymbol();
+
+  if (Symbol.isAbsolute() && Symbol.isVariable()) {
+    if (const MCExpr *Value = Symbol.getVariableValue()) {
+      int64_t IntValue;
+      if (Value->EvaluateAsAbsolute(IntValue, Layout))
+	return (uint64_t)IntValue;
+    }
+  }
+
   if (!Symbol.isInSection())
     return 0;
 

Modified: llvm/trunk/test/MC/ELF/set.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/set.s?rev=122268&r1=122267&r2=122268&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/set.s (original)
+++ llvm/trunk/test/MC/ELF/set.s Mon Dec 20 15:14:39 2010
@@ -1,5 +1,18 @@
 // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | elf-dump  --dump-section-data | FileCheck  %s
 
+// Test that we emit the correct value.
+
+.set kernbase,0xffffffff80000000
+
+// CHECK:         (('st_name', 0x00000001) # 'kernbase'
+// CHECK-NEXT:     ('st_bind', 0x00000000)
+// CHECK-NEXT:     ('st_type', 0x00000000)
+// CHECK-NEXT:     ('st_other', 0x00000000)
+// CHECK-NEXT:     ('st_shndx', 0x0000fff1)
+// CHECK-NEXT:     ('st_value', 0xffffffff80000000)
+// CHECK-NEXT:     ('st_size', 0x0000000000000000)
+// CHECK-NEXT:    ),
+
 // Test that we accept .set of a symbol after it has been used in a statement.
 
         jmp foo
@@ -11,7 +24,7 @@
 	.set	foo2,bar2
 
 // Test that there is an undefined reference to bar
-// CHECK:      (('st_name', 0x00000001) # 'bar'
+// CHECK:      (('st_name', 0x0000000a) # 'bar'
 // CHECK-NEXT:  ('st_bind', 0x00000001)
 // CHECK-NEXT:  ('st_type', 0x00000000)
 // CHECK-NEXT:  ('st_other', 0x00000000)





More information about the llvm-commits mailing list