[Lldb-commits] [lldb] [LLDB][Part 1] Support enabling/disabling InstrumentationRuntime plugins in an debug session (PR #193328)

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Wed Apr 29 15:52:44 PDT 2026


================
@@ -76,11 +78,57 @@ struct RegisteredPluginInfo {
 // The plugin namespace here is used so we can operate on all the plugins
 // of a given type so it is easy to enable or disable them as a group.
 using GetPluginInfo = std::function<llvm::SmallVector<RegisteredPluginInfo>()>;
-using SetPluginEnabled = std::function<bool(llvm::StringRef, bool)>;
-struct PluginNamespace {
+using SetPluginEnabledGlobalDomain = std::function<bool(llvm::StringRef, bool)>;
+using SetPluginEnabledAllDomains = std::function<llvm::Error(
+    llvm::StringRef, bool, Debugger &, lldb::PluginDomainKind)>;
+class PluginNamespace {
+public:
+  static constexpr uint8_t kAllDomains = lldb::ePluginDomainKindGlobal |
+                                         lldb::ePluginDomainKindDebugger |
+                                         lldb::ePluginDomainKindTarget;
+
+  /// Plugin that only supports enable/disable in the global domain
+  PluginNamespace(llvm::StringRef name, GetPluginInfo get_info,
+                  SetPluginEnabledGlobalDomain set_enabled)
+      : name(name), get_info(get_info),
+        supported_domains(lldb::ePluginDomainKindGlobal),
+        set_enabled_fn(set_enabled) {}
+
+  /// Plugin that supports enable/disable in all domains.
+  PluginNamespace(llvm::StringRef name, GetPluginInfo get_info,
+                  SetPluginEnabledAllDomains set_enabled)
+      : name(name), get_info(get_info), supported_domains(kAllDomains),
+        set_enabled_fn(set_enabled) {}
+
+  std::optional<SetPluginEnabledGlobalDomain> GetSetEnabledGlobalFn() const {
+    if (SupportsOnlyDomain(lldb::ePluginDomainKindGlobal))
+      return std::get<SetPluginEnabledGlobalDomain>(set_enabled_fn);
+    return std::nullopt;
+  }
+
+  std::optional<SetPluginEnabledAllDomains> GetSetEnabledAllDomainsFn() const {
+    if (supported_domains == kAllDomains)
+      return std::get<SetPluginEnabledAllDomains>(set_enabled_fn);
+    return std::nullopt;
+  }
+
+  bool SupportsDomain(lldb::PluginDomainKind domain) const {
+    assert(llvm::has_single_bit((uint8_t)domain));
----------------
JDevlieghere wrote:

Let's replace the C-style casts with `static_cast` (there's a few more instances in this PR).
```suggestion
    assert(llvm::has_single_bit(static_cast<uint8_t>(domain)));
```

https://github.com/llvm/llvm-project/pull/193328


More information about the lldb-commits mailing list