Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Plugins/LanguageRuntime/ObjC/GNUstepObjCRuntime/GNUstepObjCRuntime.h
39690 views
1
//===-- GNUstepObjCRuntime.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_GNUSTEPOBJCRUNTIME_GNUSTEPOBJCRUNTIME_H
10
#define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_OBJC_GNUSTEPOBJCRUNTIME_GNUSTEPOBJCRUNTIME_H
11
12
#include "lldb/Target/LanguageRuntime.h"
13
#include "lldb/lldb-private.h"
14
15
#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h"
16
17
#include "llvm/ADT/StringRef.h"
18
#include "llvm/Support/Error.h"
19
20
#include <optional>
21
22
namespace lldb_private {
23
24
class GNUstepObjCRuntime : public lldb_private::ObjCLanguageRuntime {
25
public:
26
~GNUstepObjCRuntime() override;
27
28
//
29
// PluginManager, PluginInterface and LLVM RTTI implementation
30
//
31
32
static char ID;
33
34
static void Initialize();
35
36
static void Terminate();
37
38
static lldb_private::LanguageRuntime *
39
CreateInstance(Process *process, lldb::LanguageType language);
40
41
static llvm::StringRef GetPluginNameStatic() {
42
return "gnustep-objc-libobjc2";
43
}
44
45
llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
46
47
void ModulesDidLoad(const ModuleList &module_list) override;
48
49
bool isA(const void *ClassID) const override {
50
return ClassID == &ID || ObjCLanguageRuntime::isA(ClassID);
51
}
52
53
static bool classof(const LanguageRuntime *runtime) {
54
return runtime->isA(&ID);
55
}
56
57
//
58
// LanguageRuntime implementation
59
//
60
llvm::Error GetObjectDescription(Stream &str, Value &value,
61
ExecutionContextScope *exe_scope) override;
62
63
llvm::Error GetObjectDescription(Stream &str, ValueObject &object) override;
64
65
bool CouldHaveDynamicValue(ValueObject &in_value) override;
66
67
bool GetDynamicTypeAndAddress(ValueObject &in_value,
68
lldb::DynamicValueType use_dynamic,
69
TypeAndOrName &class_type_or_name,
70
Address &address,
71
Value::ValueType &value_type) override;
72
73
TypeAndOrName FixUpDynamicType(const TypeAndOrName &type_and_or_name,
74
ValueObject &static_value) override;
75
76
lldb::BreakpointResolverSP
77
CreateExceptionResolver(const lldb::BreakpointSP &bkpt, bool catch_bp,
78
bool throw_bp) override;
79
80
lldb::ThreadPlanSP GetStepThroughTrampolinePlan(Thread &thread,
81
bool stop_others) override;
82
83
//
84
// ObjCLanguageRuntime implementation
85
//
86
87
bool IsModuleObjCLibrary(const lldb::ModuleSP &module_sp) override;
88
89
bool ReadObjCLibrary(const lldb::ModuleSP &module_sp) override;
90
91
bool HasReadObjCLibrary() override { return m_objc_module_sp != nullptr; }
92
93
llvm::Expected<std::unique_ptr<UtilityFunction>>
94
CreateObjectChecker(std::string name, ExecutionContext &exe_ctx) override;
95
96
ObjCRuntimeVersions GetRuntimeVersion() const override {
97
return ObjCRuntimeVersions::eGNUstep_libobjc2;
98
}
99
100
void UpdateISAToDescriptorMapIfNeeded() override;
101
102
protected:
103
// Call CreateInstance instead.
104
GNUstepObjCRuntime(Process *process);
105
106
lldb::ModuleSP m_objc_module_sp;
107
};
108
109
} // namespace lldb_private
110
111
#endif // LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_OBJC_GNUSTEPOBJCRUNTIME_GNUSTEPOBJCRUNTIME_H
112
113