forked from OSchip/llvm-project
[LLD][ELF] /DISCARD/ output sections should not be orphans
/DISCARD/ output sections were being treated as orphans. As a result, if a /DISCARD/ output section has been assigned a PHDR, it could cause incorrect assignment of sections to segments. Differential Revision: https://reviews.llvm.org/D61186 llvm-svn: 359565
This commit is contained in:
parent
5b54006be6
commit
24896d304d
|
@ -482,6 +482,7 @@ void LinkerScript::processSectionCommands() {
|
|||
if (Sec->Name == "/DISCARD/") {
|
||||
discard(V);
|
||||
Sec->SectionCommands.clear();
|
||||
Sec->SectionIndex = 0; // Not an orphan.
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
# REQUIRES: x86
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
|
||||
# RUN: echo "PHDRS { \
|
||||
# RUN: exec PT_LOAD FLAGS(0x4 | 0x1); \
|
||||
# RUN: } \
|
||||
# RUN: SECTIONS { \
|
||||
# RUN: .text : { *(.text) } :exec \
|
||||
# RUN: .foo : { *(.foo) } \
|
||||
# RUN: .bar : { *(.bar) } \
|
||||
# RUN: /DISCARD/ : { *(.discard) } :NONE \
|
||||
# RUN: }" > %t.script
|
||||
# RUN: ld.lld -o %t --script %t.script %t.o
|
||||
# RUN: llvm-readelf -S -l %t | FileCheck %s
|
||||
|
||||
## Check that /DISCARD/ does not interfere with the assignment of segments to
|
||||
## sections.
|
||||
|
||||
# CHECK: Section Headers
|
||||
# CHECK: .text
|
||||
# CHECK-NEXT: .foo
|
||||
# CHECK-NEXT: .bar
|
||||
|
||||
# CHECK: Segment Sections
|
||||
# CHECK-NEXT: .text .foo .bar
|
||||
|
||||
.section .text,"ax"
|
||||
ret
|
||||
|
||||
.section .foo,"a"
|
||||
.byte 0
|
||||
|
||||
.section .bar,"ax"
|
||||
ret
|
||||
|
||||
.section .discard
|
||||
.byte 0
|
Loading…
Reference in New Issue