StackFrame.h revision b04e7a805310f2f2cc77947a8b263de9061617ae
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 // lldb::ExecutionContextScope pure virtual functions 101 //------------------------------------------------------------------ 102 virtual Target * 103 CalculateTarget (); 104 105 virtual Process * 106 CalculateProcess (); 107 108 virtual Thread * 109 CalculateThread (); 110 111 virtual StackFrame * 112 CalculateStackFrame (); 113 114 virtual void 115 Calculate (ExecutionContext &exe_ctx); 116 117protected: 118 //------------------------------------------------------------------ 119 // Classes that inherit from StackFrame can see and modify these 120 //------------------------------------------------------------------ 121 122 123private: 124 //------------------------------------------------------------------ 125 // For StackFrame only 126 //------------------------------------------------------------------ 127 Thread &m_thread; 128 uint32_t m_frame_index; 129 uint32_t m_concrete_frame_index; 130 lldb::RegisterContextSP m_reg_context_sp; 131 StackID m_id; 132 Address m_pc; // PC as a section/offset address 133 SymbolContext m_sc; 134 Flags m_flags; 135 Scalar m_frame_base; 136 Error m_frame_base_error; 137 lldb::VariableListSP m_variable_list_sp; 138 ValueObjectList m_value_object_list; 139 StreamString m_disassembly; 140 DISALLOW_COPY_AND_ASSIGN (StackFrame); 141}; 142 143} // namespace lldb_private 144 145#endif // liblldb_StackFrame_h_ 146