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