LLDB mainline
AppleObjCRuntimeV1.h
Go to the documentation of this file.
1//===-- AppleObjCRuntimeV1.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_SOURCE_PLUGINS_LANGUAGERUNTIME_OBJC_APPLEOBJCRUNTIME_APPLEOBJCRUNTIMEV1_H
10#define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_OBJC_APPLEOBJCRUNTIME_APPLEOBJCRUNTIMEV1_H
11
12#include "AppleObjCRuntime.h"
13#include "lldb/lldb-private.h"
14
16
17namespace lldb_private {
18
20public:
21 ~AppleObjCRuntimeV1() override = default;
22
23 // Static Functions
24 static void Initialize();
25
26 static void Terminate();
27
29 CreateInstance(Process *process, lldb::LanguageType language);
30
31 static llvm::StringRef GetPluginNameStatic() { return "apple-objc-v1"; }
32
33 static char ID;
34
35 bool isA(const void *ClassID) const override {
36 return ClassID == &ID || AppleObjCRuntime::isA(ClassID);
37 }
38
39 static bool classof(const LanguageRuntime *runtime) {
40 return runtime->isA(&ID);
41 }
42
44
46 public:
47 ClassDescriptorV1(ValueObject &isa_pointer);
48 ClassDescriptorV1(ObjCISA isa, lldb::ProcessSP process_sp);
49
50 ~ClassDescriptorV1() override = default;
51
52 ConstString GetClassName() override { return m_name; }
53
55
56 ClassDescriptorSP GetMetaclass() const override;
57
58 bool IsValid() override { return m_valid; }
59
60 // v1 does not support tagged pointers
61 bool GetTaggedPointerInfo(uint64_t *info_bits = nullptr,
62 uint64_t *value_bits = nullptr,
63 uint64_t *payload = nullptr) override {
64 return false;
65 }
66
67 bool GetTaggedPointerInfoSigned(uint64_t *info_bits = nullptr,
68 int64_t *value_bits = nullptr,
69 uint64_t *payload = nullptr) override {
70 return false;
71 }
72
73 uint64_t GetInstanceSize() override { return m_instance_size; }
74
75 ObjCISA GetISA() override { return m_isa; }
76
77 bool
78 Describe(std::function<void(ObjCLanguageRuntime::ObjCISA)> const
79 &superclass_func,
80 std::function<bool(const char *, const char *)> const
81 &instance_method_func,
82 std::function<bool(const char *, const char *)> const
83 &class_method_func,
84 std::function<bool(const char *, const char *, lldb::addr_t,
85 uint64_t)> const &ivar_func) const override;
86
87 protected:
88 void Initialize(ObjCISA isa, lldb::ProcessSP process_sp);
89
90 private:
94 bool m_valid;
95 lldb::ProcessWP m_process_wp;
97 };
98
99 // These are generic runtime functions:
101 lldb::DynamicValueType use_dynamic,
102 TypeAndOrName &class_type_or_name,
103 Address &address,
104 Value::ValueType &value_type) override;
105
106 llvm::Expected<std::unique_ptr<UtilityFunction>>
107 CreateObjectChecker(std::string, ExecutionContext &exe_ctx) override;
108
109 // PluginInterface protocol
110 llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
111
114 }
115
116 void UpdateISAToDescriptorMapIfNeeded() override;
117
118 DeclVendor *GetDeclVendor() override;
119
120protected:
121 lldb::BreakpointResolverSP
122 CreateExceptionResolver(const lldb::BreakpointSP &bkpt,
123 bool catch_bp, bool throw_bp) override;
124
126 public:
128
129 bool NeedsUpdate(uint32_t count, uint32_t num_buckets,
130 lldb::addr_t buckets_ptr) {
131 return m_count != count || m_num_buckets != num_buckets ||
132 m_buckets_ptr != buckets_ptr;
133 }
134
135 void UpdateSignature(uint32_t count, uint32_t num_buckets,
136 lldb::addr_t buckets_ptr) {
137 m_count = count;
138 m_num_buckets = num_buckets;
139 m_buckets_ptr = buckets_ptr;
140 }
141
142 protected:
146 };
147
149
152 std::unique_ptr<DeclVendor> m_decl_vendor_up;
153
154private:
155 AppleObjCRuntimeV1(Process *process);
156};
157
158} // namespace lldb_private
159
160#endif // LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_OBJC_APPLEOBJCRUNTIME_APPLEOBJCRUNTIMEV1_H
A section + offset based address class.
Definition: Address.h:59
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 GetTaggedPointerInfoSigned(uint64_t *info_bits=nullptr, int64_t *value_bits=nullptr, uint64_t *payload=nullptr) 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...
void UpdateSignature(uint32_t count, uint32_t num_buckets, lldb::addr_t buckets_ptr)
bool NeedsUpdate(uint32_t count, uint32_t num_buckets, lldb::addr_t buckets_ptr)
DeclVendor * GetDeclVendor() override
static bool classof(const LanguageRuntime *runtime)
~AppleObjCRuntimeV1() override=default
static llvm::StringRef GetPluginNameStatic()
bool isA(const void *ClassID) const override
std::unique_ptr< DeclVendor > m_decl_vendor_up
lldb::BreakpointResolverSP CreateExceptionResolver(const lldb::BreakpointSP &bkpt, bool catch_bp, bool throw_bp) override
bool GetDynamicTypeAndAddress(ValueObject &in_value, lldb::DynamicValueType use_dynamic, TypeAndOrName &class_type_or_name, Address &address, Value::ValueType &value_type) override
llvm::Expected< std::unique_ptr< UtilityFunction > > CreateObjectChecker(std::string, ExecutionContext &exe_ctx) override
static lldb_private::LanguageRuntime * CreateInstance(Process *process, lldb::LanguageType language)
ObjCRuntimeVersions GetRuntimeVersion() const override
llvm::StringRef GetPluginName() override
bool isA(const void *ClassID) const override
A uniqued constant string class.
Definition: ConstString.h:39
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
virtual bool isA(const void *ClassID) const
std::shared_ptr< ClassDescriptor > ClassDescriptorSP
A plug-in interface definition class for debugging a process.
Definition: Process.h:342
Sometimes you can find the name of the type corresponding to an object, but we don't have debug infor...
Definition: Type.h:410
ValueType
Type that describes Value::m_value.
Definition: Value.h:41
#define LLDB_INVALID_ADDRESS
Definition: lldb-defines.h:74
A class that represents a running process on the host machine.
LanguageType
Programming language type.
uint64_t addr_t
Definition: lldb-types.h:83