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 17namespace lldb_private { 18 19class UnwindAssembly : 20 public PluginInterface 21{ 22public: 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 45protected: 46 UnwindAssembly (const ArchSpec &arch); 47 ArchSpec m_arch; 48 49private: 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