[ELF] Don't create an output section named `/DISCARD/` if it is assigned to the special phdr `NONE`
Fixes the remaining issue of PR41673 after D61186: with `/DISCARD/ { ... } :NONE`, we may create an output section named `/DISCARD/`. Note, if an input section is named `/DISCARD/`, ld.bfd discards it but lld keeps it. It is probably not worth copying this behavior as it is unrealistic. Reviewed By: ruiu Differential Revision: https://reviews.llvm.org/D62768 llvm-svn: 362356
This commit is contained in:
parent
c78c999a9c
commit
abb7484c31
|
@ -824,6 +824,9 @@ void LinkerScript::assignOffsets(OutputSection *Sec) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isDiscardable(OutputSection &Sec) {
|
static bool isDiscardable(OutputSection &Sec) {
|
||||||
|
if (Sec.Name == "/DISCARD/")
|
||||||
|
return true;
|
||||||
|
|
||||||
// We do not remove empty sections that are explicitly
|
// We do not remove empty sections that are explicitly
|
||||||
// assigned to any segment.
|
// assigned to any segment.
|
||||||
if (!Sec.Phdrs.empty())
|
if (!Sec.Phdrs.empty())
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
# RUN: /DISCARD/ : { *(.discard) } :NONE \
|
# RUN: /DISCARD/ : { *(.discard) } :NONE \
|
||||||
# RUN: }" > %t.script
|
# RUN: }" > %t.script
|
||||||
# RUN: ld.lld -o %t --script %t.script %t.o
|
# RUN: ld.lld -o %t --script %t.script %t.o
|
||||||
# RUN: llvm-readelf -S -l %t | FileCheck %s
|
# RUN: llvm-readelf -S -l %t | FileCheck --implicit-check-not=/DISCARD/ %s
|
||||||
|
|
||||||
## Check that /DISCARD/ does not interfere with the assignment of segments to
|
## Check that /DISCARD/ does not interfere with the assignment of segments to
|
||||||
## sections.
|
## sections.
|
||||||
|
|
Loading…
Reference in New Issue