File indexing completed on 2026-05-10 08:42:59
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLDB_VALUEOBJECT_VALUEOBJECTREGISTER_H
0010 #define LLDB_VALUEOBJECT_VALUEOBJECTREGISTER_H
0011
0012 #include "lldb/Symbol/CompilerType.h"
0013 #include "lldb/Utility/ConstString.h"
0014 #include "lldb/Utility/RegisterValue.h"
0015 #include "lldb/ValueObject/ValueObject.h"
0016 #include "lldb/lldb-defines.h"
0017 #include "lldb/lldb-enumerations.h"
0018 #include "lldb/lldb-forward.h"
0019 #include "lldb/lldb-private-types.h"
0020
0021 #include <cstddef>
0022 #include <cstdint>
0023 #include <optional>
0024
0025 namespace lldb_private {
0026 class DataExtractor;
0027 class Status;
0028 class ExecutionContextScope;
0029 class Scalar;
0030 class Stream;
0031
0032 class ValueObjectRegisterSet : public ValueObject {
0033 public:
0034 ~ValueObjectRegisterSet() override;
0035
0036 static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
0037 lldb::RegisterContextSP ®_ctx_sp,
0038 uint32_t set_idx);
0039
0040 std::optional<uint64_t> GetByteSize() override;
0041
0042 lldb::ValueType GetValueType() const override {
0043 return lldb::eValueTypeRegisterSet;
0044 }
0045
0046 ConstString GetTypeName() override;
0047
0048 ConstString GetQualifiedTypeName() override;
0049
0050 llvm::Expected<uint32_t> CalculateNumChildren(uint32_t max) override;
0051
0052 lldb::ValueObjectSP GetChildMemberWithName(llvm::StringRef name,
0053 bool can_create = true) override;
0054
0055 size_t GetIndexOfChildWithName(llvm::StringRef name) override;
0056
0057 protected:
0058 bool UpdateValue() override;
0059
0060 CompilerType GetCompilerTypeImpl() override;
0061
0062 lldb::RegisterContextSP m_reg_ctx_sp;
0063 const RegisterSet *m_reg_set;
0064 uint32_t m_reg_set_idx;
0065
0066 private:
0067 friend class ValueObjectRegisterContext;
0068
0069 ValueObjectRegisterSet(ExecutionContextScope *exe_scope,
0070 ValueObjectManager &manager,
0071 lldb::RegisterContextSP ®_ctx_sp, uint32_t set_idx);
0072
0073 ValueObject *CreateChildAtIndex(size_t idx) override;
0074 ValueObject *CreateSyntheticArrayMember(size_t idx) override {
0075 return nullptr;
0076 }
0077
0078
0079 ValueObjectRegisterSet(const ValueObjectRegisterSet &) = delete;
0080 const ValueObjectRegisterSet &
0081 operator=(const ValueObjectRegisterSet &) = delete;
0082 };
0083
0084 class ValueObjectRegister : public ValueObject {
0085 public:
0086 ~ValueObjectRegister() override;
0087
0088 static lldb::ValueObjectSP Create(ExecutionContextScope *exe_scope,
0089 lldb::RegisterContextSP ®_ctx_sp,
0090 const RegisterInfo *reg_info);
0091
0092 std::optional<uint64_t> GetByteSize() override;
0093
0094 lldb::ValueType GetValueType() const override {
0095 return lldb::eValueTypeRegister;
0096 }
0097
0098 ConstString GetTypeName() override;
0099
0100 llvm::Expected<uint32_t> CalculateNumChildren(uint32_t max) override;
0101
0102 bool SetValueFromCString(const char *value_str, Status &error) override;
0103
0104 bool SetData(DataExtractor &data, Status &error) override;
0105
0106 bool ResolveValue(Scalar &scalar) override;
0107
0108 void
0109 GetExpressionPath(Stream &s,
0110 GetExpressionPathFormat epformat =
0111 eGetExpressionPathFormatDereferencePointers) override;
0112
0113 protected:
0114 bool UpdateValue() override;
0115
0116 CompilerType GetCompilerTypeImpl() override;
0117
0118 lldb::RegisterContextSP m_reg_ctx_sp;
0119 RegisterInfo m_reg_info;
0120 RegisterValue m_reg_value;
0121 ConstString m_type_name;
0122 CompilerType m_compiler_type;
0123
0124 private:
0125 void ConstructObject(const RegisterInfo *reg_info);
0126
0127 friend class ValueObjectRegisterSet;
0128
0129 ValueObjectRegister(ValueObject &parent, lldb::RegisterContextSP ®_ctx_sp,
0130 const RegisterInfo *reg_info);
0131 ValueObjectRegister(ExecutionContextScope *exe_scope,
0132 ValueObjectManager &manager,
0133 lldb::RegisterContextSP ®_ctx_sp,
0134 const RegisterInfo *reg_info);
0135
0136
0137 ValueObjectRegister(const ValueObjectRegister &) = delete;
0138 const ValueObjectRegister &operator=(const ValueObjectRegister &) = delete;
0139 };
0140
0141 }
0142
0143 #endif