blob: f195514ed1bab0eee7c078a807f44685893002e1 [file] [log] [blame]
Chris Lattner30fdc8d2010-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
Chris Lattner30fdc8d2010-06-08 16:52:24 +000018// 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);
Eugene Zelenkoab7f6d02015-10-21 18:46:17 +000026
27 ~UnwindMacOSXFrameBackchain() override = default;
28
Jim Ingham8f077162011-10-21 01:49:48 +000029protected:
Eugene Zelenkoab7f6d02015-10-21 18:46:17 +000030 void
31 DoClear() override
Chris Lattner30fdc8d2010-06-08 16:52:24 +000032 {
33 m_cursors.clear();
34 }
35
Eugene Zelenkoab7f6d02015-10-21 18:46:17 +000036 uint32_t
37 DoGetFrameCount() override;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000038
39 bool
Eugene Zelenkoab7f6d02015-10-21 18:46:17 +000040 DoGetFrameInfoAtIndex(uint32_t frame_idx,
41 lldb::addr_t& cfa,
42 lldb::addr_t& pc) override;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000043
Greg Clayton5ccbd292011-01-06 22:15:06 +000044 lldb::RegisterContextSP
Eugene Zelenkoab7f6d02015-10-21 18:46:17 +000045 DoCreateRegisterContextForFrame(lldb_private::StackFrame *frame) override;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000046
Chris Lattner30fdc8d2010-06-08 16:52:24 +000047 friend class RegisterContextMacOSXFrameBackchain;
48
Greg Clayton69b518f2010-07-07 17:07:17 +000049 struct Cursor
Chris Lattner30fdc8d2010-06-08 16:52:24 +000050 {
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
Greg Clayton1ac04c32012-02-21 00:09:25 +000059 GetStackFrameData_i386 (const lldb_private::ExecutionContext &exe_ctx);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000060
61 size_t
Greg Clayton1ac04c32012-02-21 00:09:25 +000062 GetStackFrameData_x86_64 (const lldb_private::ExecutionContext &exe_ctx);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000063
64 //------------------------------------------------------------------
65 // For UnwindMacOSXFrameBackchain only
66 //------------------------------------------------------------------
67 DISALLOW_COPY_AND_ASSIGN (UnwindMacOSXFrameBackchain);
68};
69
Eugene Zelenkoab7f6d02015-10-21 18:46:17 +000070#endif // lldb_UnwindMacOSXFrameBackchain_h_