Index: ELF/InputFiles.cpp =================================================================== --- ELF/InputFiles.cpp +++ ELF/InputFiles.cpp @@ -270,6 +270,16 @@ default: Sections[I] = createInputSection(Sec); } + + // We found that GNU assembler 2.17.50 [FreeBSD] 2007-07-03 + // could generate broken objects. STT_SECTION symbols can be + // associated with SHT_REL[A]/SHT_SYMTAB/SHT_STRTAB sections. + // In this case we mark these sections as discarded to handle + // situation properly. + if (Sec.sh_type == SHT_SYMTAB || Sec.sh_type == SHT_STRTAB || + Sec.sh_type == SHT_RELA || Sec.sh_type == SHT_RELA) + if (!Sections[I]) + Sections[I] = &InputSection::Discarded; } } Index: ELF/Writer.cpp =================================================================== --- ELF/Writer.cpp +++ ELF/Writer.cpp @@ -97,7 +97,8 @@ } template void elf::reportDiscarded(InputSectionBase *IS) { - if (!Config->PrintGcSections || !IS || IS->Live) + if (!Config->PrintGcSections || !IS || IS->Live || + IS == &InputSection::Discarded) return; errs() << "removing unused section from '" << IS->getSectionName() << "' in file '" << IS->getFile()->getName() << "'\n"; Index: test/ELF/section-symbols.test =================================================================== --- test/ELF/section-symbols.test +++ test/ELF/section-symbols.test @@ -0,0 +1,35 @@ +# RUN: yaml2obj %s -o %t +# RUN: ld.lld -shared %t -o %tout + +# Verify that lld can handle STT_SECTION symbols associated +# with SHT_REL[A]/SHT_SYMTAB/SHT_STRTAB sections. + +!ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + OSABI: ELFOSABI_FREEBSD + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + AddressAlign: 0x0000000000000010 + Content: "00000000" + - Name: .rela.text + Type: SHT_RELA + Link: .symtab + AddressAlign: 0x0000000000000008 + Info: .text + Relocations: +Symbols: + Local: + - Type: STT_SECTION + Section: .rela.text + - Type: STT_SECTION + Section: .shstrtab + - Type: STT_SECTION + Section: .symtab + - Type: STT_SECTION + Section: .strtab