1 //===-- UnwindMacOSXFrameBackchain.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 lldb_UnwindMacOSXFrameBackchain_h_ 11 #define lldb_UnwindMacOSXFrameBackchain_h_ 12 13 // C Includes 14 // C++ Includes 15 #include <vector> 16 17 // Other libraries and framework includes 18 19 // Project includes 20 #include "lldb/lldb-private.h" 21 #include "lldb/Target/Unwind.h" 22 23 class UnwindMacOSXFrameBackchain : public lldb_private::Unwind 24 { 25 public: 26 UnwindMacOSXFrameBackchain (lldb_private::Thread &thread); 27 28 virtual ~UnwindMacOSXFrameBackchain()29 ~UnwindMacOSXFrameBackchain() 30 { 31 } 32 33 protected: 34 virtual void DoClear()35 DoClear() 36 { 37 m_cursors.clear(); 38 } 39 40 virtual uint32_t 41 DoGetFrameCount(); 42 43 bool 44 DoGetFrameInfoAtIndex (uint32_t frame_idx, 45 lldb::addr_t& cfa, 46 lldb::addr_t& pc); 47 48 lldb::RegisterContextSP 49 DoCreateRegisterContextForFrame (lldb_private::StackFrame *frame); 50 51 friend class RegisterContextMacOSXFrameBackchain; 52 53 struct Cursor 54 { 55 lldb::addr_t pc; // Program counter 56 lldb::addr_t fp; // Frame pointer for us with backchain 57 }; 58 59 private: 60 std::vector<Cursor> m_cursors; 61 62 size_t 63 GetStackFrameData_i386 (const lldb_private::ExecutionContext &exe_ctx); 64 65 size_t 66 GetStackFrameData_x86_64 (const lldb_private::ExecutionContext &exe_ctx); 67 68 //------------------------------------------------------------------ 69 // For UnwindMacOSXFrameBackchain only 70 //------------------------------------------------------------------ 71 DISALLOW_COPY_AND_ASSIGN (UnwindMacOSXFrameBackchain); 72 }; 73 74 #endif // lldb_UnwindMacOSXFrameBackchain_h_ 75