Index: ELF/LinkerScript.cpp =================================================================== --- ELF/LinkerScript.cpp +++ ELF/LinkerScript.cpp @@ -277,6 +277,11 @@ typedef typename ELFT::uint uintX_t; uintX_t Flags = C->Flags & (SHF_MERGE | SHF_STRINGS); + // We do not do merge of sections in case when optimization is disabled, + // drop the flags in that case to stop produce multiple output sections. + if (Config->Optimize == 0) + Flags = 0; + uintX_t Alignment = 0; if (isa>(C)) Alignment = std::max(C->Alignment, C->Entsize); Index: test/ELF/no-merge.s =================================================================== --- test/ELF/no-merge.s +++ test/ELF/no-merge.s @@ -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",@progbits +.byte 1 + +.section .data.ams,"aMS",@progbits,1 +.asciz "a" + +.section .data.am,"aM",@progbits,1 +.byte 3