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