]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/Target/StackFrame.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / Target / StackFrame.h
1 //===-- StackFrame.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_StackFrame_h_
11 #define liblldb_StackFrame_h_
12
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 // Project includes
17 #include "lldb/Core/Error.h"
18 #include "lldb/Core/Flags.h"
19 #include "lldb/Core/Scalar.h"
20 #include "lldb/Core/StreamString.h"
21 #include "lldb/Core/UserID.h"
22 #include "lldb/Core/ValueObjectList.h"
23 #include "lldb/Symbol/SymbolContext.h"
24 #include "lldb/Target/ExecutionContextScope.h"
25 #include "lldb/Target/StackID.h"
26
27 namespace lldb_private {
28
29 class StackFrame :
30     public std::enable_shared_from_this<StackFrame>,
31     public ExecutionContextScope
32 {
33 public:
34     enum ExpressionPathOption
35     {
36         eExpressionPathOptionCheckPtrVsMember       = (1u << 0),
37         eExpressionPathOptionsNoFragileObjcIvar     = (1u << 1),
38         eExpressionPathOptionsNoSyntheticChildren   = (1u << 2),
39         eExpressionPathOptionsNoSyntheticArrayRange = (1u << 3),
40         eExpressionPathOptionsAllowDirectIVarAccess = (1u << 4)
41     };
42     //------------------------------------------------------------------
43     // Constructors and Destructors
44     //------------------------------------------------------------------
45     StackFrame (const lldb::ThreadSP &thread_sp,
46                 lldb::user_id_t frame_idx, 
47                 lldb::user_id_t concrete_frame_idx, 
48                 lldb::addr_t cfa, 
49                 lldb::addr_t pc, 
50                 const SymbolContext *sc_ptr);
51
52     StackFrame (const lldb::ThreadSP &thread_sp,
53                 lldb::user_id_t frame_idx, 
54                 lldb::user_id_t concrete_frame_idx, 
55                 const lldb::RegisterContextSP &reg_context_sp, 
56                 lldb::addr_t cfa, 
57                 lldb::addr_t pc, 
58                 const SymbolContext *sc_ptr);
59     
60     StackFrame (const lldb::ThreadSP &thread_sp,
61                 lldb::user_id_t frame_idx, 
62                 lldb::user_id_t concrete_frame_idx, 
63                 const lldb::RegisterContextSP &reg_context_sp, 
64                 lldb::addr_t cfa, 
65                 const Address& pc, 
66                 const SymbolContext *sc_ptr);
67
68     virtual ~StackFrame ();
69
70     lldb::ThreadSP
71     GetThread () const
72     {
73         return m_thread_wp.lock();
74     }
75
76     StackID&
77     GetStackID();
78
79     const Address&
80     GetFrameCodeAddress();
81     
82     void
83     ChangePC (lldb::addr_t pc);
84
85     const SymbolContext&
86     GetSymbolContext (uint32_t resolve_scope);
87
88     bool
89     GetFrameBaseValue(Scalar &value, Error *error_ptr);
90
91     Block *
92     GetFrameBlock ();
93
94     lldb::RegisterContextSP
95     GetRegisterContext ();
96
97     const lldb::RegisterContextSP &
98     GetRegisterContextSP () const
99     {
100         return m_reg_context_sp;
101     }
102
103     VariableList *
104     GetVariableList (bool get_file_globals);
105
106     lldb::VariableListSP
107     GetInScopeVariableList (bool get_file_globals);
108
109     // See ExpressionPathOption enumeration for "options" values
110     lldb::ValueObjectSP
111     GetValueForVariableExpressionPath (const char *var_expr, 
112                                        lldb::DynamicValueType use_dynamic, 
113                                        uint32_t options,
114                                        lldb::VariableSP &var_sp,
115                                        Error &error);
116
117     bool
118     HasDebugInformation ();
119
120     const char *
121     Disassemble ();
122
123     void
124     DumpUsingSettingsFormat (Stream *strm);
125     
126     void
127     Dump (Stream *strm, bool show_frame_index, bool show_fullpaths);
128     
129     bool
130     IsInlined ();
131
132     uint32_t
133     GetFrameIndex () const;
134
135     uint32_t
136     GetConcreteFrameIndex () const
137     {
138         return m_concrete_frame_index;
139     }
140     
141     lldb::ValueObjectSP
142     GetValueObjectForFrameVariable (const lldb::VariableSP &variable_sp, lldb::DynamicValueType use_dynamic);
143
144     lldb::ValueObjectSP
145     TrackGlobalVariable (const lldb::VariableSP &variable_sp, lldb::DynamicValueType use_dynamic);
146     
147     //------------------------------------------------------------------
148     // lldb::ExecutionContextScope pure virtual functions
149     //------------------------------------------------------------------
150     virtual lldb::TargetSP
151     CalculateTarget ();
152     
153     virtual lldb::ProcessSP
154     CalculateProcess ();
155     
156     virtual lldb::ThreadSP
157     CalculateThread ();
158     
159     virtual lldb::StackFrameSP
160     CalculateStackFrame ();
161
162     virtual void
163     CalculateExecutionContext (ExecutionContext &exe_ctx);
164     
165     bool
166     GetStatus (Stream &strm,
167                bool show_frame_info,
168                bool show_source);
169     
170 protected:
171     friend class StackFrameList;
172
173     void
174     SetSymbolContextScope (SymbolContextScope *symbol_scope);
175
176     void
177     UpdateCurrentFrameFromPreviousFrame (StackFrame &prev_frame);
178     
179     void
180     UpdatePreviousFrameFromCurrentFrame (StackFrame &curr_frame);
181
182     bool
183     HasCachedData () const;
184     
185 private:
186     //------------------------------------------------------------------
187     // For StackFrame only
188     //------------------------------------------------------------------
189     lldb::ThreadWP m_thread_wp;
190     uint32_t m_frame_index;
191     uint32_t m_concrete_frame_index;
192     lldb::RegisterContextSP m_reg_context_sp;
193     StackID m_id;
194     Address m_frame_code_addr;   // The frame code address (might not be the same as the actual PC for inlined frames) as a section/offset address
195     SymbolContext m_sc;
196     Flags m_flags;
197     Scalar m_frame_base;
198     Error m_frame_base_error;
199     lldb::VariableListSP m_variable_list_sp;
200     ValueObjectList m_variable_list_value_objects;  // Value objects for each variable in m_variable_list_sp
201     StreamString m_disassembly;
202     DISALLOW_COPY_AND_ASSIGN (StackFrame);
203 };
204
205 } // namespace lldb_private
206
207 #endif  // liblldb_StackFrame_h_