9#ifndef LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_OBJC_APPLEOBJCRUNTIME_APPLEOBJCCLASSDESCRIPTORV2_H
10#define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_OBJC_APPLEOBJCRUNTIME_APPLEOBJCCLASSDESCRIPTORV2_H
42 uint64_t *value_bits =
nullptr,
43 uint64_t *payload =
nullptr)
override {
48 int64_t *value_bits =
nullptr,
49 uint64_t *payload =
nullptr)
override {
59 std::function<
bool(
const char *,
const char *)>
const
60 &instance_method_func,
61 std::function<
bool(
const char *,
const char *)>
const &class_method_func,
62 std::function<
bool(
const char *,
const char *,
lldb::addr_t,
63 uint64_t)>
const &ivar_func)
const override;
152 std::optional<method_list_t>
176 lldb::addr_t relative_selector_base_addr,
bool is_small,
177 bool has_direct_sel);
252 std::unique_ptr<objc_class_t> &objc_class)
const;
255 std::unique_ptr<class_ro_t> &class_ro,
256 std::unique_ptr<class_rw_t> &class_rw)
const;
259 &instance_method_func,
260 method_list_t &method_list)
const;
263 std::function<
bool(
const char *,
const char *)>
const
264 &instance_method_func,
275 mutable std::map<uint16_t, std::vector<method_list_t>>
297 uint64_t u_payload, int64_t s_payload) {
298 if (!actual_class_sp) {
302 m_name = actual_class_sp->GetClassName();
342 uint64_t *value_bits =
nullptr,
343 uint64_t *payload =
nullptr)
override {
354 int64_t *value_bits =
nullptr,
355 uint64_t *payload =
nullptr)
override {
bool GetTaggedPointerInfoSigned(uint64_t *info_bits=nullptr, int64_t *value_bits=nullptr, uint64_t *payload=nullptr) override
~ClassDescriptorV2Tagged() override=default
ObjCLanguageRuntime::ClassDescriptorSP GetSuperclass() override
ObjCLanguageRuntime::ObjCISA GetISA() override
int64_t m_value_bits_signed
virtual uint64_t GetValueBits()
ClassDescriptorV2Tagged(ConstString class_name, uint64_t payload)
virtual uint64_t GetInfoBits()
virtual uint64_t GetPayload()
bool GetTaggedPointerInfo(uint64_t *info_bits=nullptr, uint64_t *value_bits=nullptr, uint64_t *payload=nullptr) override
There are two routines in the ObjC runtime that tagged pointer clients can call to get the value from...
uint64_t GetInstanceSize() override
ObjCLanguageRuntime::ClassDescriptorSP GetMetaclass() const override
ClassDescriptorV2Tagged(ObjCLanguageRuntime::ClassDescriptorSP actual_class_sp, uint64_t u_payload, int64_t s_payload)
ConstString GetClassName() override
virtual int64_t GetValueBitsSigned()
ObjCLanguageRuntime::ClassDescriptorSP GetSuperclass() override
iVarsStorage m_ivars_storage
lldb::addr_t m_objc_class_ptr
AppleObjCRuntimeV2 & m_runtime
ObjCLanguageRuntime::ObjCISA GetISA() override
bool Describe(std::function< void(ObjCLanguageRuntime::ObjCISA)> const &superclass_func, std::function< bool(const char *, const char *)> const &instance_method_func, std::function< bool(const char *, const char *)> const &class_method_func, std::function< bool(const char *, const char *, lldb::addr_t, uint64_t)> const &ivar_func) const override
bool Read_class_row(Process *process, const objc_class_t &objc_class, std::unique_ptr< class_ro_t > &class_ro, std::unique_ptr< class_rw_t > &class_rw) const
~ClassDescriptorV2() override=default
bool ProcessRelativeMethodLists(std::function< bool(const char *, const char *)> const &instance_method_func, lldb::addr_t relative_method_list_ptr) const
ClassDescriptorV2(AppleObjCRuntimeV2 &runtime, ObjCLanguageRuntime::ObjCISA isa, const char *name)
ConstString GetClassName() override
static const uint32_t RW_REALIZED
bool ProcessMethodList(std::function< bool(const char *, const char *)> const &instance_method_func, method_list_t &method_list) const
bool Read_objc_class(Process *process, std::unique_ptr< objc_class_t > &objc_class) const
iVarDescriptor GetIVarAtIndex(size_t idx) override
void GetIVarInformation()
uint64_t GetInstanceSize() override
bool GetTaggedPointerInfoSigned(uint64_t *info_bits=nullptr, int64_t *value_bits=nullptr, uint64_t *payload=nullptr) override
std::optional< uint64_t > m_last_version_updated
std::map< uint16_t, std::vector< method_list_t > > m_image_to_method_lists
ObjCLanguageRuntime::ClassDescriptorSP GetMetaclass() const override
bool GetTaggedPointerInfo(uint64_t *info_bits=nullptr, uint64_t *value_bits=nullptr, uint64_t *payload=nullptr) override
There are two routines in the ObjC runtime that tagged pointer clients can call to get the value from...
lldb::LanguageType GetImplementationLanguage() const override
Determine whether this class is implemented in Swift.
size_t GetNumIVars() override
std::optional< method_list_t > GetMethodList(Process *process, lldb::addr_t method_list_ptr) const
A uniqued constant string class.
std::shared_ptr< ClassDescriptor > ClassDescriptorSP
A plug-in interface definition class for debugging a process.
uint32_t GetAddressByteSize() const
A class that represents a running process on the host machine.
LanguageType
Programming language type.
lldb::addr_t m_weakIvarLayout_ptr
lldb::addr_t m_ivarLayout_ptr
bool Read(Process *process, lldb::addr_t addr)
lldb::addr_t m_baseProtocols_ptr
lldb::addr_t m_baseMethods_ptr
lldb::addr_t m_baseProperties_ptr
lldb::addr_t m_properties_ptr
ObjCLanguageRuntime::ObjCISA m_nextSiblingClass
lldb::addr_t m_protocols_ptr
ObjCLanguageRuntime::ObjCISA m_firstSubclass
lldb::addr_t m_method_lists_ptr
lldb::addr_t m_method_list_ptr
bool Read(Process *process, lldb::addr_t addr)
bool Read(Process *process, lldb::addr_t addr)
static size_t GetSize(Process *process)
bool Read(Process *process, lldb::addr_t addr)
lldb::addr_t m_offset_ptr
bool m_has_direct_selector
bool Read(Process *process, lldb::addr_t addr)
bool Read(Process *process, lldb::addr_t addr, lldb::addr_t relative_selector_base_addr, bool is_small, bool has_direct_sel)
static size_t GetSize(Process *process, bool is_small)
bool Read(Process *process, lldb::addr_t addr)
lldb::addr_t m_vtable_ptr
ObjCLanguageRuntime::ObjCISA m_isa
ObjCLanguageRuntime::ObjCISA m_superclass
bool Read(Process *process, lldb::addr_t addr)
bool Read(Process *process, lldb::addr_t addr)