[llvm] r285910 - replace a report_fatal_error with a ErrorOr.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 3 06:58:15 PDT 2016
Author: rafael
Date: Thu Nov 3 08:58:15 2016
New Revision: 285910
URL: http://llvm.org/viewvc/llvm-project?rev=285910&view=rev
Log:
replace a report_fatal_error with a ErrorOr.
Modified:
llvm/trunk/include/llvm/Object/ELF.h
llvm/trunk/test/Object/invalid.test
llvm/trunk/tools/llvm-readobj/ELFDumper.cpp
Modified: llvm/trunk/include/llvm/Object/ELF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELF.h?rev=285910&r1=285909&r2=285910&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ELF.h (original)
+++ llvm/trunk/include/llvm/Object/ELF.h Thu Nov 3 08:58:15 2016
@@ -147,12 +147,12 @@ public:
}
ErrorOr<StringRef> getSectionStringTable(Elf_Shdr_Range Sections) const;
- uint32_t getExtendedSymbolTableIndex(const Elf_Sym *Sym,
- const Elf_Shdr *SymTab,
- ArrayRef<Elf_Word> ShndxTable) const;
- uint32_t getExtendedSymbolTableIndex(const Elf_Sym *Sym,
- const Elf_Sym *FirstSym,
- ArrayRef<Elf_Word> ShndxTable) const;
+ ErrorOr<uint32_t>
+ getExtendedSymbolTableIndex(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
+ ArrayRef<Elf_Word> ShndxTable) const;
+ ErrorOr<uint32_t>
+ getExtendedSymbolTableIndex(const Elf_Sym *Sym, const Elf_Sym *FirstSym,
+ ArrayRef<Elf_Word> ShndxTable) const;
const Elf_Ehdr *getHeader() const { return Header; }
ErrorOr<const Elf_Shdr *> getSection(const Elf_Sym *Sym,
const Elf_Shdr *SymTab,
@@ -192,23 +192,23 @@ getSection(typename ELFT::ShdrRange Sect
}
template <class ELFT>
-uint32_t ELFFile<ELFT>::getExtendedSymbolTableIndex(
+ErrorOr<uint32_t> ELFFile<ELFT>::getExtendedSymbolTableIndex(
const Elf_Sym *Sym, const Elf_Shdr *SymTab,
ArrayRef<Elf_Word> ShndxTable) const {
auto SymsOrErr = symbols(SymTab);
if (std::error_code EC = SymsOrErr.getError())
- report_fatal_error(EC.message());
+ return EC;
return getExtendedSymbolTableIndex(Sym, SymsOrErr->begin(), ShndxTable);
}
template <class ELFT>
-uint32_t ELFFile<ELFT>::getExtendedSymbolTableIndex(
+ErrorOr<uint32_t> ELFFile<ELFT>::getExtendedSymbolTableIndex(
const Elf_Sym *Sym, const Elf_Sym *FirstSym,
ArrayRef<Elf_Word> ShndxTable) const {
assert(Sym->st_shndx == ELF::SHN_XINDEX);
unsigned Index = Sym - FirstSym;
if (Index >= ShndxTable.size())
- report_fatal_error("Invalid symbol table index");
+ return object_error::parse_failed;
// The size of the table was checked in getSHNDXTable.
return ShndxTable[Index];
}
@@ -222,8 +222,12 @@ ELFFile<ELFT>::getSection(const Elf_Sym
(Index >= ELF::SHN_LORESERVE && Index != ELF::SHN_XINDEX))
return nullptr;
- if (Index == ELF::SHN_XINDEX)
- Index = getExtendedSymbolTableIndex(Sym, SymTab, ShndxTable);
+ if (Index == ELF::SHN_XINDEX) {
+ auto ErrorOrIndex = getExtendedSymbolTableIndex(Sym, SymTab, ShndxTable);
+ if (std::error_code EC = ErrorOrIndex.getError())
+ return EC;
+ Index = *ErrorOrIndex;
+ }
auto SectionsOrErr = sections();
if (std::error_code EC = SectionsOrErr.getError())
Modified: llvm/trunk/test/Object/invalid.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/invalid.test?rev=285910&r1=285909&r2=285910&view=diff
==============================================================================
--- llvm/trunk/test/Object/invalid.test (original)
+++ llvm/trunk/test/Object/invalid.test Thu Nov 3 08:58:15 2016
@@ -60,7 +60,7 @@ INVALID-SH-NUM: Invalid data was encount
RUN: not llvm-readobj -t %p/Inputs/invalid-ext-symtab-index.elf-x86-64 2>&1 | \
RUN: FileCheck --check-prefix=INVALID-EXT-SYMTAB-INDEX %s
-INVALID-EXT-SYMTAB-INDEX: Invalid symbol table index
+INVALID-EXT-SYMTAB-INDEX: Invalid data was encountered while parsing the file.
RUN: not llvm-readobj -r %p/Inputs/invalid-relocation-sec-sh_offset.elf-i386 2>&1 | \
RUN: FileCheck --check-prefix=INVALID-RELOC-SH-OFFSET %s
Modified: llvm/trunk/tools/llvm-readobj/ELFDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ELFDumper.cpp?rev=285910&r1=285909&r2=285910&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/ELFDumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/ELFDumper.cpp Thu Nov 3 08:58:15 2016
@@ -717,8 +717,8 @@ getSectionNameIndex(const ELFO &Obj, con
SectionName = "Reserved";
else {
if (SectionIndex == SHN_XINDEX)
- SectionIndex =
- Obj.getExtendedSymbolTableIndex(Symbol, FirstSym, ShndxTable);
+ SectionIndex = unwrapOrError(
+ Obj.getExtendedSymbolTableIndex(Symbol, FirstSym, ShndxTable));
const typename ELFO::Elf_Shdr *Sec =
unwrapOrError(Obj.getSection(SectionIndex));
SectionName = unwrapOrError(Obj.getSectionName(Sec));
@@ -2737,8 +2737,8 @@ std::string GNUStyle<ELFT>::getSymbolSec
case ELF::SHN_COMMON:
return "COM";
case ELF::SHN_XINDEX:
- SectionIndex = Obj->getExtendedSymbolTableIndex(
- Symbol, FirstSym, this->dumper()->getShndxTable());
+ SectionIndex = unwrapOrError(Obj->getExtendedSymbolTableIndex(
+ Symbol, FirstSym, this->dumper()->getShndxTable()));
default:
// Find if:
// Processor specific
More information about the llvm-commits
mailing list