1//===-- ValueObjectRegister.h -----------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_CORE_VALUEOBJECTREGISTER_H
10#define LLDB_CORE_VALUEOBJECTREGISTER_H
11
12#include "lldb/Core/ValueObject.h"
13#include "lldb/Symbol/CompilerType.h"
14#include "lldb/Utility/ConstString.h"
15#include "lldb/Utility/RegisterValue.h"
16#include "lldb/lldb-defines.h"
17#include "lldb/lldb-enumerations.h"
18#include "lldb/lldb-forward.h"
19#include "lldb/lldb-private-types.h"
20
21#include <cstddef>
22#include <cstdint>
23#include <optional>
24
25namespace lldb_private {
26class DataExtractor;
27class Status;
28class ExecutionContextScope;
29class Scalar;
30class Stream;
31
32class ValueObjectRegisterSet : public ValueObject {
33public:
34 ~ValueObjectRegisterSet() override;
35
36 static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
37 lldb::RegisterContextSP &reg_ctx_sp,
38 uint32_t set_idx);
39
40 std::optional<uint64_t> GetByteSize() override;
41
42 lldb::ValueType GetValueType() const override {
43 return lldb::eValueTypeRegisterSet;
44 }
45
46 ConstString GetTypeName() override;
47
48 ConstString GetQualifiedTypeName() override;
49
50 size_t CalculateNumChildren(uint32_t max) override;
51
52 ValueObject *CreateChildAtIndex(size_t idx, bool synthetic_array_member,
53 int32_t synthetic_index) override;
54
55 lldb::ValueObjectSP GetChildMemberWithName(llvm::StringRef name,
56 bool can_create = true) override;
57
58 size_t GetIndexOfChildWithName(llvm::StringRef name) override;
59
60protected:
61 bool UpdateValue() override;
62
63 CompilerType GetCompilerTypeImpl() override;
64
65 lldb::RegisterContextSP m_reg_ctx_sp;
66 const RegisterSet *m_reg_set;
67 uint32_t m_reg_set_idx;
68
69private:
70 friend class ValueObjectRegisterContext;
71
72 ValueObjectRegisterSet(ExecutionContextScope *exe_scope,
73 ValueObjectManager &manager,
74 lldb::RegisterContextSP &reg_ctx_sp, uint32_t set_idx);
75
76 // For ValueObject only
77 ValueObjectRegisterSet(const ValueObjectRegisterSet &) = delete;
78 const ValueObjectRegisterSet &
79 operator=(const ValueObjectRegisterSet &) = delete;
80};
81
82class ValueObjectRegister : public ValueObject {
83public:
84 ~ValueObjectRegister() override;
85
86 static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
87 lldb::RegisterContextSP &reg_ctx_sp,
88 const RegisterInfo *reg_info);
89
90 std::optional<uint64_t> GetByteSize() override;
91
92 lldb::ValueType GetValueType() const override {
93 return lldb::eValueTypeRegister;
94 }
95
96 ConstString GetTypeName() override;
97
98 size_t CalculateNumChildren(uint32_t max) override;
99
100 bool SetValueFromCString(const char *value_str, Status &error) override;
101
102 bool SetData(DataExtractor &data, Status &error) override;
103
104 bool ResolveValue(Scalar &scalar) override;
105
106 void
107 GetExpressionPath(Stream &s,
108 GetExpressionPathFormat epformat =
109 eGetExpressionPathFormatDereferencePointers) override;
110
111protected:
112 bool UpdateValue() override;
113
114 CompilerType GetCompilerTypeImpl() override;
115
116 lldb::RegisterContextSP m_reg_ctx_sp;
117 RegisterInfo m_reg_info;
118 RegisterValue m_reg_value;
119 ConstString m_type_name;
120 CompilerType m_compiler_type;
121
122private:
123 void ConstructObject(const RegisterInfo *reg_info);
124
125 friend class ValueObjectRegisterSet;
126
127 ValueObjectRegister(ValueObject &parent, lldb::RegisterContextSP &reg_ctx_sp,
128 const RegisterInfo *reg_info);
129 ValueObjectRegister(ExecutionContextScope *exe_scope,
130 ValueObjectManager &manager,
131 lldb::RegisterContextSP &reg_ctx_sp,
132 const RegisterInfo *reg_info);
133
134 // For ValueObject only
135 ValueObjectRegister(const ValueObjectRegister &) = delete;
136 const ValueObjectRegister &operator=(const ValueObjectRegister &) = delete;
137};
138
139} // namespace lldb_private
140
141#endif // LLDB_CORE_VALUEOBJECTREGISTER_H
142

source code of lldb/include/lldb/Core/ValueObjectRegister.h