forked from OSchip/llvm-project
[ELF] - Linkerscript: make section with no content to be SHT_PROGBITS by default.
Imagine next script: SECTIONS { BYTE(0x11); } Section content written to disk will be 0x11. Previous LLD behavior was to make this section SHT_NOBITS. What is not correct because section has content. ld.bfd makes such sections SHT_PROGBITS, this patch do the same. This fixes PR32537 Differential revision: https://reviews.llvm.org/D32016 llvm-svn: 300317
This commit is contained in:
parent
36a0b98e24
commit
1022112d77
|
@ -632,7 +632,7 @@ void LinkerScript::adjustSectionsBeforeSorting() {
|
|||
// '.' is assigned to, but creating these section should not have any bad
|
||||
// consequeces and gives us a section to put the symbol in.
|
||||
uint64_t Flags = SHF_ALLOC;
|
||||
uint32_t Type = SHT_NOBITS;
|
||||
uint32_t Type = SHT_PROGBITS;
|
||||
for (BaseCommand *Base : Opt.Commands) {
|
||||
auto *Cmd = dyn_cast<OutputSectionCommand>(Base);
|
||||
if (!Cmd)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# RUN: foo = 123; \
|
||||
# RUN: . = 0x1000; \
|
||||
# RUN: . = 0x2000; \
|
||||
# RUN: .bar : { . = . + 1; } \
|
||||
# RUN: .bar : { *(.bar) } \
|
||||
# RUN: }" > %t.script
|
||||
# RUN: ld.lld -o %t -T %t.script %t.o -shared
|
||||
# RUN: llvm-readobj -s %t | FileCheck %s
|
||||
|
@ -16,3 +16,5 @@
|
|||
# CHECK-NEXT: SHF_EXECINSTR
|
||||
# CHECK-NEXT: ]
|
||||
# CHECK-NEXT: Address: 0x1000
|
||||
|
||||
.section .bar, "aw"
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
# CHECK: Sections:
|
||||
# CHECK-NEXT: Idx Name Size Address
|
||||
# CHECK-NEXT: 0 00000000 0000000000000000
|
||||
# CHECK: abc 00000000 [[ADDR:[0-9a-f]*]] BSS
|
||||
# CHECK: abc 00000000 [[ADDR:[0-9a-f]*]] DATA
|
||||
# CHECK-NEXT: bar 00000000 0000000000001000 DATA
|
||||
|
||||
# CHECK: SYMBOL TABLE:
|
||||
|
|
Loading…
Reference in New Issue