[lld] 1408504 - [ELF] Name MergeSyntheticSection using an input section instead of the output section

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Tue May 2 09:35:05 PDT 2023


Author: Fangrui Song
Date: 2023-05-02T09:35:00-07:00
New Revision: 1408504564f2ecc6020eb1b2735d441b3292ea27

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

LOG: [ELF] Name MergeSyntheticSection using an input section instead of the output section

In a link map, the input section name gives more information. See the updated
merge-entsize.s for an example. The output file is unchanged.

Compiler generated input sections with the SHF_MERGE flag have names such as
.rodata.str1.1 and .rodata.cstN, and are not affected by -fdata-sections.

Reviewed By: peter.smith

Differential Revision: https://reviews.llvm.org/D149466

Added: 
    

Modified: 
    lld/ELF/OutputSections.cpp
    lld/test/ELF/merge-entsize.s
    lld/test/ELF/merge-string-align.s

Removed: 
    


################################################################################
diff  --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp
index a1aec83f4ac85..97f676f000fdc 100644
--- a/lld/ELF/OutputSections.cpp
+++ b/lld/ELF/OutputSections.cpp
@@ -217,7 +217,7 @@ void OutputSection::finalizeInputSections() {
       });
       if (i == mergeSections.end()) {
         MergeSyntheticSection *syn =
-            createMergeSynthetic(name, ms->type, ms->flags, ms->addralign);
+            createMergeSynthetic(s->name, ms->type, ms->flags, ms->addralign);
         mergeSections.push_back(syn);
         i = std::prev(mergeSections.end());
         syn->entsize = ms->entsize;

diff  --git a/lld/test/ELF/merge-entsize.s b/lld/test/ELF/merge-entsize.s
index 080d71b329713..f45b334f63656 100644
--- a/lld/test/ELF/merge-entsize.s
+++ b/lld/test/ELF/merge-entsize.s
@@ -1,8 +1,12 @@
 // REQUIRES: x86
 // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
-// RUN: ld.lld %t.o -o %t
+// RUN: ld.lld %t.o -o %t -M | FileCheck %s --check-prefix=MAP
 // RUN: llvm-readobj -S %t | FileCheck %s
 
+// MAP:      .rodata{{$}}
+// MAP-NEXT:         <internal>:(.rodata.1)
+// MAP-NEXT:         <internal>:(.rodata.2)
+
         .section  .rodata.1,"aM", at progbits,1
         .p2align 2
         .byte 0x42

diff  --git a/lld/test/ELF/merge-string-align.s b/lld/test/ELF/merge-string-align.s
index 0098d95b23d33..661019dd9b5b7 100644
--- a/lld/test/ELF/merge-string-align.s
+++ b/lld/test/ELF/merge-string-align.s
@@ -1,8 +1,13 @@
 // REQUIRES: x86
 // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
-// RUN: ld.lld %t.o -o %t.so -shared
+// RUN: ld.lld %t.o -o %t.so -shared -M | FileCheck %s --check-prefix=MAP
 // RUN: llvm-readobj -S --section-data %t.so | FileCheck %s
 
+// MAP:      .rodata{{$}}
+// MAP-NEXT:         <internal>:(.rodata.foo)
+// MAP-NEXT: .rodata2
+// MAP-NEXT:         <internal>:(.rodata2)
+
         .section        .rodata.foo,"aMS", at progbits,1
         .align  16
         .asciz "foo"


        


More information about the llvm-commits mailing list