From f67de6c9406fd8c4f2cb39eda9c686c59317abd3 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Mon, 8 Apr 2019 16:24:08 +0000 Subject: [PATCH] [llvm-objdump] Migrate relocation handling functions from error_code to Error llvm-svn: 357920 --- llvm/tools/llvm-objdump/COFFDump.cpp | 11 ++++----- llvm/tools/llvm-objdump/ELFDump.cpp | 25 ++++++++++---------- llvm/tools/llvm-objdump/MachODump.cpp | 11 ++++----- llvm/tools/llvm-objdump/WasmDump.cpp | 11 ++++----- llvm/tools/llvm-objdump/llvm-objdump.cpp | 12 +++++++--- llvm/tools/llvm-objdump/llvm-objdump.h | 29 +++++++++++------------- 6 files changed, 49 insertions(+), 50 deletions(-) diff --git a/llvm/tools/llvm-objdump/COFFDump.cpp b/llvm/tools/llvm-objdump/COFFDump.cpp index 2d129043c260..251c555b4005 100644 --- a/llvm/tools/llvm-objdump/COFFDump.cpp +++ b/llvm/tools/llvm-objdump/COFFDump.cpp @@ -468,17 +468,16 @@ static bool getPDataSection(const COFFObjectFile *Obj, return false; } -std::error_code -llvm::getCOFFRelocationValueString(const COFFObjectFile *Obj, - const RelocationRef &Rel, - SmallVectorImpl &Result) { +Error llvm::getCOFFRelocationValueString(const COFFObjectFile *Obj, + const RelocationRef &Rel, + SmallVectorImpl &Result) { symbol_iterator SymI = Rel.getSymbol(); Expected SymNameOrErr = SymI->getName(); if (!SymNameOrErr) - return errorToErrorCode(SymNameOrErr.takeError()); + return SymNameOrErr.takeError(); StringRef SymName = *SymNameOrErr; Result.append(SymName.begin(), SymName.end()); - return std::error_code(); + return Error::success(); } static void printWin64EHUnwindInfo(const Win64EH::UnwindInfo *UI) { diff --git a/llvm/tools/llvm-objdump/ELFDump.cpp b/llvm/tools/llvm-objdump/ELFDump.cpp index 4144b0c12d90..286828de11c3 100644 --- a/llvm/tools/llvm-objdump/ELFDump.cpp +++ b/llvm/tools/llvm-objdump/ELFDump.cpp @@ -50,14 +50,14 @@ Expected getDynamicStrTab(const ELFFile *Elf) { } template -static std::error_code getRelocationValueString(const ELFObjectFile *Obj, - const RelocationRef &RelRef, - SmallVectorImpl &Result) { +static Error getRelocationValueString(const ELFObjectFile *Obj, + const RelocationRef &RelRef, + SmallVectorImpl &Result) { const ELFFile &EF = *Obj->getELFFile(); DataRefImpl Rel = RelRef.getRawDataRefImpl(); auto SecOrErr = EF.getSection(Rel.d.a); if (!SecOrErr) - return errorToErrorCode(SecOrErr.takeError()); + return SecOrErr.takeError(); int64_t Addend = 0; // If there is no Symbol associated with the relocation, we set the undef @@ -72,7 +72,7 @@ static std::error_code getRelocationValueString(const ELFObjectFile *Obj, Addend = ERela->r_addend; Undef = ERela->getSymbol(false) == 0; } else if ((*SecOrErr)->sh_type != ELF::SHT_REL) { - return object_error::parse_failed; + return make_error(); } // Default scheme is to print Target, as well as "+ " for nonzero @@ -86,17 +86,17 @@ static std::error_code getRelocationValueString(const ELFObjectFile *Obj, if (Sym->getType() == ELF::STT_SECTION) { Expected SymSI = SI->getSection(); if (!SymSI) - return errorToErrorCode(SymSI.takeError()); + return SymSI.takeError(); const typename ELFT::Shdr *SymSec = Obj->getSection((*SymSI)->getRawDataRefImpl()); auto SecName = EF.getSectionName(SymSec); if (!SecName) - return errorToErrorCode(SecName.takeError()); + return SecName.takeError(); Fmt << *SecName; } else { Expected SymName = SI->getName(); if (!SymName) - return errorToErrorCode(SymName.takeError()); + return SymName.takeError(); if (Demangle) Fmt << demangle(*SymName); else @@ -110,13 +110,12 @@ static std::error_code getRelocationValueString(const ELFObjectFile *Obj, Fmt << (Addend < 0 ? "" : "+") << Addend; Fmt.flush(); Result.append(FmtBuf.begin(), FmtBuf.end()); - return std::error_code(); + return Error::success(); } -std::error_code -llvm::getELFRelocationValueString(const ELFObjectFileBase *Obj, - const RelocationRef &Rel, - SmallVectorImpl &Result) { +Error llvm::getELFRelocationValueString(const ELFObjectFileBase *Obj, + const RelocationRef &Rel, + SmallVectorImpl &Result) { if (auto *ELF32LE = dyn_cast(Obj)) return getRelocationValueString(ELF32LE, Rel, Result); if (auto *ELF64LE = dyn_cast(Obj)) diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index 974f55a72089..54c954340f81 100644 --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/tools/llvm-objdump/MachODump.cpp @@ -412,10 +412,9 @@ static void printRelocationTargetName(const MachOObjectFile *O, Fmt << S; } -std::error_code -llvm::getMachORelocationValueString(const MachOObjectFile *Obj, - const RelocationRef &RelRef, - SmallVectorImpl &Result) { +Error llvm::getMachORelocationValueString(const MachOObjectFile *Obj, + const RelocationRef &RelRef, + SmallVectorImpl &Result) { DataRefImpl Rel = RelRef.getRawDataRefImpl(); MachO::any_relocation_info RE = Obj->getRelocation(Rel); @@ -488,7 +487,7 @@ llvm::getMachORelocationValueString(const MachOObjectFile *Obj, // Generic relocation types... switch (Type) { case MachO::GENERIC_RELOC_PAIR: // prints no info - return std::error_code(); + return Error::success(); case MachO::GENERIC_RELOC_SECTDIFF: { DataRefImpl RelNext = Rel; Obj->moveRelocationNext(RelNext); @@ -588,7 +587,7 @@ llvm::getMachORelocationValueString(const MachOObjectFile *Obj, Fmt.flush(); Result.append(FmtBuf.begin(), FmtBuf.end()); - return std::error_code(); + return Error::success(); } static void PrintIndirectSymbolTable(MachOObjectFile *O, bool verbose, diff --git a/llvm/tools/llvm-objdump/WasmDump.cpp b/llvm/tools/llvm-objdump/WasmDump.cpp index 45eb8fceb4b3..bc76f2442c19 100644 --- a/llvm/tools/llvm-objdump/WasmDump.cpp +++ b/llvm/tools/llvm-objdump/WasmDump.cpp @@ -26,10 +26,9 @@ void llvm::printWasmFileHeader(const object::ObjectFile *Obj) { outs() << "\n"; } -std::error_code -llvm::getWasmRelocationValueString(const WasmObjectFile *Obj, - const RelocationRef &RelRef, - SmallVectorImpl &Result) { +Error llvm::getWasmRelocationValueString(const WasmObjectFile *Obj, + const RelocationRef &RelRef, + SmallVectorImpl &Result) { const wasm::WasmRelocation &Rel = Obj->getWasmRelocation(RelRef); symbol_iterator SI = RelRef.getSymbol(); std::string FmtBuf; @@ -41,12 +40,12 @@ llvm::getWasmRelocationValueString(const WasmObjectFile *Obj, } else { Expected SymNameOrErr = SI->getName(); if (!SymNameOrErr) - return errorToErrorCode(SymNameOrErr.takeError()); + return SymNameOrErr.takeError(); StringRef SymName = *SymNameOrErr; Result.append(SymName.begin(), SymName.end()); } Fmt << (Rel.Addend < 0 ? "" : "+") << Rel.Addend; Fmt.flush(); Result.append(FmtBuf.begin(), FmtBuf.end()); - return std::error_code(); + return Error::success(); } diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 2d8585c184e8..aa9b13d1ec1a 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -330,6 +330,13 @@ void llvm::error(std::error_code EC) { exit(1); } +void llvm::error(Error E) { + if (!E) + return; + WithColor::error(errs(), ToolName) << toString(std::move(E)); + exit(1); +} + LLVM_ATTRIBUTE_NORETURN void llvm::error(Twine Message) { WithColor::error(errs(), ToolName) << Message << ".\n"; errs().flush(); @@ -437,8 +444,8 @@ bool llvm::isRelocAddressLess(RelocationRef A, RelocationRef B) { return A.getOffset() < B.getOffset(); } -static std::error_code getRelocationValueString(const RelocationRef &Rel, - SmallVectorImpl &Result) { +static Error getRelocationValueString(const RelocationRef &Rel, + SmallVectorImpl &Result) { const ObjectFile *Obj = Rel.getObject(); if (auto *ELF = dyn_cast(Obj)) return getELFRelocationValueString(ELF, Rel, Result); @@ -1554,7 +1561,6 @@ void llvm::printSectionHeaders(const ObjectFile *Obj) { } void llvm::printSectionContents(const ObjectFile *Obj) { - std::error_code EC; for (const SectionRef &Section : ToolSectionFilter(*Obj)) { StringRef Name; StringRef Contents; diff --git a/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h index fc836e634da8..c6e063f8aabb 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.h +++ b/llvm/tools/llvm-objdump/llvm-objdump.h @@ -121,26 +121,23 @@ private: // Various helper functions. SectionFilter ToolSectionFilter(llvm::object::ObjectFile const &O); -std::error_code -getELFRelocationValueString(const object::ELFObjectFileBase *Obj, - const object::RelocationRef &Rel, - llvm::SmallVectorImpl &Result); -std::error_code -getCOFFRelocationValueString(const object::COFFObjectFile *Obj, - const object::RelocationRef &Rel, - llvm::SmallVectorImpl &Result); -std::error_code -getWasmRelocationValueString(const object::WasmObjectFile *Obj, - const object::RelocationRef &RelRef, - llvm::SmallVectorImpl &Result); -std::error_code -getMachORelocationValueString(const object::MachOObjectFile *Obj, - const object::RelocationRef &RelRef, - llvm::SmallVectorImpl &Result); +Error getELFRelocationValueString(const object::ELFObjectFileBase *Obj, + const object::RelocationRef &Rel, + llvm::SmallVectorImpl &Result); +Error getCOFFRelocationValueString(const object::COFFObjectFile *Obj, + const object::RelocationRef &Rel, + llvm::SmallVectorImpl &Result); +Error getWasmRelocationValueString(const object::WasmObjectFile *Obj, + const object::RelocationRef &RelRef, + llvm::SmallVectorImpl &Result); +Error getMachORelocationValueString(const object::MachOObjectFile *Obj, + const object::RelocationRef &RelRef, + llvm::SmallVectorImpl &Result); uint64_t getELFSectionLMA(const object::ELFSectionRef& Sec); void error(std::error_code ec); +void error(Error E); bool isRelocAddressLess(object::RelocationRef A, object::RelocationRef B); void parseInputMachO(StringRef Filename); void parseInputMachO(object::MachOUniversalBinary *UB);