Index: ELF/SyntheticSections.cpp =================================================================== --- ELF/SyntheticSections.cpp +++ ELF/SyntheticSections.cpp @@ -2367,6 +2367,8 @@ ArrayRef Sections = Sec->File->getSections(); for (DWARFAddressRange &R : *Ranges) { + if (R.SectionIndex == -1ULL) + continue; InputSectionBase *S = Sections[R.SectionIndex]; if (!S || S == &InputSection::Discarded || !S->Live) continue; Index: test/ELF/gdb-index-invalid-section-index.yaml =================================================================== --- /dev/null +++ test/ELF/gdb-index-invalid-section-index.yaml @@ -0,0 +1,139 @@ +# RUN: yaml2obj %s -o %t.o +# RUN: ld.lld --gdb-index %t.o -o /dev/null + +## We used to crash if a DWARFAddressRange has invalid SectionIndex (-1). + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .text + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + AddressAlign: 0x0000000000000010 + Content: 31C0C3 + - Name: .debug_str_offsets + Type: SHT_PROGBITS + AddressAlign: 0x0000000000000001 + Content: '1000000005000000000000000000000000000000' + - Name: .rela.debug_str_offsets + Type: SHT_RELA + Link: .symtab + AddressAlign: 0x0000000000000008 + EntSize: 0x0000000000000018 + Info: .debug_str_offsets + Relocations: + - Offset: 0x0000000000000008 + Symbol: .debug_str + Type: R_X86_64_32 + - Offset: 0x000000000000000C + Symbol: .debug_str + Type: R_X86_64_32 + Addend: 1 + - Offset: 0x0000000000000010 + Symbol: .debug_str + Type: R_X86_64_32 + Addend: 6 + - Name: .debug_str + Type: SHT_PROGBITS + Flags: [ SHF_MERGE, SHF_STRINGS ] + AddressAlign: 0x0000000000000001 + EntSize: 0x0000000000000001 + Content: 00612E6363002F746D7000 + - Name: .debug_abbrev + Type: SHT_PROGBITS + AddressAlign: 0x0000000000000001 + Content: 011100252513050325721710171B25111B1206000000 + - Name: .debug_info + Type: SHT_PROGBITS + AddressAlign: 0x0000000000000001 + Content: 1B000000050001080000000001000400010000000000000000020003000000 + - Name: .rela.debug_info + Type: SHT_RELA + Link: .symtab + AddressAlign: 0x0000000000000008 + EntSize: 0x0000000000000018 + Info: .debug_info + Relocations: + - Offset: 0x0000000000000008 + Symbol: .debug_abbrev + Type: R_X86_64_32 + - Offset: 0x0000000000000011 + Symbol: .debug_str_offsets + Type: R_X86_64_32 + Addend: 8 + - Offset: 0x0000000000000015 + Symbol: .debug_line + Type: R_X86_64_32 + - Name: .debug_addr + Type: SHT_PROGBITS + AddressAlign: 0x0000000000000001 + Content: 0C000000050008000000000000000000 + - Name: .rela.debug_addr + Type: SHT_RELA + Link: .symtab + AddressAlign: 0x0000000000000008 + EntSize: 0x0000000000000018 + Info: .debug_addr + Relocations: + - Offset: 0x0000000000000008 + Symbol: .text + Type: R_X86_64_64 + - Name: .debug_line + Type: SHT_PROGBITS + AddressAlign: 0x0000000000000001 + Content: 2D0000000500080025000000010101FB0E0D00010101010000000100000101011F010000000002011F020F010000000000 + - Name: .rela.debug_line + Type: SHT_RELA + Link: .symtab + AddressAlign: 0x0000000000000008 + EntSize: 0x0000000000000018 + Info: .debug_line + Relocations: + - Offset: 0x0000000000000022 + Symbol: .debug_line_str + Type: R_X86_64_32 + - Offset: 0x000000000000002C + Symbol: .debug_line_str + Type: R_X86_64_32 + Addend: 5 + - Name: .debug_line_str + Type: SHT_PROGBITS + Flags: [ SHF_MERGE, SHF_STRINGS ] + AddressAlign: 0x0000000000000001 + EntSize: 0x0000000000000001 + Content: 2F746D7000612E636300 +Symbols: + - Name: a.ll + Type: STT_FILE + Index: SHN_ABS + - Name: .text + Type: STT_SECTION + Section: .text + - Name: .debug_str_offsets + Type: STT_SECTION + Section: .debug_str_offsets + - Name: .debug_str + Type: STT_SECTION + Section: .debug_str + - Name: .debug_abbrev + Type: STT_SECTION + Section: .debug_abbrev + - Name: .debug_info + Type: STT_SECTION + Section: .debug_info + - Name: .debug_line + Type: STT_SECTION + Section: .debug_line + - Name: .debug_line_str + Type: STT_SECTION + Section: .debug_line_str + - Name: foo + Type: STT_FUNC + Section: .text + Binding: STB_GLOBAL + Size: 0x0000000000000003 +...