Index: ELF/InputSection.cpp =================================================================== --- ELF/InputSection.cpp +++ ELF/InputSection.cpp @@ -53,6 +53,15 @@ return (Flags & SHF_COMPRESSED) || Name.startswith(".zdebug"); } +// 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. +template +static typename ELFT::uint filter(typename ELFT::uint Flags) { + if (Config->Optimize == 0) + return Flags & ~(SHF_MERGE | SHF_STRINGS); + return Flags; +} + template InputSectionBase::InputSectionBase(elf::ObjectFile *File, uintX_t Flags, uint32_t Type, @@ -62,8 +71,8 @@ Kind SectionKind) : InputSectionData(SectionKind, Name, Data, isCompressed(Flags, Name), !Config->GcSections || !(Flags & SHF_ALLOC)), - File(File), Flags(Flags), Entsize(Entsize), Type(Type), Link(Link), - Info(Info), Repl(this) { + File(File), Flags(filter(Flags)), Entsize(Entsize), Type(Type), + Link(Link), Info(Info), Repl(this) { NumRelocations = 0; AreRelocsRela = false; Index: test/ELF/merge-string.s =================================================================== --- test/ELF/merge-string.s +++ test/ELF/merge-string.s @@ -61,8 +61,6 @@ // 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 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