Don't crash on invalid.

llvm-svn: 319404
This commit is contained in:
Rafael Espindola 2017-11-30 06:18:31 +00:00
parent bdcfb178b5
commit 568ee2c089
2 changed files with 33 additions and 1 deletions

View File

@ -400,7 +400,12 @@ void InputSection::copyRelocations(uint8_t *Buf, ArrayRef<RelTy> Rels) {
// avoid having to parse and recreate .eh_frame, we just replace any // avoid having to parse and recreate .eh_frame, we just replace any
// relocation in it pointing to discarded sections with R_*_NONE, which // relocation in it pointing to discarded sections with R_*_NONE, which
// hopefully creates a frame that is ignored at runtime. // hopefully creates a frame that is ignored at runtime.
SectionBase *Section = cast<Defined>(Sym).Section; auto *D = dyn_cast<Defined>(&Sym);
if (!D) {
error("STT_SECTION symbol should be defined");
continue;
}
SectionBase *Section = D->Section;
if (Section == &InputSection::Discarded) { if (Section == &InputSection::Discarded) {
P->setSymbolAndType(0, 0, false); P->setSymbolAndType(0, 0, false);
continue; continue;

View File

@ -0,0 +1,27 @@
# RUN: yaml2obj %s -o %t.o
# RUN: not ld.lld -r %t.o -o %2.o 2>&1 | FileCheck %s
# We used to crash at this.
# CHECK: STT_SECTION symbol should be defined
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .text
Type: SHT_PROGBITS
- Name: .rela.text
Type: SHT_RELA
AddressAlign: 0x0000000000000008
Info: .text
Relocations:
- Offset: 0x0000000000000000
Symbol: .text
Type: R_X86_64_NONE
Symbols:
Local:
- Name: .text
Type: STT_SECTION