Index: lld/trunk/ELF/Writer.cpp =================================================================== --- lld/trunk/ELF/Writer.cpp +++ lld/trunk/ELF/Writer.cpp @@ -119,6 +119,8 @@ } template void elf::reportDiscarded(InputSectionBase *IS) { + if (IS == In::ShStrTab) + error("discarding .shstrtab section is not allowed"); if (!Config->PrintGcSections) return; errs() << "removing unused section from '" << IS->Name << "' in file '" @@ -377,6 +379,12 @@ In::EhFrameHdr = make>(); Symtab::X->Sections.push_back(In::EhFrameHdr); } + + if (In::SymTab) + Symtab::X->Sections.push_back(In::SymTab); + Symtab::X->Sections.push_back(In::ShStrTab); + if (In::StrTab) + Symtab::X->Sections.push_back(In::StrTab); } template @@ -1089,10 +1097,6 @@ auto OS = dyn_cast_or_null>(findSection(".ARM.exidx")); if (OS && !OS->Sections.empty() && !Config->Relocatable) OS->addSection(make>()); - - addInputSec(In::SymTab); - addInputSec(In::ShStrTab); - addInputSec(In::StrTab); } // The linker is expected to define SECNAME_start and SECNAME_end Index: lld/trunk/test/ELF/linkerscript/sections.s =================================================================== --- lld/trunk/test/ELF/linkerscript/sections.s +++ lld/trunk/test/ELF/linkerscript/sections.s @@ -66,22 +66,11 @@ # SEC-SWAP-NAMES: 7 .shstrtab 0000003b {{[0-9a-f]*}} # SEC-SWAP-NAMES: 8 .strtab 00000008 {{[0-9a-f]*}} -# .shstrtab from the input object file is discarded. -# RUN: echo "SECTIONS { \ -# RUN: /DISCARD/ : { *(.shstrtab) } }" > %t.script -# RUN: ld.lld -o %t5 --script %t.script %t -# RUN: llvm-objdump -section-headers %t5 | \ +# Attemp to discard .shstrtab section. +# RUN: echo "SECTIONS { /DISCARD/ : { *(.shstrtab) } }" > %t.script +# RUN: not ld.lld -o %t5 --script %t.script %t 2>&1 | \ # RUN: FileCheck -check-prefix=SEC-DISCARD %s - -# Idx Name Size -# SEC-DISCARD: 1 .text 0000000e {{[0-9a-f]*}} TEXT DATA -# SEC-DISCARD: 2 .data 00000020 {{[0-9a-f]*}} DATA -# SEC-DISCARD: 3 other 00000003 {{[0-9a-f]*}} DATA -# SEC-DISCARD: 4 .bss 00000002 {{[0-9a-f]*}} BSS -# SEC-DISCARD: 5 .comment 00000008 {{[0-9a-f]*}} -# SEC-DISCARD: 6 .symtab 00000030 {{[0-9a-f]*}} -# SEC-DISCARD: 7 .shstrtab 0000003b {{[0-9a-f]*}} -# SEC-DISCARD: 8 .strtab 00000008 {{[0-9a-f]*}} +# SEC-DISCARD: discarding .shstrtab section is not allowed # Multiple SECTIONS command specifying additional input section descriptions # for the same output section description - input sections are merged into