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