[lld] r298088 - Support non abs values in the rhs of +.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 17 06:45:36 PDT 2017


Author: rafael
Date: Fri Mar 17 08:45:36 2017
New Revision: 298088

URL: http://llvm.org/viewvc/llvm-project?rev=298088&view=rev
Log:
Support non abs values in the rhs of +.

Added:
    lld/trunk/test/ELF/linkerscript/expr-sections.s
Modified:
    lld/trunk/ELF/LinkerScript.cpp

Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=298088&r1=298087&r2=298088&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Fri Mar 17 08:45:36 2017
@@ -60,6 +60,8 @@ uint64_t ExprValue::getValue() const {
 }
 
 static ExprValue add(ExprValue A, ExprValue B) {
+  if (A.isAbsolute())
+    std::swap(A, B);
   return {A.Sec, A.ForceAbsolute, A.Val + B.getValue()};
 }
 static ExprValue sub(ExprValue A, ExprValue B) {

Added: lld/trunk/test/ELF/linkerscript/expr-sections.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/expr-sections.s?rev=298088&view=auto
==============================================================================
--- lld/trunk/test/ELF/linkerscript/expr-sections.s (added)
+++ lld/trunk/test/ELF/linkerscript/expr-sections.s Fri Mar 17 08:45:36 2017
@@ -0,0 +1,35 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+# RUN: echo "SECTIONS { foo = ADDR(.text) + 1; bar = 1 + ADDR(.text); };" > %t.script
+# RUN: ld.lld -o %t.so --script %t.script %t.o -shared
+# RUN: llvm-readobj -t -s %t.so | FileCheck %s
+
+# CHECK:      Section {
+# CHECK:        Index:
+# CHECK:        Name: .text
+# CHECK-NEXT:   Type:
+# CHECK-NEXT:   Flags [
+# CHECK-NEXT:     SHF_ALLOC
+# CHECK-NEXT:     SHF_EXECINSTR
+# CHECK-NEXT:   ]
+# CHECK-NEXT:   Address: 0x0
+
+# CHECK:      Symbol {
+# CHECK:        Name: foo
+# CHECK-NEXT:   Value: 0x1
+# CHECK-NEXT:   Size: 0
+# CHECK-NEXT:   Binding: Global
+# CHECK-NEXT:   Type: None
+# CHECK-NEXT:   Other: 0
+# CHECK-NEXT:   Section: .text
+# CHECK-NEXT: }
+
+# CHECK:      Symbol {
+# CHECK:        Name: bar
+# CHECK-NEXT:   Value: 0x1
+# CHECK-NEXT:   Size: 0
+# CHECK-NEXT:   Binding: Global
+# CHECK-NEXT:   Type: None
+# CHECK-NEXT:   Other: 0
+# CHECK-NEXT:   Section: .text
+# CHECK-NEXT: }




More information about the llvm-commits mailing list