| //===-- llvm-readobj.h ----------------------------------------------------===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_TOOLS_LLVM_READOBJ_LLVM_READOBJ_H | |
| #define LLVM_TOOLS_LLVM_READOBJ_LLVM_READOBJ_H | |
| #include "llvm/Support/CommandLine.h" | |
| #include "llvm/Support/Compiler.h" | |
| #include "llvm/Support/ErrorOr.h" | |
| #include "llvm/Support/Error.h" | |
| #include <string> | |
| namespace llvm { | |
| namespace object { | |
| class RelocationRef; | |
| } | |
| // Various helper functions. | |
| LLVM_ATTRIBUTE_NORETURN void reportError(Twine Msg); | |
| void error(std::error_code EC); | |
| void error(llvm::Error EC); | |
| template <typename T> T error(llvm::Expected<T> &&E) { | |
| error(E.takeError()); | |
| return std::move(*E); | |
| } | |
| template <class T> T unwrapOrError(ErrorOr<T> EO) { | |
| if (EO) | |
| return *EO; | |
| reportError(EO.getError().message()); | |
| } | |
| template <class T> T unwrapOrError(Expected<T> EO) { | |
| if (EO) | |
| return *EO; | |
| std::string Buf; | |
| raw_string_ostream OS(Buf); | |
| logAllUnhandledErrors(EO.takeError(), OS, ""); | |
| OS.flush(); | |
| reportError(Buf); | |
| } | |
| bool relocAddressLess(object::RelocationRef A, | |
| object::RelocationRef B); | |
| } // namespace llvm | |
| namespace opts { | |
| extern llvm::cl::list<std::string> InputFilenames; | |
| extern llvm::cl::opt<bool> FileHeaders; | |
| extern llvm::cl::opt<bool> Sections; | |
| extern llvm::cl::opt<bool> SectionRelocations; | |
| extern llvm::cl::opt<bool> SectionSymbols; | |
| extern llvm::cl::opt<bool> SectionData; | |
| extern llvm::cl::opt<bool> Relocations; | |
| extern llvm::cl::opt<bool> Symbols; | |
| extern llvm::cl::opt<bool> DynamicSymbols; | |
| extern llvm::cl::opt<bool> UnwindInfo; | |
| extern llvm::cl::opt<bool> ExpandRelocs; | |
| extern llvm::cl::opt<bool> RawRelr; | |
| extern llvm::cl::opt<bool> CodeView; | |
| extern llvm::cl::opt<bool> CodeViewSubsectionBytes; | |
| extern llvm::cl::opt<bool> ARMAttributes; | |
| extern llvm::cl::opt<bool> MipsPLTGOT; | |
| enum OutputStyleTy { LLVM, GNU }; | |
| extern llvm::cl::opt<OutputStyleTy> Output; | |
| } // namespace opts | |
| #define LLVM_READOBJ_ENUM_ENT(ns, enum) \ | |
| { #enum, ns::enum } | |
| #define LLVM_READOBJ_ENUM_CLASS_ENT(enum_class, enum) \ | |
| { #enum, std::underlying_type<enum_class>::type(enum_class::enum) } | |
| #endif |