1*9880d681SAndroid Build Coastguard Worker //===- Win64EHDumper.h - Win64 EH Printing ----------------------*- C++ -*-===// 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_WIN64EHDUMPER_H 11*9880d681SAndroid Build Coastguard Worker #define LLVM_TOOLS_LLVM_READOBJ_WIN64EHDUMPER_H 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ScopedPrinter.h" 14*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Win64EH.h" 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker namespace llvm { 17*9880d681SAndroid Build Coastguard Worker namespace object { 18*9880d681SAndroid Build Coastguard Worker class COFFObjectFile; 19*9880d681SAndroid Build Coastguard Worker class SymbolRef; 20*9880d681SAndroid Build Coastguard Worker struct coff_section; 21*9880d681SAndroid Build Coastguard Worker } 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker namespace Win64EH { 24*9880d681SAndroid Build Coastguard Worker class Dumper { 25*9880d681SAndroid Build Coastguard Worker ScopedPrinter &SW; 26*9880d681SAndroid Build Coastguard Worker raw_ostream &OS; 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker public: 29*9880d681SAndroid Build Coastguard Worker typedef std::error_code (*SymbolResolver)(const object::coff_section *, 30*9880d681SAndroid Build Coastguard Worker uint64_t, object::SymbolRef &, 31*9880d681SAndroid Build Coastguard Worker void *); 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker struct Context { 34*9880d681SAndroid Build Coastguard Worker const object::COFFObjectFile &COFF; 35*9880d681SAndroid Build Coastguard Worker SymbolResolver ResolveSymbol; 36*9880d681SAndroid Build Coastguard Worker void *UserData; 37*9880d681SAndroid Build Coastguard Worker ContextContext38*9880d681SAndroid Build Coastguard Worker Context(const object::COFFObjectFile &COFF, SymbolResolver Resolver, 39*9880d681SAndroid Build Coastguard Worker void *UserData) 40*9880d681SAndroid Build Coastguard Worker : COFF(COFF), ResolveSymbol(Resolver), UserData(UserData) {} 41*9880d681SAndroid Build Coastguard Worker }; 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker private: 44*9880d681SAndroid Build Coastguard Worker void printRuntimeFunctionEntry(const Context &Ctx, 45*9880d681SAndroid Build Coastguard Worker const object::coff_section *Section, 46*9880d681SAndroid Build Coastguard Worker uint64_t SectionOffset, 47*9880d681SAndroid Build Coastguard Worker const RuntimeFunction &RF); 48*9880d681SAndroid Build Coastguard Worker void printUnwindCode(const UnwindInfo& UI, ArrayRef<UnwindCode> UC); 49*9880d681SAndroid Build Coastguard Worker void printUnwindInfo(const Context &Ctx, const object::coff_section *Section, 50*9880d681SAndroid Build Coastguard Worker off_t Offset, const UnwindInfo &UI); 51*9880d681SAndroid Build Coastguard Worker void printRuntimeFunction(const Context &Ctx, 52*9880d681SAndroid Build Coastguard Worker const object::coff_section *Section, 53*9880d681SAndroid Build Coastguard Worker uint64_t SectionOffset, const RuntimeFunction &RF); 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker public: Dumper(ScopedPrinter & SW)56*9880d681SAndroid Build Coastguard Worker Dumper(ScopedPrinter &SW) : SW(SW), OS(SW.getOStream()) {} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker void printData(const Context &Ctx); 59*9880d681SAndroid Build Coastguard Worker }; 60*9880d681SAndroid Build Coastguard Worker } 61*9880d681SAndroid Build Coastguard Worker } 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker #endif 64