blob: 435fda447ebe503c2a17161db5f07796c670a5a3 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- 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
23class UnwindMacOSXFrameBackchain : public lldb_private::Unwind
24{
25public:
26 UnwindMacOSXFrameBackchain (lldb_private::Thread &thread);
27
28 virtual
29 ~UnwindMacOSXFrameBackchain()
30 {
31 }
32
33 virtual void
34 Clear()
35 {
36 m_cursors.clear();
37 }
38
39 virtual uint32_t
40 GetFrameCount();
41
42 bool
43 GetFrameInfoAtIndex (uint32_t frame_idx,
44 lldb::addr_t& cfa,
45 lldb::addr_t& pc);
46
47 lldb_private::RegisterContext *
48 CreateRegisterContextForFrame (lldb_private::StackFrame *frame);
49
50 lldb_private::Thread &
51 GetThread();
52
53protected:
54 friend class RegisterContextMacOSXFrameBackchain;
55
Greg Claytonc0418152010-07-07 17:07:17 +000056 struct Cursor
Chris Lattner24943d22010-06-08 16:52:24 +000057 {
58 lldb::addr_t pc; // Program counter
59 lldb::addr_t fp; // Frame pointer for us with backchain
60 };
61
62private:
63 std::vector<Cursor> m_cursors;
64
65 size_t
66 GetStackFrameData_i386 (lldb_private::StackFrame *first_frame);
67
68 size_t
69 GetStackFrameData_x86_64 (lldb_private::StackFrame *first_frame);
70
71 //------------------------------------------------------------------
72 // For UnwindMacOSXFrameBackchain only
73 //------------------------------------------------------------------
74 DISALLOW_COPY_AND_ASSIGN (UnwindMacOSXFrameBackchain);
75};
76
77#endif // lldb_UnwindMacOSXFrameBackchain_h_