//===-- 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 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 T error(llvm::Expected &&E) { error(E.takeError()); return std::move(*E); } template T unwrapOrError(ErrorOr EO) { if (EO) return *EO; reportError(EO.getError().message()); } template T unwrapOrError(Expected 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::opt SectionRelocations; extern llvm::cl::opt SectionSymbols; extern llvm::cl::opt SectionData; extern llvm::cl::opt DynamicSymbols; extern llvm::cl::opt ExpandRelocs; extern llvm::cl::opt RawRelr; extern llvm::cl::opt CodeViewSubsectionBytes; enum OutputStyleTy { LLVM, GNU }; extern llvm::cl::opt 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::type(enum_class::enum) } #endif