xref: /trueos/contrib/llvm/tools/lldb/include/lldb/Core/ValueObjectRegister.h (revision 9394ef331eb7d0ba7f22583970cc84b62ad9f19a)
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
GetValueType()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 &reg_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 &reg_ctx_sp, uint32_t set_idx);
77 
78     virtual
79     ~ValueObjectRegisterSet();
80 
81     virtual uint64_t
82     GetByteSize();
83 
84     virtual lldb::ValueType
GetValueType()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 &reg_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 &reg_ctx_sp, uint32_t reg_num);
135 
136     virtual
137     ~ValueObjectRegister();
138 
139     virtual uint64_t
140     GetByteSize();
141 
142     virtual lldb::ValueType
GetValueType()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 &reg_ctx_sp, uint32_t reg_num);
185     ValueObjectRegister (ExecutionContextScope *exe_scope, lldb::RegisterContextSP &reg_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