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