If section contains local symbols ldd crashes, because local
symbols are added to symbol table before section is discarded
by linker script processor. This patch calls copyLocalSymbols()
after createSections, so discarded section symbols are not copied
llvm-svn: 282244
// The main function of the writer.
template <class ELFT> void Writer<ELFT>::run() {
- if (Config->Discard != DiscardPolicy::All)
- copyLocalSymbols();
addReservedSymbols();
if (Target->NeedsThunks)
Script<ELFT>::X->processCommands(Factory);
}
+ if (Config->Discard != DiscardPolicy::All)
+ copyLocalSymbols();
+
finalizeSections();
if (HasError)
return;
--- /dev/null
+# 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