StackFrame.h revision 32f4fdde0882395aec2ea56d1adcce78759105b7
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, lldb::user_id_t concrete_frame_idx, Thread &thread, lldb::addr_t cfa, uint32_t inline_height, lldb::addr_t pc, const SymbolContext *sc_ptr); 37 StackFrame (lldb::user_id_t frame_idx, lldb::user_id_t concrete_frame_idx, Thread &thread, const lldb::RegisterContextSP ®_context_sp, lldb::addr_t cfa, uint32_t inline_height, lldb::addr_t pc, const SymbolContext *sc_ptr); 38 StackFrame (lldb::user_id_t frame_idx, lldb::user_id_t concrete_frame_idx, Thread &thread, const lldb::RegisterContextSP ®_context_sp, lldb::addr_t cfa, uint32_t inline_height, const Address& pc, const SymbolContext *sc_ptr); 39 virtual ~StackFrame (); 40 41 Thread & 42 GetThread() 43 { return m_thread; } 44 45 const Thread & 46 GetThread() const 47 { return m_thread; } 48 49 StackID& 50 GetStackID(); 51 52 Address& 53 GetFrameCodeAddress(); 54 55 void 56 ChangePC (lldb::addr_t pc); 57 58 const SymbolContext& 59 GetSymbolContext (uint32_t resolve_scope); 60 61 bool 62 GetFrameBaseValue(Scalar &value, Error *error_ptr); 63 64 RegisterContext * 65 GetRegisterContext (); 66 67 const lldb::RegisterContextSP & 68 GetRegisterContextSP () const 69 { 70 return m_reg_context_sp; 71 } 72 73 VariableList * 74 GetVariableList (); 75 76 bool 77 HasDebugInformation (); 78 79 ValueObjectList & 80 GetValueObjectList(); 81 82 const char * 83 Disassemble (); 84 85 void 86 Dump (Stream *strm, bool show_frame_index); 87 88 uint32_t 89 GetFrameIndex () const 90 { 91 return m_frame_index; 92 } 93 94 uint32_t 95 GetConcreteFrameIndex () const 96 { 97 return m_concrete_frame_index; 98 } 99 100 bool 101 IsConcrete () const; 102 103 //------------------------------------------------------------------ 104 // lldb::ExecutionContextScope pure virtual functions 105 //------------------------------------------------------------------ 106 virtual Target * 107 CalculateTarget (); 108 109 virtual Process * 110 CalculateProcess (); 111 112 virtual Thread * 113 CalculateThread (); 114 115 virtual StackFrame * 116 CalculateStackFrame (); 117 118 virtual void 119 Calculate (ExecutionContext &exe_ctx); 120 121protected: 122 //------------------------------------------------------------------ 123 // Classes that inherit from StackFrame can see and modify these 124 //------------------------------------------------------------------ 125 126 127private: 128 //------------------------------------------------------------------ 129 // For StackFrame only 130 //------------------------------------------------------------------ 131 Thread &m_thread; 132 uint32_t m_frame_index; 133 uint32_t m_concrete_frame_index; 134 lldb::RegisterContextSP m_reg_context_sp; 135 StackID m_id; 136 Address m_pc; // PC as a section/offset address 137 SymbolContext m_sc; 138 Flags m_flags; 139 Scalar m_frame_base; 140 Error m_frame_base_error; 141 lldb::VariableListSP m_variable_list_sp; 142 ValueObjectList m_value_object_list; 143 StreamString m_disassembly; 144 DISALLOW_COPY_AND_ASSIGN (StackFrame); 145}; 146 147} // namespace lldb_private 148 149#endif // liblldb_StackFrame_h_ 150