[lld] d60ef93 - [ELF] Support quoted output section names

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 3 11:03:06 PST 2023


Author: Fangrui Song
Date: 2023-02-03T11:03:00-08:00
New Revision: d60ef9338deb734541ff1c9d0771807815d5d9e6

URL: https://github.com/llvm/llvm-project/commit/d60ef9338deb734541ff1c9d0771807815d5d9e6
DIFF: https://github.com/llvm/llvm-project/commit/d60ef9338deb734541ff1c9d0771807815d5d9e6.diff

LOG: [ELF] Support quoted output section names

Similar to e7a7ad134fe182aad190cb3ebc441164470e92f5 and
2bf06d9345caeb26520be8e830c092683bbdf0f7 for other linker script syntax.

Close https://github.com/llvm/llvm-project/issues/60496

Added: 
    

Modified: 
    lld/ELF/ScriptParser.cpp
    lld/test/ELF/linkerscript/quoted-section-name.test

Removed: 
    


################################################################################
diff  --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp
index bb09bde5d22ef..e83779bcebff5 100644
--- a/lld/ELF/ScriptParser.cpp
+++ b/lld/ELF/ScriptParser.cpp
@@ -900,7 +900,8 @@ OutputDesc *ScriptParser::readOverlaySectionDescription() {
 }
 
 OutputDesc *ScriptParser::readOutputSectionDescription(StringRef outSec) {
-  OutputDesc *cmd = script->createOutputSection(outSec, getCurrentLocation());
+  OutputDesc *cmd =
+      script->createOutputSection(unquote(outSec), getCurrentLocation());
   OutputSection *osec = &cmd->osec;
   // Maybe relro. Will reset to false if DATA_SEGMENT_RELRO_END is absent.
   osec->relro = seenDataAlign && !seenRelroEnd;

diff  --git a/lld/test/ELF/linkerscript/quoted-section-name.test b/lld/test/ELF/linkerscript/quoted-section-name.test
index aa675759631c0..43e8fd047f170 100644
--- a/lld/test/ELF/linkerscript/quoted-section-name.test
+++ b/lld/test/ELF/linkerscript/quoted-section-name.test
@@ -1,13 +1,21 @@
 # REQUIRES: x86
 
 ## Handling of quotes is tricky sometimes. Check we do that right and include
-## "foo bar" section into .data as expected.
+## "foo bar" section into ".data foo" as expected.
 
-# RUN: echo '.section "foo bar", "aw"; nop' | llvm-mc -filetype=obj -triple=x86_64-pc-linux - -o %t
-# RUN: ld.lld %t --script %s -o %t2 --print-map | FileCheck %s
-# CHECK:      .data
+# RUN: echo '.section "foo bar", "aw"; nop' | llvm-mc -filetype=obj -triple=x86_64 - -o %t.o
+# RUN: ld.lld %t.o --script %s -o %t --print-map | FileCheck %s
+# RUN: llvm-readelf -S %t | FileCheck %s --check-prefix=SEC
+# CHECK:      .data foo
 # CHECK-NEXT:   {{.*}}(foo bar)
 
+# SEC: ]{{  }}.data foo
+# SEC: ]{{  }}.data bar
+
 SECTIONS {
-  .data : { *("foo bar") }
+  " .data foo" : { *("foo bar") }
+}
+
+OVERWRITE_SECTIONS {
+  " .data bar" : { bar = .; }
 }


        


More information about the llvm-commits mailing list