//===-- llvm-readobj.h ----------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// #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 reportError(StringRef Input, Error Err); void reportWarning(Twine Msg); void warn(llvm::Error Err); 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); } } // namespace llvm namespace opts { extern llvm::cl::opt SectionRelocations; extern llvm::cl::opt SectionSymbols; extern llvm::cl::opt SectionData; extern llvm::cl::opt ExpandRelocs; extern llvm::cl::opt RawRelr; extern llvm::cl::opt CodeViewSubsectionBytes; extern llvm::cl::opt Demangle; 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