Expand variables when evaluating absolute expressions.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 4 Mar 2015 22:03:21 +0000 (22:03 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 4 Mar 2015 22:03:21 +0000 (22:03 +0000)
This allows for variables to be used in .size.
This matches gnu AS functionality.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231295 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCExpr.cpp
test/MC/ELF/size.s [new file with mode: 0644]

index 049113cf5aba9a16e1d69521bbcf1435f9301f73..abd48c094ddf2eb5f3a9a7426d0dbc5457f3302a 100644 (file)
@@ -436,7 +436,7 @@ bool MCExpr::evaluateAsAbsolute(int64_t &Res, const MCAssembler *Asm,
   }
 
   bool IsRelocatable = EvaluateAsRelocatableImpl(
-      Value, Asm, Layout, nullptr, Addrs, InSet, /*ForceVarExpansion*/ false);
+      Value, Asm, Layout, nullptr, Addrs, InSet, /*ForceVarExpansion*/ true);
 
   // Record the current value.
   Res = Value.getConstant();
diff --git a/test/MC/ELF/size.s b/test/MC/ELF/size.s
new file mode 100644 (file)
index 0000000..7bbf661
--- /dev/null
@@ -0,0 +1,15 @@
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux < %s | llvm-readobj -t | FileCheck %s
+
+foo:
+bar = .
+       .size   foo, . - bar + 42
+
+// CHECK:       Symbol {
+// CHECK:         Name: foo
+// CHECK-NEXT:    Value: 0x0
+// CHECK-NEXT:    Size: 42
+// CHECK-NEXT:    Binding: Local
+// CHECK-NEXT:    Type: None
+// CHECK-NEXT:    Other: 0
+// CHECK-NEXT:    Section: .text
+// CHECK-NEXT:  }