1 //===-- UnwindAssembly.h --------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef utility_UnwindAssembly_h_ 11 #define utility_UnwindAssembly_h_ 12 13 #include "lldb/lldb-private.h" 14 #include "lldb/Core/ArchSpec.h" 15 #include "lldb/Core/PluginInterface.h" 16 17 namespace lldb_private { 18 19 class UnwindAssembly : 20 public PluginInterface 21 { 22 public: 23 static UnwindAssembly* 24 FindPlugin (const ArchSpec &arch); 25 26 virtual 27 ~UnwindAssembly(); 28 29 virtual bool 30 GetNonCallSiteUnwindPlanFromAssembly (AddressRange& func, 31 Thread& thread, 32 UnwindPlan& unwind_plan) = 0; 33 34 virtual bool 35 GetFastUnwindPlan (AddressRange& func, 36 Thread& thread, 37 UnwindPlan &unwind_plan) = 0; 38 39 // thread may be NULL in which case we only use the Target (e.g. if this is called pre-process-launch). 40 virtual bool 41 FirstNonPrologueInsn (AddressRange& func, 42 const lldb_private::ExecutionContext &exe_ctx, 43 Address& first_non_prologue_insn) = 0; 44 45 protected: 46 UnwindAssembly (const ArchSpec &arch); 47 ArchSpec m_arch; 48 49 private: 50 UnwindAssembly(); // Outlaw default constructor 51 DISALLOW_COPY_AND_ASSIGN (UnwindAssembly); 52 }; 53 54 } // namespace lldb_private 55 56 #endif //utility_UnwindAssembly_h_ 57 58 59