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