[lld] r288151 - [ELF] - Disable emiting multiple output sections when merging is disabled.

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 29 08:11:10 PST 2016


Author: grimar
Date: Tue Nov 29 10:11:09 2016
New Revision: 288151

URL: http://llvm.org/viewvc/llvm-project?rev=288151&view=rev
Log:
[ELF] - Disable emiting multiple output sections when merging is disabled.

When -O0 is specified, we do not do section merging.
Though before this patch several sections were generated instead
of single, what is useless.

Differential revision: https://reviews.llvm.org/D27041

Added:
    lld/trunk/test/ELF/no-merge.s
Modified:
    lld/trunk/ELF/InputSection.cpp
    lld/trunk/test/ELF/merge-string.s

Modified: lld/trunk/ELF/InputSection.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.cpp?rev=288151&r1=288150&r2=288151&view=diff
==============================================================================
--- lld/trunk/ELF/InputSection.cpp (original)
+++ lld/trunk/ELF/InputSection.cpp Tue Nov 29 10:11:09 2016
@@ -80,6 +80,12 @@ InputSectionBase<ELFT>::InputSectionBase
   if (V > UINT32_MAX)
     fatal(toString(File) + ": section sh_addralign is too large");
   Alignment = V;
+
+  // If it is not a mergeable section, overwrite the flag so that the flag
+  // is consistent with the class. This inconsistency could occur when
+  // string merging is disabled using -O0 flag.
+  if (!Config->Relocatable && !isa<MergeInputSection<ELFT>>(this))
+    this->Flags &= ~(SHF_MERGE | SHF_STRINGS);
 }
 
 template <class ELFT>

Modified: lld/trunk/test/ELF/merge-string.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/merge-string.s?rev=288151&r1=288150&r2=288151&view=diff
==============================================================================
--- lld/trunk/test/ELF/merge-string.s (original)
+++ lld/trunk/test/ELF/merge-string.s Tue Nov 29 10:11:09 2016
@@ -61,8 +61,6 @@ zed:
 // NOMERGE-NEXT: Type:    SHT_PROGBITS
 // NOMERGE-NEXT: Flags [
 // NOMERGE-NEXT:   SHF_ALLOC
-// NOMERGE-NEXT:   SHF_MERGE
-// NOMERGE-NEXT:   SHF_STRINGS
 // NOMERGE-NEXT: ]
 // NOMERGE-NEXT: Address:         0x1C8
 // NOMERGE-NEXT: Offset:  0x1C8

Added: lld/trunk/test/ELF/no-merge.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/no-merge.s?rev=288151&view=auto
==============================================================================
--- lld/trunk/test/ELF/no-merge.s (added)
+++ lld/trunk/test/ELF/no-merge.s Tue Nov 29 10:11:09 2016
@@ -0,0 +1,25 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+# RUN: echo "SECTIONS { .data : {*(.data.*)} }" > %t0.script
+# RUN: ld.lld %t.o -o %t0.out --script %t0.script
+# RUN: llvm-objdump -s %t0.out | FileCheck %s --check-prefix=OPT
+# OPT:      Contents of section .data:
+# OPT-NEXT:   0000 01
+# OPT-NEXT: Contents of section .data:
+# OPT-NEXT:   0001 6100
+# OPT-NEXT: Contents of section .data:
+# OPT-NEXT:   0003 03
+
+# RUN: ld.lld -O0 %t.o -o %t1.out --script %t0.script
+# RUN: llvm-objdump -s %t1.out | FileCheck %s --check-prefix=NOOPT
+# NOOPT:      Contents of section .data:
+# NOOPT-NEXT:   0000 01610003
+
+.section .data.aw,"aw", at progbits
+.byte 1
+
+.section .data.ams,"aMS", at progbits,1
+.asciz "a"
+
+.section .data.am,"aM", at progbits,1
+.byte 3




More information about the llvm-commits mailing list