StackFrameList.h revision abe0fed36d83e1c37af9dae90c2d25db742b4515
1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//===-- StackFrameList.h ----------------------------------------*- C++ -*-===//
2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//                     The LLVM Compiler Infrastructure
4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// This file is distributed under the University of Illinois Open Source
6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// License. See LICENSE.TXT for details.
7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//===----------------------------------------------------------------------===//
9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#ifndef liblldb_StackFrameList_h_
11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#define liblldb_StackFrameList_h_
12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// C Includes
14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// C++ Includes
15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include <vector>
16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// Other libraries and framework includes
18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// Project includes
19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "lldb/Host/Mutex.h"
20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include "lldb/Target/StackFrame.h"
21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogennamespace lldb_private {
23674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass StackFrameList
25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen{
26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpublic:
27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    //------------------------------------------------------------------
28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    // Constructors and Destructors
29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    //------------------------------------------------------------------
30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    StackFrameList (Thread &thread,
31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    const lldb::StackFrameListSP &prev_frames_sp,
32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    bool show_inline_frames);
33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    ~StackFrameList();
35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    uint32_t
37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    GetNumFrames (bool can_create = true);
38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    lldb::StackFrameSP
40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    GetFrameAtIndex (uint32_t idx);
41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    lldb::StackFrameSP
43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    GetFrameWithConcreteFrameIndex (uint32_t unwind_idx);
44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    lldb::StackFrameSP
46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    GetFrameWithStackID (StackID &stack_id);
47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    // Mark a stack frame as the current frame
49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    uint32_t
50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    SetSelectedFrame (lldb_private::StackFrame *frame);
51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    uint32_t
53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    GetSelectedFrameIndex () const;
54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    // Mark a stack frame as the current frame using the frame index
56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    void
57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    SetSelectedFrameByIndex (uint32_t idx);
58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    void
60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    Clear ();
61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    void
63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    InvalidateFrames (uint32_t start_idx);
64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    void
66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    Dump (Stream *s);
67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    lldb::StackFrameSP
69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr);
70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    size_t
72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    GetStatus (Stream &strm,
73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen               uint32_t first_frame,
74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen               uint32_t num_frames,
75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen               bool show_frame_info,
76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen               uint32_t num_frames_with_source,
77674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen               uint32_t source_lines_before,
78               uint32_t source_lines_after);
79
80protected:
81
82    friend class Thread;
83
84    bool
85    SetFrameAtIndex (uint32_t idx, lldb::StackFrameSP &frame_sp);
86
87    static void
88    Merge (std::auto_ptr<StackFrameList>& curr_ap,
89           lldb::StackFrameListSP& prev_sp);
90
91    //------------------------------------------------------------------
92    // Classes that inherit from StackFrameList can see and modify these
93    //------------------------------------------------------------------
94    typedef std::vector<lldb::StackFrameSP> collection;
95    typedef collection::iterator iterator;
96    typedef collection::const_iterator const_iterator;
97
98    Thread &m_thread;
99    lldb::StackFrameListSP m_prev_frames_sp;
100    mutable Mutex m_mutex;
101    collection m_frames;
102    uint32_t m_selected_frame_idx;
103    bool m_show_inlined_frames;
104
105private:
106    //------------------------------------------------------------------
107    // For StackFrameList only
108    //------------------------------------------------------------------
109    DISALLOW_COPY_AND_ASSIGN (StackFrameList);
110};
111
112} // namespace lldb_private
113
114#endif  // liblldb_StackFrameList_h_
115