[llvm-readobj] - Change the error to warning when a section name is unknown.

We reported the error in this case.
But it was asked (https://reviews.llvm.org/D73193#inline-665595) to convert it
to a warning. This patch does it.

Differential revision: https://reviews.llvm.org/D74047
This commit is contained in:
Georgii Rymar 2020-02-05 16:53:27 +03:00
parent a50c0b0df7
commit 0378afc4b9
4 changed files with 76 additions and 9 deletions

View File

@ -353,9 +353,9 @@ Symbols: []
## overflows the section name string table.
# RUN: yaml2obj %s --docnum=17 -o %t17
# RUN: not llvm-readobj --sections %t17 2>&1 | FileCheck -DFILE=%t17 --check-prefix=BROKEN-SECNAME %s
# RUN: llvm-readobj --sections %t17 2>&1 | FileCheck -DFILE=%t17 --check-prefix=BROKEN-SECNAME %s
## BROKEN-SECNAME: error: '[[FILE]]': a section [index 1] has an invalid sh_name (0x1) offset which goes past the end of the section name string table
## BROKEN-SECNAME: warning: '[[FILE]]': a section [index 2] has an invalid sh_name (0xb) offset which goes past the end of the section name string table
--- !ELF
FileHeader:

View File

@ -1,6 +1,6 @@
# RUN: yaml2obj %s -o %t
# RUN: not llvm-readelf --headers -S 2>&1 %t | FileCheck %s -DFILE=%t --check-prefix=GNU
# RUN: not llvm-readobj --headers -S 2>&1 %t | FileCheck %s -DFILE=%t --check-prefix=LLVM
# RUN: llvm-readobj --headers -S 2>&1 %t | FileCheck %s -DFILE=%t --check-prefix=LLVM
# GNU: ELF Header:
# GNU: Section header string table index: 255
@ -13,7 +13,25 @@
# LLVM: StringTableSectionIndex: 255
# LLVM-NEXT: }
# LLVM-NEXT: Sections [
# LLVM-NEXT: error: '[[FILE]]': section header string table index 255 does not exist
# LLVM-NEXT: warning: '[[FILE]]': section header string table index 255 does not exist
# 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: Index: 1
# LLVM-NEXT: Name: <?> (11)
# LLVM: Index: 2
# LLVM-NEXT: Name: <?> (1)
--- !ELF
FileHeader:

View File

@ -3,7 +3,7 @@
# RUN: yaml2obj %s -o %t
# RUN: llvm-readelf --sections %t \
# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=GNU
# RUN: not llvm-readobj --sections %t 2>&1 \
# RUN: llvm-readobj --sections %t 2>&1 \
# RUN: | FileCheck %s -DFILE=%t --check-prefix=LLVM
# GNU:Section Headers:
@ -43,7 +43,52 @@
# 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
# LLVM-NEXT: warning: '[[FILE]]': a section [index 2] has an invalid sh_name (0x1) offset which goes past the end of the section name string table
# LLVM-NEXT: Section {
# LLVM-NEXT: Index: 2
# LLVM-NEXT: Name: <?> (1)
# 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: warning: '[[FILE]]': a section [index 3] has an invalid sh_name (0x15) offset which goes past the end of the section name string table
# LLVM-NEXT: Section {
# LLVM-NEXT: Index: 3
# LLVM-NEXT: Name: <?> (21)
# LLVM-NEXT: Type: SHT_STRTAB (0x3)
# LLVM-NEXT: Flags [ (0x0)
# LLVM-NEXT: ]
# LLVM-NEXT: Address: 0x0
# LLVM-NEXT: Offset: 0x40
# LLVM-NEXT: Size: 1
# LLVM-NEXT: Link: 0
# LLVM-NEXT: Info: 0
# LLVM-NEXT: AddressAlignment: 1
# LLVM-NEXT: EntrySize: 0
# LLVM-NEXT: }
# LLVM-NEXT: warning: '[[FILE]]': a section [index 4] has an invalid sh_name (0xb) offset which goes past the end of the section name string table
# LLVM-NEXT: Section {
# LLVM-NEXT: Index: 4
# LLVM-NEXT: Name: <?> (11)
# LLVM-NEXT: Type: SHT_STRTAB (0x3)
# LLVM-NEXT: Flags [ (0x0)
# LLVM-NEXT: ]
# LLVM-NEXT: Address: 0x0
# LLVM-NEXT: Offset: 0x41
# LLVM-NEXT: Size: 29
# LLVM-NEXT: Link: 0
# LLVM-NEXT: Info: 0
# LLVM-NEXT: AddressAlignment: 1
# LLVM-NEXT: EntrySize: 0
# LLVM-NEXT: }
# LLVM-NEXT: ]
--- !ELF
FileHeader:

View File

@ -5748,12 +5748,16 @@ void LLVMStyle<ELFT>::printSectionHeaders(const ELFO *Obj) {
int SectionIndex = -1;
ArrayRef<Elf_Shdr> Sections = unwrapOrError(this->FileName, Obj->sections());
const ELFObjectFile<ELFT> *ElfObj = this->dumper()->getElfObject();
std::vector<EnumEntry<unsigned>> FlagsList =
getSectionFlagsForTarget(Obj->getHeader()->e_machine);
for (const Elf_Shdr &Sec : Sections) {
StringRef Name = unwrapOrError(
ElfObj->getFileName(), Obj->getSectionName(&Sec, this->WarningHandler));
StringRef Name = "<?>";
if (Expected<StringRef> SecNameOrErr =
Obj->getSectionName(&Sec, this->WarningHandler))
Name = *SecNameOrErr;
else
this->reportUniqueWarning(SecNameOrErr.takeError());
DictScope SectionD(W, "Section");
W.printNumber("Index", ++SectionIndex);
W.printNumber("Name", Name, Sec.sh_name);