We have Error.cpp/.h which contains some code for working with error codes.
In fact we use Error/Expected<> almost everywhere already and we can get rid
of these files.
Note: a few places in the code used readobj specific error codes,
e.g. `return readobj_error::unknown_symbol`. But these codes are never really used,
i.e. the code checks the fact of a success/error call only.
So I've changes them to `return inconvertibleErrorCode()` for now.
It seems that these places probably should be converted to use `Error`/`Expected<>`.
Differential revision: https://reviews.llvm.org/D86772
# 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]]': broken.a has an unsupported file type
# BROKEN: File: [[ARFILE]](trivial.obj.elf-x86-64)
#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"
PrinterContext<ET>::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);
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 <typename ET>
// 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"
if (VA >= Address && (VA - Address) <= Size)
return Section;
}
- return readobj_error::unknown_symbol;
+ return inconvertibleErrorCode();
}
ErrorOr<object::SymbolRef> Decoder::getSymbol(const COFFObjectFile &COFF,
if (*Address == VA)
return Symbol;
}
- return readobj_error::unknown_symbol;
+ return inconvertibleErrorCode();
}
ErrorOr<SymbolRef> Decoder::getRelocatedSymbol(const COFFObjectFile &,
if (RelocationOffset == Offset)
return *Relocation.getSymbol();
}
- return readobj_error::unknown_symbol;
+ return inconvertibleErrorCode();
}
bool Decoder::opcode_0xxxxxxx(const uint8_t *OC, unsigned &Offset,
COFFDumper.cpp
COFFImportDumper.cpp
ELFDumper.cpp
- Error.cpp
llvm-readobj.cpp
MachODumper.cpp
ObjDumper.cpp
//===----------------------------------------------------------------------===//
#include "ARMWinEHPrinter.h"
-#include "Error.h"
#include "ObjDumper.h"
#include "StackMapPrinter.h"
#include "Win64EHDumper.h"
}
}
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
ArrayRef<uint8_t> AuxData = Obj->getSymbolAuxData(Symbol);
AuxData = AuxData.slice(AuxSymbolIdx * Obj->getSymbolTableEntrySize());
Aux = reinterpret_cast<const T*>(AuxData.data());
- return readobj_error::success;
+ return std::error_code();
}
void COFFDumper::cacheRelocations() {
#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"
#include "ARMEHABIPrinter.h"
#include "DwarfCFIEHPrinter.h"
-#include "Error.h"
#include "ObjDumper.h"
#include "StackMapPrinter.h"
#include "llvm-readobj.h"
+++ /dev/null
-//===- 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<readobj_error>(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
+++ /dev/null
-//===- 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 <system_error>
-
-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<int>(e), readobj_category());
-}
-
-} // namespace llvm
-
-namespace std {
-template <> struct is_error_code_enum<llvm::readobj_error> : std::true_type {};
-}
-
-#endif
//
//===----------------------------------------------------------------------===//
-#include "Error.h"
#include "ObjDumper.h"
#include "StackMapPrinter.h"
#include "llvm-readobj.h"
//===----------------------------------------------------------------------===//
#include "ObjDumper.h"
-#include "Error.h"
#include "llvm-readobj.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Support/Error.h"
//
//===----------------------------------------------------------------------===//
-#include "Error.h"
#include "ObjDumper.h"
#include "llvm-readobj.h"
#include "llvm/Object/Wasm.h"
//===----------------------------------------------------------------------===//
#include "Win64EHDumper.h"
-#include "Error.h"
#include "llvm-readobj.h"
#include "llvm/Object/COFF.h"
#include "llvm/Support/ErrorHandling.h"
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,
//===----------------------------------------------------------------------===//
#include "WindowsResourceDumper.h"
-#include "Error.h"
#include "llvm/Object/WindowsResource.h"
#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/ScopedPrinter.h"
//
//===----------------------------------------------------------------------===//
-#include "Error.h"
#include "ObjDumper.h"
#include "llvm-readobj.h"
#include "llvm/Object/XCOFFObjectFile.h"
//===----------------------------------------------------------------------===//
#include "llvm-readobj.h"
-#include "Error.h"
#include "ObjDumper.h"
#include "WindowsResourceDumper.h"
#include "llvm/DebugInfo/CodeView/GlobalTypeTableBuilder.h"
reportError(std::move(E), Arc->getFileName());
continue;
}
- if (ObjectFile *Obj = dyn_cast<ObjectFile>(&*ChildOrErr.get()))
+
+ Binary *Bin = ChildOrErr->get();
+ if (ObjectFile *Obj = dyn_cast<ObjectFile>(Bin))
dumpObject(*Obj, Writer, Arc);
- else if (COFFImportFile *Imp = dyn_cast<COFFImportFile>(&*ChildOrErr.get()))
+ else if (COFFImportFile *Imp = dyn_cast<COFFImportFile>(Bin))
dumpCOFFImportFile(Imp, Writer);
else
- reportWarning(errorCodeToError(readobj_error::unrecognized_file_format),
+ reportWarning(createStringError(errc::invalid_argument,
+ Bin->getFileName() +
+ " has an unsupported file type"),
Arc->getFileName());
}
if (Err)
else if (WindowsResource *WinRes = dyn_cast<WindowsResource>(&Binary))
dumpWindowsResourceFile(WinRes, Writer);
else
- reportError(errorCodeToError(readobj_error::unrecognized_file_format),
- File);
+ llvm_unreachable("unrecognized file type");
CVTypes.Binaries.push_back(std::move(*BinaryOrErr));
}