Index: ELF/LinkerScript.cpp =================================================================== --- ELF/LinkerScript.cpp +++ ELF/LinkerScript.cpp @@ -87,7 +87,7 @@ // There was a forward reference. Sec = SecRef; } else { - Sec = make(Name, SHT_PROGBITS, 0); + Sec = make(Name, SHT_NOBITS, 0); if (!SecRef) SecRef = Sec; } Index: ELF/OutputSections.cpp =================================================================== --- ELF/OutputSections.cpp +++ ELF/OutputSections.cpp @@ -312,6 +312,10 @@ Sections.push_back(IS); } } + if (auto *Data = dyn_cast(Base)) { + if(Type == SHT_NOBITS) + Type = SHT_PROGBITS; + } } if (Flags & SHF_LINK_ORDER) { Index: test/ELF/linkerscript/arm-exidx-order.s =================================================================== --- test/ELF/linkerscript/arm-exidx-order.s +++ test/ELF/linkerscript/arm-exidx-order.s @@ -9,7 +9,7 @@ # CHECK: Section { # CHECK: Index: # CHECK: Name: .foo -# CHECK-NEXT: Type: SHT_PROGBITS +# CHECK-NEXT: Type: SHT_NOBITS # CHECK-NEXT: Flags [ # CHECK-NEXT: SHF_ALLOC # CHECK-NEXT: ] Index: test/ELF/linkerscript/extend-pt-load.s =================================================================== --- test/ELF/linkerscript/extend-pt-load.s +++ test/ELF/linkerscript/extend-pt-load.s @@ -33,18 +33,17 @@ # RUN: .hash : { } \ # RUN: .dynstr : { } \ # RUN: .text : { *(.text) } \ -# RUN: . = ALIGN(0x1000); \ -# RUN: bar : { HIDDEN(bar_sym = .); } \ +# RUN: bar : { . = ALIGN(0x1000); } \ # RUN: .data.rel.ro : { *(.data.rel.ro) } \ # RUN: }" > %t.script # RUN: ld.lld --hash-style=sysv -o %t2 --script %t.script %t.o -shared # RUN: llvm-readobj --elf-output-style=GNU -l -s %t2 | FileCheck --check-prefix=CHECK2 %s # CHECK2: .text PROGBITS 00000000000001bc 0001bc 000001 00 AX -# CHECK2-NEXT: bar PROGBITS 0000000000001000 001000 000000 00 AX +# CHECK2-NEXT: bar NOBITS 00000000000001bd 0001bd 000e43 00 AX # CHECK2-NEXT: .data.rel.ro PROGBITS 0000000000001000 001000 000001 00 WA -# CHECK2: LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x001000 0x001000 R E +# CHECK2: LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x0001bd 0x001000 R E # CHECK2-NEXT: LOAD 0x001000 0x0000000000001000 0x0000000000001000 0x000068 0x000068 RW # If the current behavior becomes a problem we should consider just moving the commands out Index: test/ELF/linkerscript/merge-sections.s =================================================================== --- test/ELF/linkerscript/merge-sections.s +++ test/ELF/linkerscript/merge-sections.s @@ -36,7 +36,7 @@ # RUN: llvm-readobj -s -t %t2 | FileCheck %s --check-prefix=GC # GC: Name: .foo -# GC-NEXT: Type: SHT_PROGBITS +# GC-NEXT: Type: SHT_NOBITS # GC-NEXT: Flags [ # GC-NEXT: SHF_ALLOC # GC-NEXT: ] Index: test/ELF/linkerscript/symbol-only-flags.s =================================================================== --- test/ELF/linkerscript/symbol-only-flags.s +++ test/ELF/linkerscript/symbol-only-flags.s @@ -10,7 +10,7 @@ # CHECK: Section { # CHECK: Index: # CHECK: Name: .foo -# CHECK-NEXT: Type: SHT_PROGBITS +# CHECK-NEXT: Type: SHT_NOBITS # CHECK-NEXT: Flags [ # CHECK-NEXT: SHF_ALLOC # CHECK-NEXT: SHF_WRITE Index: test/ELF/linkerscript/symbol-only.s =================================================================== --- test/ELF/linkerscript/symbol-only.s +++ test/ELF/linkerscript/symbol-only.s @@ -12,7 +12,7 @@ # CHECK: Sections: # CHECK-NEXT: Idx Name Size Address # CHECK-NEXT: 0 00000000 0000000000000000 -# CHECK: abc 00000000 [[ADDR:[0-9a-f]*]] DATA +# CHECK: abc 00000000 [[ADDR:[0-9a-f]*]] BSS # CHECK-NEXT: bar 00000000 0000000000001000 DATA # CHECK: SYMBOL TABLE: