[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
git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@362356 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/ELF/LinkerScript.cpp b/ELF/LinkerScript.cpp
index a6354c8..3f68e6e 100644
--- a/ELF/LinkerScript.cpp
+++ b/ELF/LinkerScript.cpp
@@ -824,6 +824,9 @@
}
static bool isDiscardable(OutputSection &Sec) {
+ if (Sec.Name == "/DISCARD/")
+ return true;
+
// We do not remove empty sections that are explicitly
// assigned to any segment.
if (!Sec.Phdrs.empty())
diff --git a/test/ELF/linkerscript/discard-phdr.s b/test/ELF/linkerscript/discard-phdr.s
index 311dcba..dc2c823 100644
--- a/test/ELF/linkerscript/discard-phdr.s
+++ b/test/ELF/linkerscript/discard-phdr.s
@@ -10,7 +10,7 @@
# 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
+# RUN: llvm-readelf -S -l %t | FileCheck --implicit-check-not=/DISCARD/ %s
## Check that /DISCARD/ does not interfere with the assignment of segments to
## sections.