1254721Semaste//===-- UnwindMacOSXFrameBackchain.h ----------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef lldb_UnwindMacOSXFrameBackchain_h_ 11254721Semaste#define lldb_UnwindMacOSXFrameBackchain_h_ 12254721Semaste 13254721Semaste// C Includes 14254721Semaste// C++ Includes 15254721Semaste#include <vector> 16254721Semaste 17254721Semaste// Other libraries and framework includes 18254721Semaste 19254721Semaste// Project includes 20254721Semaste#include "lldb/lldb-private.h" 21254721Semaste#include "lldb/Target/Unwind.h" 22254721Semaste 23254721Semasteclass UnwindMacOSXFrameBackchain : public lldb_private::Unwind 24254721Semaste{ 25254721Semastepublic: 26254721Semaste UnwindMacOSXFrameBackchain (lldb_private::Thread &thread); 27254721Semaste 28254721Semaste virtual 29254721Semaste ~UnwindMacOSXFrameBackchain() 30254721Semaste { 31254721Semaste } 32254721Semaste 33254721Semasteprotected: 34254721Semaste virtual void 35254721Semaste DoClear() 36254721Semaste { 37254721Semaste m_cursors.clear(); 38254721Semaste } 39254721Semaste 40254721Semaste virtual uint32_t 41254721Semaste DoGetFrameCount(); 42254721Semaste 43254721Semaste bool 44254721Semaste DoGetFrameInfoAtIndex (uint32_t frame_idx, 45254721Semaste lldb::addr_t& cfa, 46254721Semaste lldb::addr_t& pc); 47254721Semaste 48254721Semaste lldb::RegisterContextSP 49254721Semaste DoCreateRegisterContextForFrame (lldb_private::StackFrame *frame); 50254721Semaste 51254721Semaste friend class RegisterContextMacOSXFrameBackchain; 52254721Semaste 53254721Semaste struct Cursor 54254721Semaste { 55254721Semaste lldb::addr_t pc; // Program counter 56254721Semaste lldb::addr_t fp; // Frame pointer for us with backchain 57254721Semaste }; 58254721Semaste 59254721Semasteprivate: 60254721Semaste std::vector<Cursor> m_cursors; 61254721Semaste 62254721Semaste size_t 63254721Semaste GetStackFrameData_i386 (const lldb_private::ExecutionContext &exe_ctx); 64254721Semaste 65254721Semaste size_t 66254721Semaste GetStackFrameData_x86_64 (const lldb_private::ExecutionContext &exe_ctx); 67254721Semaste 68254721Semaste //------------------------------------------------------------------ 69254721Semaste // For UnwindMacOSXFrameBackchain only 70254721Semaste //------------------------------------------------------------------ 71254721Semaste DISALLOW_COPY_AND_ASSIGN (UnwindMacOSXFrameBackchain); 72254721Semaste}; 73254721Semaste 74254721Semaste#endif // lldb_UnwindMacOSXFrameBackchain_h_ 75