Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:42:59

0001 //===-- ValueObjectRegister.h -----------------------------------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
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 &reg_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 &reg_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   // For ValueObject only
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 &reg_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 &reg_ctx_sp,
0130                       const RegisterInfo *reg_info);
0131   ValueObjectRegister(ExecutionContextScope *exe_scope,
0132                       ValueObjectManager &manager,
0133                       lldb::RegisterContextSP &reg_ctx_sp,
0134                       const RegisterInfo *reg_info);
0135 
0136   // For ValueObject only
0137   ValueObjectRegister(const ValueObjectRegister &) = delete;
0138   const ValueObjectRegister &operator=(const ValueObjectRegister &) = delete;
0139 };
0140 
0141 } // namespace lldb_private
0142 
0143 #endif // LLDB_VALUEOBJECT_VALUEOBJECTREGISTER_H