1 //===-- ValueObjectRegister.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_ValueObjectRegister_h_ 11 #define liblldb_ValueObjectRegister_h_ 12 13 // C Includes 14 // C++ Includes 15 // Other libraries and framework includes 16 // Project includes 17 #include "lldb/lldb-private.h" 18 #include "lldb/Core/RegisterValue.h" 19 #include "lldb/Core/ValueObject.h" 20 21 namespace lldb_private { 22 23 //---------------------------------------------------------------------- 24 // A ValueObject that contains a root variable that may or may not 25 // have children. 26 //---------------------------------------------------------------------- 27 class ValueObjectRegisterContext : public ValueObject 28 { 29 public: 30 31 virtual 32 ~ValueObjectRegisterContext(); 33 34 virtual uint64_t 35 GetByteSize(); 36 37 virtual lldb::ValueType 38 GetValueType () const 39 { 40 return lldb::eValueTypeRegisterSet; 41 } 42 43 virtual ConstString 44 GetTypeName(); 45 46 virtual ConstString 47 GetQualifiedTypeName(); 48 49 virtual size_t 50 CalculateNumChildren(); 51 52 virtual ValueObject * 53 CreateChildAtIndex (size_t idx, bool synthetic_array_member, int32_t synthetic_index); 54 55 protected: 56 virtual bool 57 UpdateValue (); 58 59 virtual ClangASTType 60 GetClangTypeImpl (); 61 62 lldb::RegisterContextSP m_reg_ctx_sp; 63 64 private: 65 ValueObjectRegisterContext (ValueObject &parent, lldb::RegisterContextSP ®_ctx_sp); 66 //------------------------------------------------------------------ 67 // For ValueObject only 68 //------------------------------------------------------------------ 69 DISALLOW_COPY_AND_ASSIGN (ValueObjectRegisterContext); 70 }; 71 72 class ValueObjectRegisterSet : public ValueObject 73 { 74 public: 75 static lldb::ValueObjectSP 76 Create (ExecutionContextScope *exe_scope, lldb::RegisterContextSP ®_ctx_sp, uint32_t set_idx); 77 78 virtual 79 ~ValueObjectRegisterSet(); 80 81 virtual uint64_t 82 GetByteSize(); 83 84 virtual lldb::ValueType 85 GetValueType () const 86 { 87 return lldb::eValueTypeRegisterSet; 88 } 89 90 virtual ConstString 91 GetTypeName(); 92 93 virtual ConstString 94 GetQualifiedTypeName(); 95 96 virtual size_t 97 CalculateNumChildren(); 98 99 virtual ValueObject * 100 CreateChildAtIndex (size_t idx, bool synthetic_array_member, int32_t synthetic_index); 101 102 virtual lldb::ValueObjectSP 103 GetChildMemberWithName (const ConstString &name, bool can_create); 104 105 virtual size_t 106 GetIndexOfChildWithName (const ConstString &name); 107 108 109 protected: 110 virtual bool 111 UpdateValue (); 112 113 virtual ClangASTType 114 GetClangTypeImpl (); 115 116 lldb::RegisterContextSP m_reg_ctx_sp; 117 const RegisterSet *m_reg_set; 118 uint32_t m_reg_set_idx; 119 120 private: 121 friend class ValueObjectRegisterContext; 122 ValueObjectRegisterSet (ExecutionContextScope *exe_scope, lldb::RegisterContextSP ®_ctx_sp, uint32_t set_idx); 123 124 //------------------------------------------------------------------ 125 // For ValueObject only 126 //------------------------------------------------------------------ 127 DISALLOW_COPY_AND_ASSIGN (ValueObjectRegisterSet); 128 }; 129 130 class ValueObjectRegister : public ValueObject 131 { 132 public: 133 static lldb::ValueObjectSP 134 Create (ExecutionContextScope *exe_scope, lldb::RegisterContextSP ®_ctx_sp, uint32_t reg_num); 135 136 virtual 137 ~ValueObjectRegister(); 138 139 virtual uint64_t 140 GetByteSize(); 141 142 virtual lldb::ValueType 143 GetValueType () const 144 { 145 return lldb::eValueTypeRegister; 146 } 147 148 virtual ConstString 149 GetTypeName(); 150 151 virtual size_t 152 CalculateNumChildren(); 153 154 virtual bool 155 SetValueFromCString (const char *value_str, Error& error); 156 157 virtual bool 158 SetData (DataExtractor &data, Error &error); 159 160 virtual bool 161 ResolveValue (Scalar &scalar); 162 163 virtual void 164 GetExpressionPath (Stream &s, bool qualify_cxx_base_classes, GetExpressionPathFormat epformat = eGetExpressionPathFormatDereferencePointers); 165 166 protected: 167 virtual bool 168 UpdateValue (); 169 170 virtual ClangASTType 171 GetClangTypeImpl (); 172 173 lldb::RegisterContextSP m_reg_ctx_sp; 174 RegisterInfo m_reg_info; 175 RegisterValue m_reg_value; 176 ConstString m_type_name; 177 ClangASTType m_clang_type; 178 179 private: 180 void 181 ConstructObject (uint32_t reg_num); 182 183 friend class ValueObjectRegisterSet; 184 ValueObjectRegister (ValueObject &parent, lldb::RegisterContextSP ®_ctx_sp, uint32_t reg_num); 185 ValueObjectRegister (ExecutionContextScope *exe_scope, lldb::RegisterContextSP ®_ctx_sp, uint32_t reg_num); 186 187 //------------------------------------------------------------------ 188 // For ValueObject only 189 //------------------------------------------------------------------ 190 DISALLOW_COPY_AND_ASSIGN (ValueObjectRegister); 191 }; 192 193 } // namespace lldb_private 194 195 #endif // liblldb_ValueObjectRegister_h_ 196