Index: llvm/test/tools/llvm-readobj/archive.test =================================================================== --- llvm/test/tools/llvm-readobj/archive.test +++ llvm/test/tools/llvm-readobj/archive.test @@ -96,5 +96,5 @@ # RUN: llvm-readelf --all %t2.a 2>&1 | FileCheck %s -DARFILE="%t2.a" --check-prefix=BROKEN # BROKEN: File: [[ARFILE]](trivial.obj.elf-x86-64) -# BROKEN: warning: '[[ARFILE]]': Unrecognized file type. +# BROKEN: warning: '[[ARFILE]]': unrecognized file type of broken.a # BROKEN: File: [[ARFILE]](trivial.obj.elf-x86-64) Index: llvm/tools/llvm-readobj/ARMEHABIPrinter.h =================================================================== --- llvm/tools/llvm-readobj/ARMEHABIPrinter.h +++ llvm/tools/llvm-readobj/ARMEHABIPrinter.h @@ -9,7 +9,6 @@ #ifndef LLVM_TOOLS_LLVM_READOBJ_ARMEHABIPRINTER_H #define LLVM_TOOLS_LLVM_READOBJ_ARMEHABIPRINTER_H -#include "Error.h" #include "llvm-readobj.h" #include "llvm/ADT/STLExtras.h" #include "llvm/Object/ELF.h" @@ -367,7 +366,7 @@ PrinterContext::FunctionAtAddress(unsigned Section, uint64_t Address) const { if (!Symtab) - return readobj_error::unknown_symbol; + return inconvertibleErrorCode(); auto StrTableOrErr = ELF->getStringTableForSymtab(*Symtab); if (!StrTableOrErr) reportError(StrTableOrErr.takeError(), FileName); @@ -380,11 +379,11 @@ if (!NameOrErr) { // TODO: Actually report errors helpfully. consumeError(NameOrErr.takeError()); - return readobj_error::unknown_symbol; + return inconvertibleErrorCode(); } return *NameOrErr; } - return readobj_error::unknown_symbol; + return inconvertibleErrorCode(); } template Index: llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp =================================================================== --- llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp +++ llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp @@ -62,7 +62,6 @@ // epilogue of the function. #include "ARMWinEHPrinter.h" -#include "Error.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/ARMWinEH.h" @@ -217,7 +216,7 @@ if (VA >= Address && (VA - Address) <= Size) return Section; } - return readobj_error::unknown_symbol; + return inconvertibleErrorCode(); } ErrorOr Decoder::getSymbol(const COFFObjectFile &COFF, @@ -235,7 +234,7 @@ if (*Address == VA) return Symbol; } - return readobj_error::unknown_symbol; + return inconvertibleErrorCode(); } ErrorOr Decoder::getRelocatedSymbol(const COFFObjectFile &, @@ -246,7 +245,7 @@ if (RelocationOffset == Offset) return *Relocation.getSymbol(); } - return readobj_error::unknown_symbol; + return inconvertibleErrorCode(); } bool Decoder::opcode_0xxxxxxx(const uint8_t *OC, unsigned &Offset, Index: llvm/tools/llvm-readobj/CMakeLists.txt =================================================================== --- llvm/tools/llvm-readobj/CMakeLists.txt +++ llvm/tools/llvm-readobj/CMakeLists.txt @@ -15,7 +15,6 @@ COFFDumper.cpp COFFImportDumper.cpp ELFDumper.cpp - Error.cpp llvm-readobj.cpp MachODumper.cpp ObjDumper.cpp Index: llvm/tools/llvm-readobj/COFFDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/COFFDumper.cpp +++ llvm/tools/llvm-readobj/COFFDumper.cpp @@ -12,7 +12,6 @@ //===----------------------------------------------------------------------===// #include "ARMWinEHPrinter.h" -#include "Error.h" #include "ObjDumper.h" #include "StackMapPrinter.h" #include "Win64EHDumper.h" @@ -262,9 +261,9 @@ } } if (SymI == Obj->symbol_end()) - return readobj_error::unknown_symbol; + return inconvertibleErrorCode(); Sym = *SymI; - return readobj_error::success; + return std::error_code(); } // Given a section and an offset into this section the function returns the name @@ -578,7 +577,7 @@ ArrayRef AuxData = Obj->getSymbolAuxData(Symbol); AuxData = AuxData.slice(AuxSymbolIdx * Obj->getSymbolTableEntrySize()); Aux = reinterpret_cast(AuxData.data()); - return readobj_error::success; + return std::error_code(); } void COFFDumper::cacheRelocations() { Index: llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h =================================================================== --- llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h +++ llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h @@ -9,7 +9,6 @@ #ifndef LLVM_TOOLS_LLVM_READOBJ_DWARFCFIEHPRINTER_H #define LLVM_TOOLS_LLVM_READOBJ_DWARFCFIEHPRINTER_H -#include "Error.h" #include "llvm-readobj.h" #include "llvm/ADT/STLExtras.h" #include "llvm/BinaryFormat/Dwarf.h" Index: llvm/tools/llvm-readobj/ELFDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/ELFDumper.cpp +++ llvm/tools/llvm-readobj/ELFDumper.cpp @@ -13,7 +13,6 @@ #include "ARMEHABIPrinter.h" #include "DwarfCFIEHPrinter.h" -#include "Error.h" #include "ObjDumper.h" #include "StackMapPrinter.h" #include "llvm-readobj.h" Index: llvm/tools/llvm-readobj/Error.h =================================================================== --- llvm/tools/llvm-readobj/Error.h +++ /dev/null @@ -1,40 +0,0 @@ -//===- Error.h - system_error extensions for llvm-readobj -------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This declares a new error_category for the llvm-readobj tool. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_TOOLS_LLVM_READOBJ_ERROR_H -#define LLVM_TOOLS_LLVM_READOBJ_ERROR_H - -#include - -namespace llvm { -const std::error_category &readobj_category(); - -enum class readobj_error { - success = 0, - file_not_found, - unsupported_file_format, - unrecognized_file_format, - unsupported_obj_file_format, - unknown_symbol -}; - -inline std::error_code make_error_code(readobj_error e) { - return std::error_code(static_cast(e), readobj_category()); -} - -} // namespace llvm - -namespace std { -template <> struct is_error_code_enum : std::true_type {}; -} - -#endif Index: llvm/tools/llvm-readobj/Error.cpp =================================================================== --- llvm/tools/llvm-readobj/Error.cpp +++ /dev/null @@ -1,56 +0,0 @@ -//===- Error.cpp - system_error extensions for llvm-readobj -----*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This defines a new error_category for the llvm-readobj tool. -// -//===----------------------------------------------------------------------===// - -#include "Error.h" -#include "llvm/Support/ErrorHandling.h" - -using namespace llvm; - -namespace { -// FIXME: This class is only here to support the transition to llvm::Error. It -// will be removed once this transition is complete. Clients should prefer to -// deal with the Error value directly, rather than converting to error_code. -class _readobj_error_category : public std::error_category { -public: - const char* name() const noexcept override; - std::string message(int ev) const override; -}; -} // namespace - -const char *_readobj_error_category::name() const noexcept { - return "llvm.readobj"; -} - -std::string _readobj_error_category::message(int EV) const { - switch (static_cast(EV)) { - case readobj_error::success: return "Success"; - case readobj_error::file_not_found: - return "No such file."; - case readobj_error::unsupported_file_format: - return "The file was not recognized as a valid object file."; - case readobj_error::unrecognized_file_format: - return "Unrecognized file type."; - case readobj_error::unsupported_obj_file_format: - return "Unsupported object file format."; - case readobj_error::unknown_symbol: - return "Unknown symbol."; - } - llvm_unreachable("An enumerator of readobj_error does not have a message " - "defined."); -} - -namespace llvm { -const std::error_category &readobj_category() { - static _readobj_error_category o; - return o; -} -} // namespace llvm Index: llvm/tools/llvm-readobj/MachODumper.cpp =================================================================== --- llvm/tools/llvm-readobj/MachODumper.cpp +++ llvm/tools/llvm-readobj/MachODumper.cpp @@ -10,7 +10,6 @@ // //===----------------------------------------------------------------------===// -#include "Error.h" #include "ObjDumper.h" #include "StackMapPrinter.h" #include "llvm-readobj.h" Index: llvm/tools/llvm-readobj/ObjDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/ObjDumper.cpp +++ llvm/tools/llvm-readobj/ObjDumper.cpp @@ -12,7 +12,6 @@ //===----------------------------------------------------------------------===// #include "ObjDumper.h" -#include "Error.h" #include "llvm-readobj.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Support/Error.h" Index: llvm/tools/llvm-readobj/WasmDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/WasmDumper.cpp +++ llvm/tools/llvm-readobj/WasmDumper.cpp @@ -10,7 +10,6 @@ // //===----------------------------------------------------------------------===// -#include "Error.h" #include "ObjDumper.h" #include "llvm-readobj.h" #include "llvm/Object/Wasm.h" Index: llvm/tools/llvm-readobj/Win64EHDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/Win64EHDumper.cpp +++ llvm/tools/llvm-readobj/Win64EHDumper.cpp @@ -7,7 +7,6 @@ //===----------------------------------------------------------------------===// #include "Win64EHDumper.h" -#include "Error.h" #include "llvm-readobj.h" #include "llvm/Object/COFF.h" #include "llvm/Support/ErrorHandling.h" @@ -120,10 +119,10 @@ return errorToErrorCode(Address.takeError()); if (*Address == VA) { Sym = Symbol; - return readobj_error::success; + return std::error_code(); } } - return readobj_error::unknown_symbol; + return inconvertibleErrorCode(); } static std::string formatSymbol(const Dumper::Context &Ctx, Index: llvm/tools/llvm-readobj/WindowsResourceDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/WindowsResourceDumper.cpp +++ llvm/tools/llvm-readobj/WindowsResourceDumper.cpp @@ -11,7 +11,6 @@ //===----------------------------------------------------------------------===// #include "WindowsResourceDumper.h" -#include "Error.h" #include "llvm/Object/WindowsResource.h" #include "llvm/Support/ConvertUTF.h" #include "llvm/Support/ScopedPrinter.h" Index: llvm/tools/llvm-readobj/XCOFFDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/XCOFFDumper.cpp +++ llvm/tools/llvm-readobj/XCOFFDumper.cpp @@ -10,7 +10,6 @@ // //===----------------------------------------------------------------------===// -#include "Error.h" #include "ObjDumper.h" #include "llvm-readobj.h" #include "llvm/Object/XCOFFObjectFile.h" Index: llvm/tools/llvm-readobj/llvm-readobj.cpp =================================================================== --- llvm/tools/llvm-readobj/llvm-readobj.cpp +++ llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -19,7 +19,6 @@ //===----------------------------------------------------------------------===// #include "llvm-readobj.h" -#include "Error.h" #include "ObjDumper.h" #include "WindowsResourceDumper.h" #include "llvm/DebugInfo/CodeView/GlobalTypeTableBuilder.h" @@ -579,13 +578,17 @@ reportError(std::move(E), Arc->getFileName()); continue; } - if (ObjectFile *Obj = dyn_cast(&*ChildOrErr.get())) + + Binary* Bin = ChildOrErr->get(); + if (ObjectFile *Obj = dyn_cast(Bin)) dumpObject(*Obj, Writer, Arc); - else if (COFFImportFile *Imp = dyn_cast(&*ChildOrErr.get())) + else if (COFFImportFile *Imp = dyn_cast(Bin)) dumpCOFFImportFile(Imp, Writer); else - reportWarning(errorCodeToError(readobj_error::unrecognized_file_format), - Arc->getFileName()); + reportWarning( + createStringError(errc::invalid_argument, + "unrecognized file type of " + Bin->getFileName()), + Arc->getFileName()); } if (Err) reportError(std::move(Err), Arc->getFileName()); @@ -634,8 +637,10 @@ else if (WindowsResource *WinRes = dyn_cast(&Binary)) dumpWindowsResourceFile(WinRes, Writer); else - reportError(errorCodeToError(readobj_error::unrecognized_file_format), - File); + // Not tested, because all possible file types are handled. + reportError( + createStringError(errc::invalid_argument, "unrecognized file type"), + File); CVTypes.Binaries.push_back(std::move(*BinaryOrErr)); }