UnwindAssembly.h revision 269024
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 std::enable_shared_from_this<UnwindAssembly>, 21 public PluginInterface 22{ 23public: 24 static lldb::UnwindAssemblySP 25 FindPlugin (const ArchSpec &arch); 26 27 virtual 28 ~UnwindAssembly(); 29 30 virtual bool 31 GetNonCallSiteUnwindPlanFromAssembly (AddressRange& func, 32 Thread& thread, 33 UnwindPlan& unwind_plan) = 0; 34 35 virtual bool 36 GetFastUnwindPlan (AddressRange& func, 37 Thread& thread, 38 UnwindPlan &unwind_plan) = 0; 39 40 // thread may be NULL in which case we only use the Target (e.g. if this is called pre-process-launch). 41 virtual bool 42 FirstNonPrologueInsn (AddressRange& func, 43 const lldb_private::ExecutionContext &exe_ctx, 44 Address& first_non_prologue_insn) = 0; 45 46protected: 47 UnwindAssembly (const ArchSpec &arch); 48 ArchSpec m_arch; 49 50private: 51 UnwindAssembly(); // Outlaw default constructor 52 DISALLOW_COPY_AND_ASSIGN (UnwindAssembly); 53}; 54 55} // namespace lldb_private 56 57#endif //utility_UnwindAssembly_h_ 58 59 60