]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/lldb/include/lldb/Target/StackFrameList.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / tools / lldb / include / lldb / Target / StackFrameList.h
1 //===-- StackFrameList.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 liblldb_StackFrameList_h_
11 #define liblldb_StackFrameList_h_
12
13 // C Includes
14 // C++ Includes
15 #include <vector>
16
17 // Other libraries and framework includes
18 // Project includes
19 #include "lldb/Host/Mutex.h"
20 #include "lldb/Target/StackFrame.h"
21
22 namespace lldb_private {
23
24 class StackFrameList
25 {
26 public:
27     //------------------------------------------------------------------
28     // Constructors and Destructors
29     //------------------------------------------------------------------
30     StackFrameList (Thread &thread, 
31                     const lldb::StackFrameListSP &prev_frames_sp,
32                     bool show_inline_frames);
33
34     ~StackFrameList();
35
36     uint32_t
37     GetNumFrames (bool can_create = true);
38     
39     lldb::StackFrameSP
40     GetFrameAtIndex (uint32_t idx);
41
42     lldb::StackFrameSP
43     GetFrameWithConcreteFrameIndex (uint32_t unwind_idx);
44     
45     lldb::StackFrameSP
46     GetFrameWithStackID (const StackID &stack_id);
47
48     // Mark a stack frame as the current frame
49     uint32_t
50     SetSelectedFrame (lldb_private::StackFrame *frame);
51     
52     uint32_t
53     GetSelectedFrameIndex () const;
54
55     // Mark a stack frame as the current frame using the frame index
56     bool
57     SetSelectedFrameByIndex (uint32_t idx);
58     
59     uint32_t
60     GetVisibleStackFrameIndex(uint32_t idx)
61     {
62         if (m_current_inlined_depth < UINT32_MAX)
63             return idx - m_current_inlined_depth;
64         else
65             return idx;
66     }
67     
68     void
69     CalculateCurrentInlinedDepth ();
70     
71     void
72     SetDefaultFileAndLineToSelectedFrame();
73
74     void
75     Clear ();
76
77     void
78     InvalidateFrames (uint32_t start_idx);
79     
80     void
81     Dump (Stream *s);
82     
83     lldb::StackFrameSP
84     GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr);
85
86     size_t
87     GetStatus (Stream &strm,
88                uint32_t first_frame,
89                uint32_t num_frames,
90                bool show_frame_info,
91                uint32_t num_frames_with_source,
92                const char *frame_marker = NULL);
93     
94 protected:
95
96     friend class Thread;
97
98     bool
99     SetFrameAtIndex (uint32_t idx, lldb::StackFrameSP &frame_sp);
100
101     static void
102     Merge (std::unique_ptr<StackFrameList>& curr_ap,
103            lldb::StackFrameListSP& prev_sp);
104
105     void
106     GetFramesUpTo (uint32_t end_idx);
107     
108     bool
109     GetAllFramesFetched()
110     {
111         return m_concrete_frames_fetched == UINT32_MAX;
112     }
113     
114     void
115     SetAllFramesFetched ()
116     {
117         m_concrete_frames_fetched = UINT32_MAX;
118     }
119     
120     bool
121     DecrementCurrentInlinedDepth ();
122     
123     void
124     ResetCurrentInlinedDepth();
125
126     uint32_t
127     GetCurrentInlinedDepth ();
128     
129     void
130     SetCurrentInlinedDepth (uint32_t new_depth);
131     
132     //------------------------------------------------------------------
133     // Classes that inherit from StackFrameList can see and modify these
134     //------------------------------------------------------------------
135     typedef std::vector<lldb::StackFrameSP> collection;
136     typedef collection::iterator iterator;
137     typedef collection::const_iterator const_iterator;
138
139     Thread &m_thread;
140     lldb::StackFrameListSP m_prev_frames_sp;
141     mutable Mutex m_mutex;
142     collection m_frames;
143     uint32_t m_selected_frame_idx;
144     uint32_t m_concrete_frames_fetched;
145     uint32_t m_current_inlined_depth;
146     lldb::addr_t m_current_inlined_pc;
147     bool m_show_inlined_frames;
148
149 private:
150     //------------------------------------------------------------------
151     // For StackFrameList only
152     //------------------------------------------------------------------
153     DISALLOW_COPY_AND_ASSIGN (StackFrameList);
154 };
155
156 } // namespace lldb_private
157
158 #endif  // liblldb_StackFrameList_h_