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