From 1408504564f2ecc6020eb1b2735d441b3292ea27 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Tue, 2 May 2023 09:35:00 -0700 Subject: [PATCH] [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 --- lld/ELF/OutputSections.cpp | 2 +- lld/test/ELF/merge-entsize.s | 6 +++++- lld/test/ELF/merge-string-align.s | 7 ++++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index a1aec83f4ac8..97f676f000fd 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 080d71b32971..f45b334f6365 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: :(.rodata.1) +// MAP-NEXT: :(.rodata.2) + .section .rodata.1,"aM",@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 0098d95b23d3..661019dd9b5b 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: :(.rodata.foo) +// MAP-NEXT: .rodata2 +// MAP-NEXT: :(.rodata2) + .section .rodata.foo,"aMS",@progbits,1 .align 16 .asciz "foo"