[lld] [LLD] [ELF] Add support for linker script unary plus operator (PR #121508)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 2 09:54:45 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lld

Author: Parth Arora (partaror)

<details>
<summary>Changes</summary>

This commit adds support for linker script unary plus ('+') operator. It is helpful for improving compatibility between LLD and GNU LD.

---
Full diff: https://github.com/llvm/llvm-project/pull/121508.diff


2 Files Affected:

- (modified) lld/ELF/ScriptParser.cpp (+3) 
- (modified) lld/test/ELF/linkerscript/operators.test (+2) 


``````````diff
diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp
index f53515cc3f3c0d..49ddd5e7999cfd 100644
--- a/lld/ELF/ScriptParser.cpp
+++ b/lld/ELF/ScriptParser.cpp
@@ -1489,6 +1489,9 @@ Expr ScriptParser::readPrimary() {
     Expr e = readPrimary();
     return [=] { return -e().getValue(); };
   }
+  if (consume("+")) {
+    return readPrimary();
+  }
 
   StringRef tok = next();
   std::string location = getCurrentLocation();
diff --git a/lld/test/ELF/linkerscript/operators.test b/lld/test/ELF/linkerscript/operators.test
index 27209a2e40f598..d7b3becf36d706 100644
--- a/lld/test/ELF/linkerscript/operators.test
+++ b/lld/test/ELF/linkerscript/operators.test
@@ -73,6 +73,7 @@ SECTIONS {
   log2ceil100000000 = LOG2CEIL(0x100000000);
   log2ceil100000001 = LOG2CEIL(0x100000001);
   log2ceilmax = LOG2CEIL(0xffffffffffffffff);
+  unaryadd = +3 + ++5;
 }
 
 # CHECK:      0000000000000002 A unary
@@ -126,6 +127,7 @@ SECTIONS {
 # CHECK-NEXT: 0000000000000020 A log2ceil100000000
 # CHECK-NEXT: 0000000000000021 A log2ceil100000001
 # CHECK-NEXT: 0000000000000040 A log2ceilmax
+# CHECK-NEXT: 0000000000000008 A unaryadd
 
 ## Mailformed number error.
 # RUN: echo "SECTIONS { . = 0x12Q41; }" > %t.script

``````````

</details>


https://github.com/llvm/llvm-project/pull/121508


More information about the llvm-commits mailing list