| //===-- 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 |