diff --git a/llvm/test/Object/Inputs/no-section-header-string-table.elf-x86-64 b/llvm/test/Object/Inputs/no-section-header-string-table.elf-x86-64 deleted file mode 100644 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@&1 \ +# RUN: | FileCheck %s -DFILE=%t --check-prefix=LLVM + +# GNU:Section Headers: +# GNU-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al +# GNU-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 +# GNU-NEXT: [ 1] PROGBITS 0000000000000000 000040 000000 00 0 0 0 +# GNU-NEXT: [ 2] PROGBITS 0000000000000000 000040 000000 00 0 0 0 +# GNU-NEXT: [ 3] STRTAB 0000000000000000 000040 000001 00 0 0 1 +# GNU-NEXT: [ 4] STRTAB 0000000000000000 000041 00001d 00 0 0 1 + +# LLVM: Sections [ +# LLVM-NEXT: Section { +# LLVM-NEXT: Index: 0 +# LLVM-NEXT: Name: (0) +# LLVM-NEXT: Type: SHT_NULL (0x0) +# LLVM-NEXT: Flags [ (0x0) +# LLVM-NEXT: ] +# LLVM-NEXT: Address: 0x0 +# LLVM-NEXT: Offset: 0x0 +# LLVM-NEXT: Size: 0 +# LLVM-NEXT: Link: 0 +# LLVM-NEXT: Info: 0 +# LLVM-NEXT: AddressAlignment: 0 +# LLVM-NEXT: EntrySize: 0 +# LLVM-NEXT: } +# LLVM-NEXT: Section { +# LLVM-NEXT: Index: 1 +# LLVM-NEXT: Name: (0) +# LLVM-NEXT: Type: SHT_PROGBITS (0x1) +# LLVM-NEXT: Flags [ (0x0) +# LLVM-NEXT: ] +# LLVM-NEXT: Address: 0x0 +# LLVM-NEXT: Offset: 0x40 +# LLVM-NEXT: Size: 0 +# LLVM-NEXT: Link: 0 +# LLVM-NEXT: Info: 0 +# LLVM-NEXT: AddressAlignment: 0 +# LLVM-NEXT: EntrySize: 0 +# LLVM-NEXT: } +# LLVM-NEXT: error: '[[FILE]]': a section [index 2] has an invalid sh_name (0x1) offset which goes past the end of the section name string table + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 + SHStrNdx: 0 +Sections: + - Name: .foo + Type: SHT_PROGBITS + ShName: 0 + - Name: .bar + Type: SHT_PROGBITS + ShName: 1 diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -3515,11 +3515,17 @@ OS << "\n"; const ELFObjectFile *ElfObj = this->dumper()->getElfObject(); + StringRef SecStrTable = unwrapOrError( + ElfObj->getFileName(), + Obj->getSectionStringTable(Sections, this->WarningHandler)); size_t SectionIndex = 0; for (const Elf_Shdr &Sec : Sections) { Fields[0].Str = to_string(SectionIndex); - Fields[1].Str = unwrapOrError( - ElfObj->getFileName(), Obj->getSectionName(&Sec, this->WarningHandler)); + if (SecStrTable.empty()) + Fields[1].Str = ""; + else + Fields[1].Str = unwrapOrError( + ElfObj->getFileName(), Obj->getSectionName(&Sec, SecStrTable)); Fields[2].Str = getSectionTypeString(Obj->getHeader()->e_machine, Sec.sh_type); Fields[3].Str =