summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Writer.cpp5
-rw-r--r--lld/test/ELF/linkerscript/discard-section.s10
2 files changed, 13 insertions, 2 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index e42240fdd83..5ab9d64e116 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -244,8 +244,6 @@ template <class ELFT> static std::vector<DefinedCommon *> getCommonSymbols() {
// The main function of the writer.
template <class ELFT> void Writer<ELFT>::run() {
- if (Config->Discard != DiscardPolicy::All)
- copyLocalSymbols();
addReservedSymbols();
if (Target->NeedsThunks)
@@ -262,6 +260,9 @@ template <class ELFT> void Writer<ELFT>::run() {
Script<ELFT>::X->processCommands(Factory);
}
+ if (Config->Discard != DiscardPolicy::All)
+ copyLocalSymbols();
+
finalizeSections();
if (HasError)
return;
diff --git a/lld/test/ELF/linkerscript/discard-section.s b/lld/test/ELF/linkerscript/discard-section.s
new file mode 100644
index 00000000000..d7d2acff1b4
--- /dev/null
+++ b/lld/test/ELF/linkerscript/discard-section.s
@@ -0,0 +1,10 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+# RUN: echo "SECTIONS { /DISCARD/ : { *(.aaa*) } }" > %t.script
+# RUN: ld.lld -o %t1 --script %t.script %t
+# RUN: llvm-objdump -section-headers %t1 | FileCheck %s
+# CHECK-NOT: .aaa
+
+.section .aaa,"a"
+aaa:
+ .quad 0
OpenPOWER on IntegriCloud