diff options
-rw-r--r-- | lld/ELF/Writer.cpp | 5 | ||||
-rw-r--r-- | lld/test/ELF/linkerscript/discard-section.s | 10 |
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 |