1*9880d681SAndroid Build Coastguard Worker //===-- llvm-readobj.h ----------------------------------------------------===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker #ifndef LLVM_TOOLS_LLVM_READOBJ_LLVM_READOBJ_H 11*9880d681SAndroid Build Coastguard Worker #define LLVM_TOOLS_LLVM_READOBJ_LLVM_READOBJ_H 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/CommandLine.h" 14*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Compiler.h" 15*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ErrorOr.h" 16*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Error.h" 17*9880d681SAndroid Build Coastguard Worker #include <string> 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker namespace llvm { 20*9880d681SAndroid Build Coastguard Worker namespace object { 21*9880d681SAndroid Build Coastguard Worker class RelocationRef; 22*9880d681SAndroid Build Coastguard Worker } 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker // Various helper functions. 25*9880d681SAndroid Build Coastguard Worker LLVM_ATTRIBUTE_NORETURN void reportError(Twine Msg); 26*9880d681SAndroid Build Coastguard Worker void error(std::error_code ec); unwrapOrError(ErrorOr<T> EO)27*9880d681SAndroid Build Coastguard Worker template <class T> T unwrapOrError(ErrorOr<T> EO) { 28*9880d681SAndroid Build Coastguard Worker if (EO) 29*9880d681SAndroid Build Coastguard Worker return *EO; 30*9880d681SAndroid Build Coastguard Worker reportError(EO.getError().message()); 31*9880d681SAndroid Build Coastguard Worker } unwrapOrError(Expected<T> EO)32*9880d681SAndroid Build Coastguard Worker template <class T> T unwrapOrError(Expected<T> EO) { 33*9880d681SAndroid Build Coastguard Worker if (EO) 34*9880d681SAndroid Build Coastguard Worker return *EO; 35*9880d681SAndroid Build Coastguard Worker std::string Buf; 36*9880d681SAndroid Build Coastguard Worker raw_string_ostream OS(Buf); 37*9880d681SAndroid Build Coastguard Worker logAllUnhandledErrors(EO.takeError(), OS, ""); 38*9880d681SAndroid Build Coastguard Worker OS.flush(); 39*9880d681SAndroid Build Coastguard Worker reportError(Buf); 40*9880d681SAndroid Build Coastguard Worker } 41*9880d681SAndroid Build Coastguard Worker bool relocAddressLess(object::RelocationRef A, 42*9880d681SAndroid Build Coastguard Worker object::RelocationRef B); 43*9880d681SAndroid Build Coastguard Worker } // namespace llvm 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker namespace opts { 46*9880d681SAndroid Build Coastguard Worker extern llvm::cl::list<std::string> InputFilenames; 47*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> FileHeaders; 48*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> Sections; 49*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> SectionRelocations; 50*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> SectionSymbols; 51*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> SectionData; 52*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> Relocations; 53*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> Symbols; 54*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> DynamicSymbols; 55*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> UnwindInfo; 56*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> ExpandRelocs; 57*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> CodeView; 58*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> CodeViewSubsectionBytes; 59*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> ARMAttributes; 60*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<bool> MipsPLTGOT; 61*9880d681SAndroid Build Coastguard Worker enum OutputStyleTy { LLVM, GNU }; 62*9880d681SAndroid Build Coastguard Worker extern llvm::cl::opt<OutputStyleTy> Output; 63*9880d681SAndroid Build Coastguard Worker } // namespace opts 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker #define LLVM_READOBJ_ENUM_ENT(ns, enum) \ 66*9880d681SAndroid Build Coastguard Worker { #enum, ns::enum } 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker #define LLVM_READOBJ_ENUM_CLASS_ENT(enum_class, enum) \ 69*9880d681SAndroid Build Coastguard Worker { #enum, std::underlying_type<enum_class>::type(enum_class::enum) } 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker #endif 72