From 6cf09265f9087b5d285d3eec6ee31b49bcce0c9f Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Wed, 16 Nov 2016 05:10:28 +0000 Subject: [ELF] Convert ELF.h to Expected. This has two advantages: 1) We slowly move away from ErrorOr to the new handling interface, in the hope of having an uniform error handling in LLVM, eventually. 2) We're starting to have *meaningful* error messages for invalid object ELF files, rather than a generic "parse error". At some point we should include also the offset to improve the quality of the diagnostic. llvm-svn: 287081 --- llvm/tools/llvm-objdump/ELFDump.cpp | 5 +++-- llvm/tools/llvm-objdump/llvm-objdump.cpp | 30 +++++++++++++++--------------- 2 files changed, 18 insertions(+), 17 deletions(-) (limited to 'llvm/tools/llvm-objdump') diff --git a/llvm/tools/llvm-objdump/ELFDump.cpp b/llvm/tools/llvm-objdump/ELFDump.cpp index e9e0bcf30e8..2d2a5b581d1 100644 --- a/llvm/tools/llvm-objdump/ELFDump.cpp +++ b/llvm/tools/llvm-objdump/ELFDump.cpp @@ -25,8 +25,9 @@ template void printProgramHeaders(const ELFFile *o) { typedef ELFFile ELFO; outs() << "Program Header:\n"; auto ProgramHeaderOrError = o->program_headers(); - if (std::error_code EC = ProgramHeaderOrError.getError()) - report_fatal_error(EC.message()); + if (!ProgramHeaderOrError) + report_fatal_error( + errorToErrorCode(ProgramHeaderOrError.takeError()).message()); for (const typename ELFO::Elf_Phdr &Phdr : *ProgramHeaderOrError) { switch (Phdr.p_type) { case ELF::PT_LOAD: diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 920ad4a7dd6..be44c7450d6 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -608,22 +608,22 @@ static std::error_code getRelocationValueString(const ELFObjectFile *Obj, const ELFFile &EF = *Obj->getELFFile(); - ErrorOr SecOrErr = EF.getSection(Rel.d.a); - if (std::error_code EC = SecOrErr.getError()) - return EC; + auto SecOrErr = EF.getSection(Rel.d.a); + if (!SecOrErr) + return errorToErrorCode(SecOrErr.takeError()); const Elf_Shdr *Sec = *SecOrErr; - ErrorOr SymTabOrErr = EF.getSection(Sec->sh_link); - if (std::error_code EC = SymTabOrErr.getError()) - return EC; + auto SymTabOrErr = EF.getSection(Sec->sh_link); + if (!SymTabOrErr) + return errorToErrorCode(SymTabOrErr.takeError()); const Elf_Shdr *SymTab = *SymTabOrErr; assert(SymTab->sh_type == ELF::SHT_SYMTAB || SymTab->sh_type == ELF::SHT_DYNSYM); - ErrorOr StrTabSec = EF.getSection(SymTab->sh_link); - if (std::error_code EC = StrTabSec.getError()) - return EC; - ErrorOr StrTabOrErr = EF.getStringTable(*StrTabSec); - if (std::error_code EC = StrTabOrErr.getError()) - return EC; + auto StrTabSec = EF.getSection(SymTab->sh_link); + if (!StrTabSec) + return errorToErrorCode(StrTabSec.takeError()); + auto StrTabOrErr = EF.getStringTable(*StrTabSec); + if (!StrTabOrErr) + return errorToErrorCode(StrTabOrErr.takeError()); StringRef StrTab = *StrTabOrErr; uint8_t type = RelRef.getType(); StringRef res; @@ -649,9 +649,9 @@ static std::error_code getRelocationValueString(const ELFObjectFile *Obj, if (!SymSI) return errorToErrorCode(SymSI.takeError()); const Elf_Shdr *SymSec = Obj->getSection((*SymSI)->getRawDataRefImpl()); - ErrorOr SecName = EF.getSectionName(SymSec); - if (std::error_code EC = SecName.getError()) - return EC; + auto SecName = EF.getSectionName(SymSec); + if (!SecName) + return errorToErrorCode(SecName.takeError()); Target = *SecName; } else { Expected SymName = symb->getName(StrTab); -- cgit v1.2.3