https://github.com/Nerixyz created 
https://github.com/llvm/llvm-project/pull/180232

This refactors the registration of properties for plugins, as suggested in 
https://github.com/llvm/llvm-project/pull/179524#pullrequestreview-3747402178 
(the main changes are in the second commit). I'm not sure if this should be 
both in the same PR or different ones.

It doesn't change how the non-plugin settings are registered (yet?).

>From d30a89d31e27698bbee73758ea9371b4700c222e Mon Sep 17 00:00:00 2001
From: Nerixyz <[email protected]>
Date: Fri, 30 Jan 2026 20:32:49 +0100
Subject: [PATCH 1/2] [LLDB] Set and verify paths of properties from tablegen

---
 lldb/include/lldb/Core/PropertiesBase.td      |  1 +
 .../lldb/Interpreter/OptionValueProperties.h  |  7 +++-
 lldb/include/lldb/Interpreter/Property.h      |  5 ++-
 lldb/source/Core/CoreProperties.td            |  6 +--
 lldb/source/Core/Debugger.cpp                 |  4 +-
 lldb/source/Core/ModuleList.cpp               |  2 +-
 lldb/source/Core/PluginManager.cpp            |  6 +++
 .../source/Interpreter/CommandInterpreter.cpp |  2 +-
 .../Interpreter/InterpreterProperties.td      |  2 +-
 .../Interpreter/OptionValueProperties.cpp     | 39 ++++++++++++++++++-
 .../DynamicLoaderDarwinKernel.cpp             |  2 +-
 .../DynamicLoaderDarwinKernelProperties.td    |  2 +-
 .../Plugins/JITLoader/GDB/JITLoaderGDB.cpp    |  2 +-
 .../JITLoader/GDB/JITLoaderGDBProperties.td   |  2 +-
 .../Language/CPlusPlus/CPlusPlusLanguage.cpp  |  2 +-
 .../CPlusPlus/LanguageCPlusPlusProperties.td  |  2 +-
 .../ObjectFile/PECOFF/ObjectFilePECOFF.cpp    |  2 +-
 .../PECOFF/ObjectFilePECOFFProperties.td      |  2 +-
 .../Platform/Android/PlatformAndroid.cpp      |  2 +-
 .../Android/PlatformAndroidProperties.td      |  2 +-
 .../Platform/MacOSX/PlatformDarwin.cpp        |  2 +-
 .../MacOSX/PlatformMacOSXProperties.td        |  4 +-
 .../Platform/QemuUser/PlatformQemuUser.cpp    |  2 +-
 .../QemuUser/PlatformQemuUserProperties.td    |  2 +-
 .../Platform/WebAssembly/PlatformWasm.cpp     |  2 +-
 .../WebAssembly/PlatformWasmProperties.td     |  2 +-
 .../Process/MacOSX-Kernel/ProcessKDP.cpp      |  2 +-
 .../MacOSX-Kernel/ProcessKDPProperties.td     |  2 +-
 .../Process/gdb-remote/ProcessGDBRemote.cpp   |  2 +-
 .../gdb-remote/ProcessGDBRemoteProperties.td  |  2 +-
 .../DarwinLog/StructuredDataDarwinLog.cpp     |  2 +-
 .../StructuredDataDarwinLogProperties.td      |  2 +-
 .../SymbolFile/DWARF/SymbolFileDWARF.cpp      |  2 +-
 .../DWARF/SymbolFileDWARFProperties.td        |  2 +-
 .../Plugins/SymbolFile/PDB/SymbolFilePDB.cpp  |  2 +-
 .../SymbolFile/PDB/SymbolFilePDBProperties.td |  2 +-
 .../Debuginfod/SymbolLocatorDebuginfod.cpp    |  2 +-
 .../SymbolLocatorDebuginfodProperties.td      |  2 +-
 .../Plugins/Trace/intel-pt/TraceIntelPT.cpp   |  2 +-
 .../Trace/intel-pt/TraceIntelPTProperties.td  |  2 +-
 lldb/source/Target/Language.cpp               |  2 +-
 lldb/source/Target/Platform.cpp               |  2 +-
 lldb/source/Target/Process.cpp                |  4 +-
 lldb/source/Target/Target.cpp                 |  4 +-
 lldb/source/Target/TargetProperties.td        | 14 +++----
 lldb/source/Target/Thread.cpp                 |  2 +-
 .../utils/TableGen/LLDBPropertyDefEmitter.cpp | 24 ++++++++++++
 47 files changed, 131 insertions(+), 57 deletions(-)

diff --git a/lldb/include/lldb/Core/PropertiesBase.td 
b/lldb/include/lldb/Core/PropertiesBase.td
index 1be3b908ed410..f7767db140423 100644
--- a/lldb/include/lldb/Core/PropertiesBase.td
+++ b/lldb/include/lldb/Core/PropertiesBase.td
@@ -3,6 +3,7 @@ class Property<string name, string type> {
   string Name = name;
   string Type = type;
   string Definition;
+  string Path;
 }
 
 // Sets the description for the property that should be displayed to the user.
diff --git a/lldb/include/lldb/Interpreter/OptionValueProperties.h 
b/lldb/include/lldb/Interpreter/OptionValueProperties.h
index 91a3955962372..21da8e584a7b4 100644
--- a/lldb/include/lldb/Interpreter/OptionValueProperties.h
+++ b/lldb/include/lldb/Interpreter/OptionValueProperties.h
@@ -60,7 +60,9 @@ class OptionValueProperties
   void Apropos(llvm::StringRef keyword,
                std::vector<const Property *> &matching_properties) const;
 
-  void Initialize(const PropertyDefinitions &setting_definitions);
+  void Initialize(const PropertyCollectionDefinition &setting_definitions);
+
+  void SetExpectedPath(std::string path);
 
   // Subclass specific functions
 
@@ -174,9 +176,12 @@ class OptionValueProperties
     return ((idx < m_properties.size()) ? &m_properties[idx] : nullptr);
   }
 
+  bool VerifyPath();
+
   std::string m_name;
   std::vector<Property> m_properties;
   llvm::StringMap<size_t> m_name_to_index;
+  std::string m_expected_path;
 };
 
 } // namespace lldb_private
diff --git a/lldb/include/lldb/Interpreter/Property.h 
b/lldb/include/lldb/Interpreter/Property.h
index 09f09358e8af8..74da58275dba8 100644
--- a/lldb/include/lldb/Interpreter/Property.h
+++ b/lldb/include/lldb/Interpreter/Property.h
@@ -30,7 +30,10 @@ struct PropertyDefinition {
   const char *description;
 };
 
-using PropertyDefinitions = llvm::ArrayRef<PropertyDefinition>;
+struct PropertyCollectionDefinition {
+  llvm::ArrayRef<PropertyDefinition> definitions;
+  llvm::StringRef expected_path;
+};
 
 class Property {
 public:
diff --git a/lldb/source/Core/CoreProperties.td 
b/lldb/source/Core/CoreProperties.td
index fafcb3b66e102..37f8139fb52fc 100644
--- a/lldb/source/Core/CoreProperties.td
+++ b/lldb/source/Core/CoreProperties.td
@@ -1,6 +1,6 @@
 include "../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "modulelist" in {
+let Definition = "modulelist", Path = "symbols" in {
   def EnableExternalLookup: Property<"enable-external-lookup", "Boolean">,
     Global,
     DefaultTrue,
@@ -49,7 +49,7 @@ let Definition = "modulelist" in {
 }
 
 #ifndef NDEBUG
-let Definition = "testing" in {
+let Definition = "testing", Path = "testing" in {
   def InjectVarLocListError
       : Property<"inject-variable-location-error", "Boolean">,
         Global,
@@ -58,7 +58,7 @@ let Definition = "testing" in {
 }
 #endif
 
-let Definition = "debugger" in {
+let Definition = "debugger", Path = "" in {
   def AutoConfirm: Property<"auto-confirm", "Boolean">,
     Global,
     DefaultFalse,
diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp
index a08744f024d9a..00dea7da3497e 100644
--- a/lldb/source/Core/Debugger.cpp
+++ b/lldb/source/Core/Debugger.cpp
@@ -215,7 +215,7 @@ enum {
 #ifndef NDEBUG
 TestingProperties::TestingProperties() {
   m_collection_sp = std::make_shared<OptionValueProperties>("testing");
-  m_collection_sp->Initialize(g_testing_properties);
+  m_collection_sp->Initialize(g_testing_properties_def);
 }
 
 bool TestingProperties::GetInjectVarLocListError() const {
@@ -1016,7 +1016,7 @@ Debugger::Debugger(lldb::LogOutputCallback log_callback, 
void *baton)
       m_forward_listener_sp(), m_clear_once() {
   // Initialize the debugger properties as early as possible as other parts of
   // LLDB will start querying them during construction.
-  m_collection_sp->Initialize(g_debugger_properties);
+  m_collection_sp->Initialize(g_debugger_properties_def);
   m_collection_sp->AppendProperty(
       "target", "Settings specify to debugging targets.", true,
       Target::GetGlobalProperties().GetValueProperties());
diff --git a/lldb/source/Core/ModuleList.cpp b/lldb/source/Core/ModuleList.cpp
index 613e469dc6318..66316a83bb2a6 100644
--- a/lldb/source/Core/ModuleList.cpp
+++ b/lldb/source/Core/ModuleList.cpp
@@ -80,7 +80,7 @@ enum {
 
 ModuleListProperties::ModuleListProperties() {
   m_collection_sp = std::make_shared<OptionValueProperties>("symbols");
-  m_collection_sp->Initialize(g_modulelist_properties);
+  m_collection_sp->Initialize(g_modulelist_properties_def);
   m_collection_sp->SetValueChangedCallback(ePropertySymLinkPaths,
                                            [this] { UpdateSymlinkMappings(); 
});
 
diff --git a/lldb/source/Core/PluginManager.cpp 
b/lldb/source/Core/PluginManager.cpp
index 4e3563cf419fe..835837e462edc 100644
--- a/lldb/source/Core/PluginManager.cpp
+++ b/lldb/source/Core/PluginManager.cpp
@@ -2019,6 +2019,7 @@ GetDebuggerPropertyForPlugins(Debugger &debugger, 
llvm::StringRef plugin_type_na
     if (!plugin_properties_sp && can_create) {
       plugin_properties_sp =
           std::make_shared<OptionValueProperties>(g_property_name);
+      plugin_properties_sp->SetExpectedPath("plugin");
       parent_properties_sp->AppendProperty(g_property_name,
                                            "Settings specify to plugins.", 
true,
                                            plugin_properties_sp);
@@ -2030,6 +2031,8 @@ GetDebuggerPropertyForPlugins(Debugger &debugger, 
llvm::StringRef plugin_type_na
       if (!plugin_type_properties_sp && can_create) {
         plugin_type_properties_sp =
             std::make_shared<OptionValueProperties>(plugin_type_name);
+        plugin_type_properties_sp->SetExpectedPath(
+            ("plugin." + plugin_type_name).str());
         plugin_properties_sp->AppendProperty(plugin_type_name, 
plugin_type_desc,
                                              true, plugin_type_properties_sp);
       }
@@ -2054,6 +2057,7 @@ static lldb::OptionValuePropertiesSP 
GetDebuggerPropertyForPluginsOldStyle(
     if (!plugin_properties_sp && can_create) {
       plugin_properties_sp =
           std::make_shared<OptionValueProperties>(plugin_type_name);
+      plugin_properties_sp->SetExpectedPath(plugin_type_name.str());
       parent_properties_sp->AppendProperty(plugin_type_name, plugin_type_desc,
                                            true, plugin_properties_sp);
     }
@@ -2064,6 +2068,8 @@ static lldb::OptionValuePropertiesSP 
GetDebuggerPropertyForPluginsOldStyle(
       if (!plugin_type_properties_sp && can_create) {
         plugin_type_properties_sp =
             std::make_shared<OptionValueProperties>(g_property_name);
+        plugin_type_properties_sp->SetExpectedPath(
+            (plugin_type_name + ".plugin").str());
         plugin_properties_sp->AppendProperty(g_property_name,
                                              "Settings specific to plugins",
                                              true, plugin_type_properties_sp);
diff --git a/lldb/source/Interpreter/CommandInterpreter.cpp 
b/lldb/source/Interpreter/CommandInterpreter.cpp
index fdde65428326c..9aed946492632 100644
--- a/lldb/source/Interpreter/CommandInterpreter.cpp
+++ b/lldb/source/Interpreter/CommandInterpreter.cpp
@@ -148,7 +148,7 @@ CommandInterpreter::CommandInterpreter(Debugger &debugger,
   SetEventName(eBroadcastBitQuitCommandReceived, "quit");
   SetSynchronous(synchronous_execution);
   CheckInWithManager();
-  m_collection_sp->Initialize(g_interpreter_properties);
+  m_collection_sp->Initialize(g_interpreter_properties_def);
 }
 
 bool CommandInterpreter::GetExpandRegexAliases() const {
diff --git a/lldb/source/Interpreter/InterpreterProperties.td 
b/lldb/source/Interpreter/InterpreterProperties.td
index ffb87ea5e045d..c795e66a39e81 100644
--- a/lldb/source/Interpreter/InterpreterProperties.td
+++ b/lldb/source/Interpreter/InterpreterProperties.td
@@ -1,6 +1,6 @@
 include "../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "interpreter" in {
+let Definition = "interpreter", Path = "interpreter" in {
   def ExpandRegexAliases: Property<"expand-regex-aliases", "Boolean">,
     Global,
     DefaultFalse,
diff --git a/lldb/source/Interpreter/OptionValueProperties.cpp 
b/lldb/source/Interpreter/OptionValueProperties.cpp
index cb71bffa8fe25..a36c77f0b3c3a 100644
--- a/lldb/source/Interpreter/OptionValueProperties.cpp
+++ b/lldb/source/Interpreter/OptionValueProperties.cpp
@@ -23,14 +23,21 @@ using namespace lldb_private;
 OptionValueProperties::OptionValueProperties(llvm::StringRef name)
     : m_name(name.str()) {}
 
-void OptionValueProperties::Initialize(const PropertyDefinitions &defs) {
-  for (const auto &definition : defs) {
+void OptionValueProperties::Initialize(
+    const PropertyCollectionDefinition &defs) {
+  for (const auto &definition : defs.definitions) {
     Property property(definition);
     assert(property.IsValid());
     m_name_to_index.insert({property.GetName(), m_properties.size()});
     property.GetValue()->SetParent(shared_from_this());
     m_properties.push_back(property);
   }
+  SetExpectedPath(defs.expected_path.str());
+}
+
+void OptionValueProperties::SetExpectedPath(std::string path) {
+  assert(m_expected_path.empty() || m_expected_path == path);
+  m_expected_path = path;
 }
 
 void OptionValueProperties::SetValueChangedCallback(
@@ -47,6 +54,15 @@ void OptionValueProperties::AppendProperty(llvm::StringRef 
name,
   m_name_to_index.insert({name, m_properties.size()});
   m_properties.push_back(property);
   value_sp->SetParent(shared_from_this());
+
+#ifndef NDEBUG
+  OptionValueProperties *properties = value_sp->GetAsProperties();
+  if (properties) {
+    assert(value_sp->GetName() == name);
+    assert(properties->VerifyPath() &&
+           "Mismatch between parents from TableGen and actual parents");
+  }
+#endif
 }
 
 lldb::OptionValueSP
@@ -489,3 +505,22 @@ OptionValueProperties::GetSubProperty(const 
ExecutionContext *exe_ctx,
   }
   return lldb::OptionValuePropertiesSP();
 }
+
+bool OptionValueProperties::VerifyPath() {
+  OptionValueSP parent = GetParent();
+  if (!parent)
+    // Only the top level value should have an empty path.
+    return m_expected_path.empty();
+  OptionValueProperties *parent_properties = parent->GetAsProperties();
+  if (!parent_properties)
+    return false;
+
+  auto [prefix, expected_name] = llvm::StringRef(m_expected_path).rsplit('.');
+
+  if (expected_name.empty())
+    // There is no dot, so the parent should be the top-level (core 
properties).
+    return parent_properties->m_expected_path.empty() && GetName() == prefix;
+
+  return parent_properties->m_expected_path == prefix &&
+         GetName() == expected_name;
+}
diff --git 
a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp 
b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
index 2d0a4f67499ee..dcd918224bb18 100644
--- 
a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
+++ 
b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
@@ -106,7 +106,7 @@ class DynamicLoaderDarwinKernelProperties : public 
Properties {
 
   DynamicLoaderDarwinKernelProperties() : Properties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_dynamicloaderdarwinkernel_properties);
+    m_collection_sp->Initialize(g_dynamicloaderdarwinkernel_properties_def);
   }
 
   ~DynamicLoaderDarwinKernelProperties() override = default;
diff --git 
a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernelProperties.td
 
b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernelProperties.td
index 6c662d737fab8..15f87f3ce9f7f 100644
--- 
a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernelProperties.td
+++ 
b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernelProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "dynamicloaderdarwinkernel" in {
+let Definition = "dynamicloaderdarwinkernel", Path = 
"plugin.dynamic-loader.darwin-kernel" in {
   def LoadKexts: Property<"load-kexts", "Boolean">,
     Global,
     DefaultTrue,
diff --git a/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp 
b/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
index b6487d4e8ed4b..de6e891040afe 100644
--- a/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
+++ b/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
@@ -95,7 +95,7 @@ class PluginProperties : public Properties {
 
   PluginProperties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_jitloadergdb_properties);
+    m_collection_sp->Initialize(g_jitloadergdb_properties_def);
   }
 
   EnableJITLoaderGDB GetEnable() const {
diff --git a/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDBProperties.td 
b/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDBProperties.td
index 0493838bc85d7..6f7e5934d5c0d 100644
--- a/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDBProperties.td
+++ b/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDBProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "jitloadergdb" in {
+let Definition = "jitloadergdb", Path = "plugin.jit-loader.gdb" in {
   def Enable: Property<"enable", "Enum">,
     Global,
     DefaultEnumValue<"eEnableJITLoaderGDBDefault">,
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp 
b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
index 58f7d834f46c5..7a0f556b3aed4 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
@@ -2612,7 +2612,7 @@ class PluginProperties : public Properties {
 
   PluginProperties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_language_cplusplus_properties);
+    m_collection_sp->Initialize(g_language_cplusplus_properties_def);
   }
 
   FormatEntity::Entry GetFunctionNameFormat() const {
diff --git 
a/lldb/source/Plugins/Language/CPlusPlus/LanguageCPlusPlusProperties.td 
b/lldb/source/Plugins/Language/CPlusPlus/LanguageCPlusPlusProperties.td
index 4d74a040f4de4..f9b43ba306b5a 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LanguageCPlusPlusProperties.td
+++ b/lldb/source/Plugins/Language/CPlusPlus/LanguageCPlusPlusProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "language_cplusplus" in {
+let Definition = "language_cplusplus", Path = "plugin.cplusplus.display" in {
   def FunctionNameFormat: Property<"function-name-format", "FormatEntity">,
     Global,
     
DefaultStringValue<"${function.return-left}${function.scope}${ansi.fg.yellow}${function.basename}${ansi.normal}${function.template-arguments}${function.formatted-arguments}${function.return-right}${function.qualifiers}${function.suffix}">,
diff --git a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp 
b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
index 7fbeea695b933..8b27545600577 100644
--- a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
+++ b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
@@ -86,7 +86,7 @@ class PluginProperties : public Properties {
 
   PluginProperties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_objectfilepecoff_properties);
+    m_collection_sp->Initialize(g_objectfilepecoff_properties_def);
   }
 
   llvm::Triple::EnvironmentType ABI() const {
diff --git 
a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFFProperties.td 
b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFFProperties.td
index 7655f6dab3843..8563e446132c9 100644
--- a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFFProperties.td
+++ b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFFProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "objectfilepecoff" in {
+let Definition = "objectfilepecoff", Path = "plugin.object-file.pe-coff" in {
   def ABI: Property<"abi", "Enum">,
     Global,
     DefaultEnumValue<"llvm::Triple::UnknownEnvironment">,
diff --git a/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp 
b/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp
index 22b9711fda480..ce7dad8b02797 100644
--- a/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp
+++ b/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp
@@ -45,7 +45,7 @@ class PluginProperties : public Properties {
   PluginProperties() {
     m_collection_sp = std::make_shared<OptionValueProperties>(
         PlatformAndroid::GetPluginNameStatic(false));
-    m_collection_sp->Initialize(g_android_properties);
+    m_collection_sp->Initialize(g_android_properties_def);
   }
 };
 
diff --git a/lldb/source/Plugins/Platform/Android/PlatformAndroidProperties.td 
b/lldb/source/Plugins/Platform/Android/PlatformAndroidProperties.td
index bf1bc7b3cef02..b885872d768c0 100644
--- a/lldb/source/Plugins/Platform/Android/PlatformAndroidProperties.td
+++ b/lldb/source/Plugins/Platform/Android/PlatformAndroidProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "android" in {
+let Definition = "android", Path = "platform.plugin.remote-android" in {
   def PlatformPackageName: Property<"package-name", "String">,
     Global,
     DefaultStringValue<"">,
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp 
b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index bfbd85ea34203..3e085e993cad7 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -135,7 +135,7 @@ class PlatformDarwinProperties : public Properties {
 
   PlatformDarwinProperties() : Properties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_platformdarwin_properties);
+    m_collection_sp->Initialize(g_platformdarwin_properties_def);
   }
 
   ~PlatformDarwinProperties() override = default;
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSXProperties.td 
b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSXProperties.td
index f0d305a63085c..89bf4ad812f32 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSXProperties.td
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformMacOSXProperties.td
@@ -1,12 +1,12 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "platformdarwinkernel" in {
+let Definition = "platformdarwinkernel", Path = 
"platform.plugin.darwin-kernel" in {
   def KextDirectories: Property<"kext-directories", "FileSpecList">,
     DefaultStringValue<"">,
     Desc<"Directories/KDKs to search for kexts in when starting a kernel debug 
session.">;
 }
 
-let Definition = "platformdarwin" in {
+let Definition = "platformdarwin", Path = "platform.plugin.darwin" in {
   def IgnoredExceptions: Property<"ignored-exceptions", "String">,
     DefaultStringValue<"">,
     Desc<"List the mach exceptions to ignore, separated by '|' "
diff --git a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp 
b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp
index 1054892496732..ea446f67e0fca 100644
--- a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp
+++ b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp
@@ -37,7 +37,7 @@ class PluginProperties : public Properties {
   PluginProperties() {
     m_collection_sp = std::make_shared<OptionValueProperties>(
         PlatformQemuUser::GetPluginNameStatic());
-    m_collection_sp->Initialize(g_platformqemuuser_properties);
+    m_collection_sp->Initialize(g_platformqemuuser_properties_def);
   }
 
   llvm::StringRef GetArchitecture() {
diff --git 
a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUserProperties.td 
b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUserProperties.td
index c7ec4bbc6e786..40bf435b20af9 100644
--- a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUserProperties.td
+++ b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUserProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "platformqemuuser" in {
+let Definition = "platformqemuuser", Path = "platform.plugin.qemu-user" in {
   def Architecture: Property<"architecture", "String">,
     Global,
     DefaultStringValue<"">,
diff --git a/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp 
b/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp
index 30f31cb9ae75f..bcc71f83a017d 100644
--- a/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp
+++ b/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp
@@ -41,7 +41,7 @@ class PluginProperties : public Properties {
   PluginProperties() {
     m_collection_sp = std::make_shared<OptionValueProperties>(
         PlatformWasm::GetPluginNameStatic());
-    m_collection_sp->Initialize(g_platformwasm_properties);
+    m_collection_sp->Initialize(g_platformwasm_properties_def);
   }
 
   FileSpec GetRuntimePath() const {
diff --git a/lldb/source/Plugins/Platform/WebAssembly/PlatformWasmProperties.td 
b/lldb/source/Plugins/Platform/WebAssembly/PlatformWasmProperties.td
index 5626372482f13..1f25f1aa8038e 100644
--- a/lldb/source/Plugins/Platform/WebAssembly/PlatformWasmProperties.td
+++ b/lldb/source/Plugins/Platform/WebAssembly/PlatformWasmProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "platformwasm" in {
+let Definition = "platformwasm", Path = "platform.plugin.wasm" in {
   def RuntimePath : Property<"runtime-path", "FileSpec">,
                     Global,
                     DefaultStringValue<"">,
diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp 
b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
index 3c26afa3d4861..471beb4f0b9b9 100644
--- a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
+++ b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
@@ -70,7 +70,7 @@ class PluginProperties : public Properties {
 
   PluginProperties() : Properties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_processkdp_properties);
+    m_collection_sp->Initialize(g_processkdp_properties_def);
   }
 
   ~PluginProperties() override = default;
diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDPProperties.td 
b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDPProperties.td
index 0063bdbec0040..ec89f3cec0ce7 100644
--- a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDPProperties.td
+++ b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDPProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "processkdp" in {
+let Definition = "processkdp", Parent = "plugin.process.kdp" in {
   def KDPPacketTimeout: Property<"packet-timeout", "UInt64">,
     Global,
     DefaultUnsignedValue<5>,
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp 
b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index 4fa92af59f8cd..8f920bfdd3740 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -146,7 +146,7 @@ class PluginProperties : public Properties {
 
   PluginProperties() : Properties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_processgdbremote_properties);
+    m_collection_sp->Initialize(g_processgdbremote_properties_def);
   }
 
   ~PluginProperties() override = default;
diff --git 
a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemoteProperties.td 
b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemoteProperties.td
index 520dad062e09a..08dee3089a094 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemoteProperties.td
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemoteProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "processgdbremote" in {
+let Definition = "processgdbremote", Path = "plugin.process.gdb-remote" in {
   def PacketTimeout: Property<"packet-timeout", "UInt64">,
     Global,
 #ifdef LLDB_SANITIZED
diff --git 
a/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp 
b/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp
index 70093c9624f09..130bff7a99f3f 100644
--- a/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp
+++ b/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp
@@ -126,7 +126,7 @@ class StructuredDataDarwinLogProperties : public Properties 
{
 
   StructuredDataDarwinLogProperties() : Properties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_darwinlog_properties);
+    m_collection_sp->Initialize(g_darwinlog_properties_def);
   }
 
   ~StructuredDataDarwinLogProperties() override = default;
diff --git 
a/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLogProperties.td
 
b/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLogProperties.td
index 5c22158542f98..5e3ed81c270a8 100644
--- 
a/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLogProperties.td
+++ 
b/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLogProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "darwinlog" in {
+let Definition = "darwinlog", Path = "plugin.structured-data.darwin-log" in {
   def EnableOnStartup: Property<"enable-on-startup", "Boolean">,
     Global,
     DefaultFalse,
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp 
b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index c6261910700cb..f66b459a48bfe 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -132,7 +132,7 @@ class PluginProperties : public Properties {
 
   PluginProperties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_symbolfiledwarf_properties);
+    m_collection_sp->Initialize(g_symbolfiledwarf_properties_def);
   }
 
   bool IgnoreFileIndexes() const {
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFProperties.td 
b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFProperties.td
index 2f1ce88808b76..cba39a73aa011 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFProperties.td
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "symbolfiledwarf" in {
+let Definition = "symbolfiledwarf", Path = "plugin.symbol-file.dwarf" in {
   def IgnoreIndexes: Property<"ignore-file-indexes", "Boolean">,
     Global,
     DefaultFalse,
diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp 
b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
index 97c995fc9b22a..e35195fec2efc 100644
--- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
@@ -123,7 +123,7 @@ class PluginProperties : public Properties {
 
   PluginProperties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_symbolfilepdb_properties);
+    m_collection_sp->Initialize(g_symbolfilepdb_properties_def);
   }
 
   bool UseNativeReader() const {
diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDBProperties.td 
b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDBProperties.td
index 35875def046a5..68220e3ce16ea 100644
--- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDBProperties.td
+++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDBProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "symbolfilepdb" in {
+let Definition = "symbolfilepdb", Path = "plugin.symbol-file.pdb" in {
   def Reader: Property<"reader", "Enum">,
     Global,
     DefaultEnumValue<"ePDBReaderDefault">,
diff --git 
a/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp 
b/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
index b775ec98c9a17..a09bb356e3a8c 100644
--- a/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
+++ b/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
@@ -40,7 +40,7 @@ class PluginProperties : public Properties {
 
   PluginProperties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_symbollocatordebuginfod_properties);
+    m_collection_sp->Initialize(g_symbollocatordebuginfod_properties_def);
 
     // We need to read the default value first to read the environment 
variable.
     llvm::SmallVector<llvm::StringRef> urls = llvm::getDefaultDebuginfodUrls();
diff --git 
a/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfodProperties.td
 
b/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfodProperties.td
index 0ff02674b8ea3..a7bcec44d0696 100644
--- 
a/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfodProperties.td
+++ 
b/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfodProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "symbollocatordebuginfod" in {
+let Definition = "symbollocatordebuginfod", Path = 
"plugin.symbol-locator.debuginfod" in {
   def ServerURLs : Property<"server-urls", "Array">,
     ElementType<"String">,
     Desc<"An ordered list of Debuginfod server URLs to query for symbols. This 
defaults to the contents of the DEBUGINFOD_URLS environment variable.">;
diff --git a/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp 
b/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp
index 72e9948ffe814..740af59d0c1ab 100644
--- a/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp
+++ b/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp
@@ -54,7 +54,7 @@ llvm::StringRef 
TraceIntelPT::PluginProperties::GetSettingName() {
 
 TraceIntelPT::PluginProperties::PluginProperties() : Properties() {
   m_collection_sp = std::make_shared<OptionValueProperties>(GetSettingName());
-  m_collection_sp->Initialize(g_traceintelpt_properties);
+  m_collection_sp->Initialize(g_traceintelpt_properties_def);
 }
 
 uint64_t
diff --git a/lldb/source/Plugins/Trace/intel-pt/TraceIntelPTProperties.td 
b/lldb/source/Plugins/Trace/intel-pt/TraceIntelPTProperties.td
index d338df1df5cb0..96eb3397f66d2 100644
--- a/lldb/source/Plugins/Trace/intel-pt/TraceIntelPTProperties.td
+++ b/lldb/source/Plugins/Trace/intel-pt/TraceIntelPTProperties.td
@@ -1,6 +1,6 @@
 include "../../../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "traceintelpt" in {
+let Definition = "traceintelpt", Parent = "plugin.trace.intel-pt" in {
   def InfiniteDecodingLoopVerificationThreshold:
       Property<"infinite-decoding-loop-verification-threshold", "UInt64">,
     Global,
diff --git a/lldb/source/Target/Language.cpp b/lldb/source/Target/Language.cpp
index c8b09c32ac08f..d22e58b0a6a9a 100644
--- a/lldb/source/Target/Language.cpp
+++ b/lldb/source/Target/Language.cpp
@@ -49,7 +49,7 @@ llvm::StringRef LanguageProperties::GetSettingName() {
 
 LanguageProperties::LanguageProperties() {
   m_collection_sp = std::make_shared<OptionValueProperties>(GetSettingName());
-  m_collection_sp->Initialize(g_language_properties);
+  m_collection_sp->Initialize(g_language_properties_def);
 }
 
 bool LanguageProperties::GetEnableFilterForLineBreakpoints() const {
diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp
index bf9e2f2c2b2f6..4068210cc1632 100644
--- a/lldb/source/Target/Platform.cpp
+++ b/lldb/source/Target/Platform.cpp
@@ -79,7 +79,7 @@ llvm::StringRef PlatformProperties::GetSettingName() {
 
 PlatformProperties::PlatformProperties() {
   m_collection_sp = std::make_shared<OptionValueProperties>(GetSettingName());
-  m_collection_sp->Initialize(g_platform_properties);
+  m_collection_sp->Initialize(g_platform_properties_def);
 
   auto module_cache_dir = GetModuleCacheDirectory();
   if (module_cache_dir)
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index 5056a735c8f57..d7bc16efc9140 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -147,7 +147,7 @@ class ProcessExperimentalOptionValueProperties
 ProcessExperimentalProperties::ProcessExperimentalProperties()
     : Properties(OptionValuePropertiesSP(
           new ProcessExperimentalOptionValueProperties())) {
-  m_collection_sp->Initialize(g_process_experimental_properties);
+  m_collection_sp->Initialize(g_process_experimental_properties_def);
 }
 
 ProcessProperties::ProcessProperties(lldb_private::Process *process)
@@ -157,7 +157,7 @@ ProcessProperties::ProcessProperties(lldb_private::Process 
*process)
   if (process == nullptr) {
     // Global process properties, set them up one time
     m_collection_sp = 
std::make_shared<ProcessOptionValueProperties>("process");
-    m_collection_sp->Initialize(g_process_properties);
+    m_collection_sp->Initialize(g_process_properties_def);
     m_collection_sp->AppendProperty(
         "thread", "Settings specific to threads.", true,
         Thread::GetGlobalProperties().GetValueProperties());
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index f3e058c6cbc9b..a380327f39079 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -4446,7 +4446,7 @@ class TargetExperimentalOptionValueProperties
 TargetExperimentalProperties::TargetExperimentalProperties()
     : Properties(OptionValuePropertiesSP(
           new TargetExperimentalOptionValueProperties())) {
-  m_collection_sp->Initialize(g_target_experimental_properties);
+  m_collection_sp->Initialize(g_target_experimental_properties_def);
 }
 
 // TargetProperties
@@ -4495,7 +4495,7 @@ TargetProperties::TargetProperties(Target *target)
         true, m_experimental_properties_up->GetValueProperties());
   } else {
     m_collection_sp = std::make_shared<TargetOptionValueProperties>("target");
-    m_collection_sp->Initialize(g_target_properties);
+    m_collection_sp->Initialize(g_target_properties_def);
     m_experimental_properties_up =
         std::make_unique<TargetExperimentalProperties>();
     m_collection_sp->AppendProperty(
diff --git a/lldb/source/Target/TargetProperties.td 
b/lldb/source/Target/TargetProperties.td
index e6cd48a9d3dad..edeed4411eb68 100644
--- a/lldb/source/Target/TargetProperties.td
+++ b/lldb/source/Target/TargetProperties.td
@@ -1,6 +1,6 @@
 include "../../include/lldb/Core/PropertiesBase.td"
 
-let Definition = "target_experimental" in {
+let Definition = "target_experimental", Path = "target.experimental" in {
   def InjectLocalVars : Property<"inject-local-vars", "Boolean">,
     Global, DefaultTrue,
     Desc<"If true, inject local variables explicitly into the expression text. 
This will fix symbol resolution when there are name collisions between ivars 
and local variables. But it can make expressions run much more slowly.">;
@@ -9,7 +9,7 @@ let Definition = "target_experimental" in {
     Desc<"If true, use the DIL implementation for frame variable evaluation.">;
 }
 
-let Definition = "target" in {
+let Definition = "target", Path = "target" in {
   def DefaultArch: Property<"default-arch", "Arch">,
     Global,
     DefaultStringValue<"">,
@@ -222,14 +222,14 @@ let Definition = "target" in {
     Desc<"Enable loading of modules in parallel for the dynamic loader.">;
 }
 
-let Definition = "process_experimental" in {
+let Definition = "process_experimental", Path = "target.process.experimental" 
in {
   def OSPluginReportsAllThreads: Property<"os-plugin-reports-all-threads", 
"Boolean">,
     Global,
     DefaultTrue,
     Desc<"Set to False if your Python OS Plugin doesn't report all threads on 
each stop.">;
 }
 
-let Definition = "process" in {
+let Definition = "process", Path = "target.process" in {
   def DisableMemCache: Property<"disable-memory-cache", "Boolean">,
     DefaultFalse,
     Desc<"Disable reading and caching of memory in fixed-size units.">;
@@ -304,7 +304,7 @@ let Definition = "process" in {
     Desc<"If true, memory cache modifications (which happen often during 
expressions evaluation) will bump process state ID (and invalidate all 
synthetic children). Disabling this option helps to avoid synthetic children 
reevaluation when pretty printers heavily use expressions. The downside of 
disabled setting is that convenience variables won't reevaluate synthetic 
children automatically.">;
 }
 
-let Definition = "platform" in {
+let Definition = "platform", Path = "platform" in {
   def UseModuleCache: Property<"use-module-cache", "Boolean">,
     Global,
     DefaultTrue,
@@ -315,7 +315,7 @@ let Definition = "platform" in {
     Desc<"Root directory for cached modules.">;
 }
 
-let Definition = "thread" in {
+let Definition = "thread", Path = "target.process.thread" in {
   def StepInAvoidsNoDebug: Property<"step-in-avoid-nodebug", "Boolean">,
     Global,
     DefaultTrue,
@@ -344,7 +344,7 @@ let Definition = "thread" in {
     Desc<"The time in milliseconds to wait for single thread ThreadPlan to 
move forward before resuming all threads to resolve any potential deadlock. 
Specify value 0 to disable timeout.">;
 }
 
-let Definition = "language" in {
+let Definition = "language", Path = "language" in {
   def EnableFilterForLineBreakpoints: 
Property<"enable-filter-for-line-breakpoints", "Boolean">,
     DefaultTrue,
     Desc<"If true, allow Language plugins to filter locations when setting 
breakpoints by line number or regex.">;
diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp
index 70d8650662348..d9949b7f9ddb0 100644
--- a/lldb/source/Target/Thread.cpp
+++ b/lldb/source/Target/Thread.cpp
@@ -106,7 +106,7 @@ class ThreadOptionValueProperties
 ThreadProperties::ThreadProperties(bool is_global) : Properties() {
   if (is_global) {
     m_collection_sp = std::make_shared<ThreadOptionValueProperties>("thread");
-    m_collection_sp->Initialize(g_thread_properties);
+    m_collection_sp->Initialize(g_thread_properties_def);
   } else
     m_collection_sp =
         OptionValueProperties::CreateLocalCopy(Thread::GetGlobalProperties());
diff --git a/lldb/utils/TableGen/LLDBPropertyDefEmitter.cpp 
b/lldb/utils/TableGen/LLDBPropertyDefEmitter.cpp
index 1d4495f9281b2..e713dc790a49f 100644
--- a/lldb/utils/TableGen/LLDBPropertyDefEmitter.cpp
+++ b/lldb/utils/TableGen/LLDBPropertyDefEmitter.cpp
@@ -16,6 +16,7 @@
 #include "llvm/TableGen/Record.h"
 #include "llvm/TableGen/StringMatcher.h"
 #include "llvm/TableGen/TableGenBackend.h"
+#include <optional>
 #include <vector>
 
 using namespace llvm;
@@ -124,6 +125,19 @@ static void emitProperty(const Record *Property, 
raw_ostream &OS) {
   OS << "},\n";
 }
 
+static std::optional<StringRef>
+getPropertyPath(const std::vector<const Record *> &PropertyRecords) {
+  std::optional<StringRef> Path;
+  for (const Record *R : PropertyRecords) {
+    StringRef P = R->getValueAsString("Path");
+    if (!Path)
+      Path.emplace(P);
+    assert(*Path == P &&
+           "All records with one definition should have the same path");
+  }
+  return Path;
+}
+
 /// Emits all property initializers to the raw_ostream.
 static void emityProperties(std::string PropertyName,
                             const std::vector<const Record *> &PropertyRecords,
@@ -133,6 +147,8 @@ static void emityProperties(std::string PropertyName,
   std::string NeededMacro = "LLDB_PROPERTIES_" + PropertyName;
   llvm::replace(NeededMacro, ' ', '_');
 
+  std::optional<StringRef> Path = getPropertyPath(PropertyRecords);
+
   // All options are in one file, so we need put them behind macros and ask the
   // user to define the macro for the options that are needed.
   OS << "// Property definitions for " << PropertyName << "\n";
@@ -142,6 +158,14 @@ static void emityProperties(std::string PropertyName,
   for (const Record *R : PropertyRecords)
     emitProperty(R, OS);
   OS << "};\n";
+
+  OS << "static constexpr PropertyCollectionDefinition g_" << PropertyName
+     << "_properties_def = {\n";
+  OS << "/*properties=*/g_" << PropertyName << "_properties,\n";
+  if (Path)
+    OS << "/*expected_path=*/\"" << *Path << "\",\n";
+  OS << "};\n";
+
   // We undefine the macro for the user like Clang's include files are doing 
it.
   OS << "#undef " << NeededMacro << "\n";
   OS << "#endif // " << PropertyName << " Property\n\n";

>From cf86b7e6291b11990fcdd08166989e070f769d31 Mon Sep 17 00:00:00 2001
From: Nerixyz <[email protected]>
Date: Fri, 6 Feb 2026 15:32:14 +0100
Subject: [PATCH 2/2] [LLDB] Create plugin properties by path from TableGen

---
 lldb/include/lldb/Core/PluginManager.h        |  82 -------
 .../lldb/Core/UserSettingsController.h        |   4 +
 lldb/source/Core/PluginManager.cpp            | 227 ------------------
 lldb/source/Core/UserSettingsController.cpp   |  42 ++++
 .../DynamicLoaderDarwinKernel.cpp             |  13 +-
 .../Plugins/JITLoader/GDB/JITLoaderGDB.cpp    |  12 +-
 .../Language/CPlusPlus/CPlusPlusLanguage.cpp  |  13 +-
 .../ObjectFile/PECOFF/ObjectFilePECOFF.cpp    |  13 +-
 .../Platform/Android/PlatformAndroid.cpp      |  13 +-
 .../Platform/MacOSX/PlatformDarwin.cpp        |  16 +-
 .../Platform/MacOSX/PlatformDarwinKernel.cpp  |  14 +-
 .../Platform/QemuUser/PlatformQemuUser.cpp    |  13 +-
 .../Platform/WebAssembly/PlatformWasm.cpp     |  12 +-
 .../Process/MacOSX-Kernel/ProcessKDP.cpp      |  12 +-
 .../Process/gdb-remote/ProcessGDBRemote.cpp   |  12 +-
 .../DarwinLog/StructuredDataDarwinLog.cpp     |  11 +-
 .../SymbolFile/DWARF/SymbolFileDWARF.cpp      |  13 +-
 .../Plugins/SymbolFile/PDB/SymbolFilePDB.cpp  |  11 +-
 .../Debuginfod/SymbolLocatorDebuginfod.cpp    |  13 +-
 .../Plugins/Trace/intel-pt/TraceIntelPT.cpp   |  13 +-
 20 files changed, 134 insertions(+), 425 deletions(-)

diff --git a/lldb/include/lldb/Core/PluginManager.h 
b/lldb/include/lldb/Core/PluginManager.h
index ab2ca58a88ddd..9b61e8cf13bd9 100644
--- a/lldb/include/lldb/Core/PluginManager.h
+++ b/lldb/include/lldb/Core/PluginManager.h
@@ -627,88 +627,6 @@ class PluginManager {
   // debugger instance.
   static void DebuggerInitialize(Debugger &debugger);
 
-  static lldb::OptionValuePropertiesSP
-  GetSettingForDynamicLoaderPlugin(Debugger &debugger,
-                                   llvm::StringRef setting_name);
-
-  static bool CreateSettingForDynamicLoaderPlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
-  static lldb::OptionValuePropertiesSP
-  GetSettingForPlatformPlugin(Debugger &debugger, llvm::StringRef 
setting_name);
-
-  static bool CreateSettingForPlatformPlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
-  static lldb::OptionValuePropertiesSP
-  GetSettingForProcessPlugin(Debugger &debugger, llvm::StringRef setting_name);
-
-  static bool CreateSettingForProcessPlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
-  static lldb::OptionValuePropertiesSP
-  GetSettingForSymbolLocatorPlugin(Debugger &debugger,
-                                   llvm::StringRef setting_name);
-
-  static bool CreateSettingForSymbolLocatorPlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
-  static bool CreateSettingForTracePlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
-  static lldb::OptionValuePropertiesSP
-  GetSettingForObjectFilePlugin(Debugger &debugger,
-                                llvm::StringRef setting_name);
-
-  static bool CreateSettingForObjectFilePlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
-  static lldb::OptionValuePropertiesSP
-  GetSettingForSymbolFilePlugin(Debugger &debugger,
-                                llvm::StringRef setting_name);
-
-  static bool CreateSettingForSymbolFilePlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
-  static lldb::OptionValuePropertiesSP
-  GetSettingForJITLoaderPlugin(Debugger &debugger,
-                               llvm::StringRef setting_name);
-
-  static bool CreateSettingForJITLoaderPlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
-  static lldb::OptionValuePropertiesSP
-  GetSettingForOperatingSystemPlugin(Debugger &debugger,
-                                     llvm::StringRef setting_name);
-
-  static bool CreateSettingForOperatingSystemPlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
-  static lldb::OptionValuePropertiesSP
-  GetSettingForStructuredDataPlugin(Debugger &debugger,
-                                    llvm::StringRef setting_name);
-
-  static bool CreateSettingForStructuredDataPlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
-  static lldb::OptionValuePropertiesSP
-  GetSettingForCPlusPlusLanguagePlugin(Debugger &debugger,
-                                       llvm::StringRef setting_name);
-
-  static bool CreateSettingForCPlusPlusLanguagePlugin(
-      Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-      llvm::StringRef description, bool is_global_property);
-
   //
   // Plugin Info+Enable Declarations
   //
diff --git a/lldb/include/lldb/Core/UserSettingsController.h 
b/lldb/include/lldb/Core/UserSettingsController.h
index 29e892fdba45b..e07ef16ac1015 100644
--- a/lldb/include/lldb/Core/UserSettingsController.h
+++ b/lldb/include/lldb/Core/UserSettingsController.h
@@ -97,6 +97,10 @@ class Properties {
     return m_collection_sp->SetPropertyAtIndex<T>(idx, t, exe_ctx);
   }
 
+  void SetPropertiesAtPathIfNotExists(
+      llvm::StringRef path, const lldb::OptionValuePropertiesSP &properties_sp,
+      llvm::StringRef description, bool is_global_property);
+
 protected:
   lldb::OptionValuePropertiesSP m_collection_sp;
 };
diff --git a/lldb/source/Core/PluginManager.cpp 
b/lldb/source/Core/PluginManager.cpp
index 835837e462edc..cb09747336699 100644
--- a/lldb/source/Core/PluginManager.cpp
+++ b/lldb/source/Core/PluginManager.cpp
@@ -2080,233 +2080,6 @@ static lldb::OptionValuePropertiesSP 
GetDebuggerPropertyForPluginsOldStyle(
   return lldb::OptionValuePropertiesSP();
 }
 
-namespace {
-
-typedef lldb::OptionValuePropertiesSP
-GetDebuggerPropertyForPluginsPtr(Debugger &, llvm::StringRef, llvm::StringRef,
-                                 bool can_create);
-}
-
-static lldb::OptionValuePropertiesSP
-GetSettingForPlugin(Debugger &debugger, llvm::StringRef setting_name,
-                    llvm::StringRef plugin_type_name,
-                    GetDebuggerPropertyForPluginsPtr get_debugger_property =
-                        GetDebuggerPropertyForPlugins) {
-  lldb::OptionValuePropertiesSP properties_sp;
-  lldb::OptionValuePropertiesSP 
plugin_type_properties_sp(get_debugger_property(
-      debugger, plugin_type_name,
-      "", // not creating to so we don't need the description
-      false));
-  if (plugin_type_properties_sp)
-    properties_sp =
-        plugin_type_properties_sp->GetSubProperty(nullptr, setting_name);
-  return properties_sp;
-}
-
-static bool
-CreateSettingForPlugin(Debugger &debugger, llvm::StringRef plugin_type_name,
-                       llvm::StringRef plugin_type_desc,
-                       const lldb::OptionValuePropertiesSP &properties_sp,
-                       llvm::StringRef description, bool is_global_property,
-                       GetDebuggerPropertyForPluginsPtr get_debugger_property =
-                           GetDebuggerPropertyForPlugins) {
-  if (properties_sp) {
-    lldb::OptionValuePropertiesSP plugin_type_properties_sp(
-        get_debugger_property(debugger, plugin_type_name, plugin_type_desc,
-                              true));
-    if (plugin_type_properties_sp) {
-      plugin_type_properties_sp->AppendProperty(properties_sp->GetName(),
-                                                description, 
is_global_property,
-                                                properties_sp);
-      return true;
-    }
-  }
-  return false;
-}
-
-static constexpr llvm::StringLiteral 
kDynamicLoaderPluginName("dynamic-loader");
-static constexpr llvm::StringLiteral kPlatformPluginName("platform");
-static constexpr llvm::StringLiteral kProcessPluginName("process");
-static constexpr llvm::StringLiteral kTracePluginName("trace");
-static constexpr llvm::StringLiteral kObjectFilePluginName("object-file");
-static constexpr llvm::StringLiteral kSymbolFilePluginName("symbol-file");
-static constexpr llvm::StringLiteral 
kSymbolLocatorPluginName("symbol-locator");
-static constexpr llvm::StringLiteral kJITLoaderPluginName("jit-loader");
-static constexpr llvm::StringLiteral
-    kStructuredDataPluginName("structured-data");
-static constexpr llvm::StringLiteral kCPlusPlusLanguagePlugin("cplusplus");
-
-lldb::OptionValuePropertiesSP
-PluginManager::GetSettingForDynamicLoaderPlugin(Debugger &debugger,
-                                                llvm::StringRef setting_name) {
-  return GetSettingForPlugin(debugger, setting_name, kDynamicLoaderPluginName);
-}
-
-bool PluginManager::CreateSettingForDynamicLoaderPlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  return CreateSettingForPlugin(debugger, kDynamicLoaderPluginName,
-                                "Settings for dynamic loader plug-ins",
-                                properties_sp, description, 
is_global_property);
-}
-
-lldb::OptionValuePropertiesSP
-PluginManager::GetSettingForPlatformPlugin(Debugger &debugger,
-                                           llvm::StringRef setting_name) {
-  return GetSettingForPlugin(debugger, setting_name, kPlatformPluginName,
-                             GetDebuggerPropertyForPluginsOldStyle);
-}
-
-bool PluginManager::CreateSettingForPlatformPlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  return CreateSettingForPlugin(debugger, kPlatformPluginName,
-                                "Settings for platform plug-ins", 
properties_sp,
-                                description, is_global_property,
-                                GetDebuggerPropertyForPluginsOldStyle);
-}
-
-lldb::OptionValuePropertiesSP
-PluginManager::GetSettingForProcessPlugin(Debugger &debugger,
-                                          llvm::StringRef setting_name) {
-  return GetSettingForPlugin(debugger, setting_name, kProcessPluginName);
-}
-
-bool PluginManager::CreateSettingForProcessPlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  return CreateSettingForPlugin(debugger, kProcessPluginName,
-                                "Settings for process plug-ins", properties_sp,
-                                description, is_global_property);
-}
-
-lldb::OptionValuePropertiesSP
-PluginManager::GetSettingForSymbolLocatorPlugin(Debugger &debugger,
-                                                llvm::StringRef setting_name) {
-  return GetSettingForPlugin(debugger, setting_name, kSymbolLocatorPluginName);
-}
-
-bool PluginManager::CreateSettingForSymbolLocatorPlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  return CreateSettingForPlugin(debugger, kSymbolLocatorPluginName,
-                                "Settings for symbol locator plug-ins",
-                                properties_sp, description, 
is_global_property);
-}
-
-bool PluginManager::CreateSettingForTracePlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  return CreateSettingForPlugin(debugger, kTracePluginName,
-                                "Settings for trace plug-ins", properties_sp,
-                                description, is_global_property);
-}
-
-lldb::OptionValuePropertiesSP
-PluginManager::GetSettingForObjectFilePlugin(Debugger &debugger,
-                                             llvm::StringRef setting_name) {
-  return GetSettingForPlugin(debugger, setting_name, kObjectFilePluginName);
-}
-
-bool PluginManager::CreateSettingForObjectFilePlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  return CreateSettingForPlugin(debugger, kObjectFilePluginName,
-                                "Settings for object file plug-ins",
-                                properties_sp, description, 
is_global_property);
-}
-
-lldb::OptionValuePropertiesSP
-PluginManager::GetSettingForSymbolFilePlugin(Debugger &debugger,
-                                             llvm::StringRef setting_name) {
-  return GetSettingForPlugin(debugger, setting_name, kSymbolFilePluginName);
-}
-
-bool PluginManager::CreateSettingForSymbolFilePlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  return CreateSettingForPlugin(debugger, kSymbolFilePluginName,
-                                "Settings for symbol file plug-ins",
-                                properties_sp, description, 
is_global_property);
-}
-
-lldb::OptionValuePropertiesSP
-PluginManager::GetSettingForJITLoaderPlugin(Debugger &debugger,
-                                            llvm::StringRef setting_name) {
-  return GetSettingForPlugin(debugger, setting_name, kJITLoaderPluginName);
-}
-
-bool PluginManager::CreateSettingForJITLoaderPlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  return CreateSettingForPlugin(debugger, kJITLoaderPluginName,
-                                "Settings for JIT loader plug-ins",
-                                properties_sp, description, 
is_global_property);
-}
-
-static const char *kOperatingSystemPluginName("os");
-
-lldb::OptionValuePropertiesSP
-PluginManager::GetSettingForOperatingSystemPlugin(Debugger &debugger,
-                                                  llvm::StringRef 
setting_name) {
-  lldb::OptionValuePropertiesSP properties_sp;
-  lldb::OptionValuePropertiesSP plugin_type_properties_sp(
-      GetDebuggerPropertyForPlugins(
-          debugger, kOperatingSystemPluginName,
-          "", // not creating to so we don't need the description
-          false));
-  if (plugin_type_properties_sp)
-    properties_sp =
-        plugin_type_properties_sp->GetSubProperty(nullptr, setting_name);
-  return properties_sp;
-}
-
-bool PluginManager::CreateSettingForOperatingSystemPlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  if (properties_sp) {
-    lldb::OptionValuePropertiesSP plugin_type_properties_sp(
-        GetDebuggerPropertyForPlugins(debugger, kOperatingSystemPluginName,
-                                      "Settings for operating system plug-ins",
-                                      true));
-    if (plugin_type_properties_sp) {
-      plugin_type_properties_sp->AppendProperty(properties_sp->GetName(),
-                                                description, 
is_global_property,
-                                                properties_sp);
-      return true;
-    }
-  }
-  return false;
-}
-
-lldb::OptionValuePropertiesSP
-PluginManager::GetSettingForStructuredDataPlugin(Debugger &debugger,
-                                                 llvm::StringRef setting_name) 
{
-  return GetSettingForPlugin(debugger, setting_name, 
kStructuredDataPluginName);
-}
-
-bool PluginManager::CreateSettingForStructuredDataPlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  return CreateSettingForPlugin(debugger, kStructuredDataPluginName,
-                                "Settings for structured data plug-ins",
-                                properties_sp, description, 
is_global_property);
-}
-
-lldb::OptionValuePropertiesSP
-PluginManager::GetSettingForCPlusPlusLanguagePlugin(
-    Debugger &debugger, llvm::StringRef setting_name) {
-  return GetSettingForPlugin(debugger, setting_name, kCPlusPlusLanguagePlugin);
-}
-
-bool PluginManager::CreateSettingForCPlusPlusLanguagePlugin(
-    Debugger &debugger, const lldb::OptionValuePropertiesSP &properties_sp,
-    llvm::StringRef description, bool is_global_property) {
-  return CreateSettingForPlugin(debugger, kCPlusPlusLanguagePlugin,
-                                "Settings for CPlusPlus language plug-ins",
-                                properties_sp, description, 
is_global_property);
-}
-
 //
 // Plugin Info+Enable Implementations
 //
diff --git a/lldb/source/Core/UserSettingsController.cpp 
b/lldb/source/Core/UserSettingsController.cpp
index 5408d64b40647..f8969012cba35 100644
--- a/lldb/source/Core/UserSettingsController.cpp
+++ b/lldb/source/Core/UserSettingsController.cpp
@@ -95,3 +95,45 @@ bool Properties::IsSettingExperimental(llvm::StringRef 
setting) {
   size_t dot_pos = setting.find_first_of('.');
   return setting.take_front(dot_pos) == experimental;
 }
+
+void Properties::SetPropertiesAtPathIfNotExists(
+    llvm::StringRef path, const lldb::OptionValuePropertiesSP &properties_sp,
+    llvm::StringRef description, bool is_global_property) {
+  assert(!path.empty());
+  assert(m_collection_sp != nullptr);
+
+  llvm::SmallVector<llvm::StringRef, 3> segments;
+  path.split(segments, '.');
+  llvm::StringRef last_segment = segments.pop_back_val();
+
+  OptionValuePropertiesSP collection_sp = m_collection_sp;
+  for (llvm::StringRef segment : segments) {
+    const Property *inner = collection_sp->GetProperty(segment);
+    if (!inner) {
+      auto inner_sp = std::make_shared<OptionValueProperties>(segment);
+      // `segment` is a substring of `path`, so `segment.end()` includes
+      // everything up until and including the current segment.
+      inner_sp->SetExpectedPath(std::string(path.begin(), segment.end()));
+
+      collection_sp->AppendProperty(segment, /*desc=*/"", /*is_global=*/true,
+                                    inner_sp);
+      collection_sp = inner_sp;
+      continue;
+    }
+
+    OptionValueProperties *inner_properties =
+        inner->GetValue()->GetAsProperties();
+    if (!inner_properties) {
+      assert(false && "Intermediate properties must be OptionValueProperties");
+      return;
+    }
+    collection_sp = inner_properties->shared_from_this();
+  }
+
+  const Property *last_property = collection_sp->GetProperty(last_segment);
+  if (last_property)
+    return; // already exists
+
+  collection_sp->AppendProperty(last_segment, description, is_global_property,
+                                properties_sp);
+}
diff --git 
a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp 
b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
index dcd918224bb18..242f2f56541ca 100644
--- 
a/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
+++ 
b/lldb/source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
@@ -1627,14 +1627,11 @@ void DynamicLoaderDarwinKernel::Terminate() {
 
 void DynamicLoaderDarwinKernel::DebuggerInitialize(
     lldb_private::Debugger &debugger) {
-  if (!PluginManager::GetSettingForDynamicLoaderPlugin(
-          debugger, DynamicLoaderDarwinKernelProperties::GetSettingName())) {
-    const bool is_global_setting = true;
-    PluginManager::CreateSettingForDynamicLoaderPlugin(
-        debugger, GetGlobalProperties().GetValueProperties(),
-        "Properties for the DynamicLoaderDarwinKernel plug-in.",
-        is_global_setting);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_dynamicloaderdarwinkernel_properties_def.expected_path,
+      GetGlobalProperties().GetValueProperties(),
+      "Properties for the DynamicLoaderDarwinKernel plug-in.",
+      /*is_global_property=*/true);
 }
 
 llvm::StringRef DynamicLoaderDarwinKernel::GetPluginDescriptionStatic() {
diff --git a/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp 
b/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
index de6e891040afe..81c728ed500eb 100644
--- a/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
+++ b/lldb/source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
@@ -9,6 +9,7 @@
 #include "JITLoaderGDB.h"
 #include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
 #include "lldb/Breakpoint/Breakpoint.h"
+#include "lldb/Core/Debugger.h"
 #include "lldb/Core/Module.h"
 #include "lldb/Core/ModuleSpec.h"
 #include "lldb/Core/PluginManager.h"
@@ -154,13 +155,10 @@ JITLoaderGDB::~JITLoaderGDB() {
 }
 
 void JITLoaderGDB::DebuggerInitialize(Debugger &debugger) {
-  if (!PluginManager::GetSettingForJITLoaderPlugin(
-          debugger, PluginProperties::GetSettingName())) {
-    const bool is_global_setting = true;
-    PluginManager::CreateSettingForJITLoaderPlugin(
-        debugger, GetGlobalPluginProperties().GetValueProperties(),
-        "Properties for the JIT LoaderGDB plug-in.", is_global_setting);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_jitloadergdb_properties_def.expected_path,
+      GetGlobalPluginProperties().GetValueProperties(),
+      "Properties for the JIT LoaderGDB plug-in.", 
/*is_global_property=*/true);
 }
 
 void JITLoaderGDB::DidAttach() {
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp 
b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
index 7a0f556b3aed4..0f3282504e1d3 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
@@ -19,6 +19,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Demangle/ItaniumDemangle.h"
 
+#include "lldb/Core/Debugger.h"
 #include "lldb/Core/DemangledNameInfo.h"
 #include "lldb/Core/Mangled.h"
 #include "lldb/Core/Module.h"
@@ -2632,11 +2633,9 @@ FormatEntity::Entry 
CPlusPlusLanguage::GetFunctionNameFormat() const {
 }
 
 void CPlusPlusLanguage::DebuggerInitialize(Debugger &debugger) {
-  if (!PluginManager::GetSettingForCPlusPlusLanguagePlugin(
-          debugger, PluginProperties::GetSettingName())) {
-    PluginManager::CreateSettingForCPlusPlusLanguagePlugin(
-        debugger, GetGlobalPluginProperties().GetValueProperties(),
-        "Properties for the CPlusPlus language plug-in.",
-        /*is_global_property=*/true);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_language_cplusplus_properties_def.expected_path,
+      GetGlobalPluginProperties().GetValueProperties(),
+      "Properties for the CPlusPlus language plug-in.",
+      /*is_global_property=*/true);
 }
diff --git a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp 
b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
index 8b27545600577..03120a459c758 100644
--- a/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
+++ b/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
@@ -10,6 +10,7 @@
 #include "PECallFrameInfo.h"
 #include "WindowsMiniDump.h"
 
+#include "lldb/Core/Debugger.h"
 #include "lldb/Core/Module.h"
 #include "lldb/Core/ModuleSpec.h"
 #include "lldb/Core/PluginManager.h"
@@ -184,13 +185,11 @@ void ObjectFilePECOFF::Initialize() {
 }
 
 void ObjectFilePECOFF::DebuggerInitialize(Debugger &debugger) {
-  if (!PluginManager::GetSettingForObjectFilePlugin(
-          debugger, PluginProperties::GetSettingName())) {
-    const bool is_global_setting = true;
-    PluginManager::CreateSettingForObjectFilePlugin(
-        debugger, GetGlobalPluginProperties().GetValueProperties(),
-        "Properties for the PE/COFF object-file plug-in.", is_global_setting);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_objectfilepecoff_properties_def.expected_path,
+      GetGlobalPluginProperties().GetValueProperties(),
+      "Properties for the PE/COFF object-file plug-in.",
+      /*is_global_property=*/true);
 }
 
 void ObjectFilePECOFF::Terminate() {
diff --git a/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp 
b/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp
index ce7dad8b02797..be321aca9286b 100644
--- a/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp
+++ b/lldb/source/Plugins/Platform/Android/PlatformAndroid.cpp
@@ -6,6 +6,7 @@
 //
 
//===----------------------------------------------------------------------===//
 
+#include "lldb/Core/Debugger.h"
 #include "lldb/Core/Module.h"
 #include "lldb/Core/PluginManager.h"
 #include "lldb/Core/Section.h"
@@ -156,13 +157,11 @@ PlatformSP PlatformAndroid::CreateInstance(bool force, 
const ArchSpec *arch) {
 }
 
 void PlatformAndroid::DebuggerInitialize(Debugger &debugger) {
-  if (!PluginManager::GetSettingForPlatformPlugin(debugger,
-                                                  GetPluginNameStatic(false))) 
{
-    PluginManager::CreateSettingForPlatformPlugin(
-        debugger, GetGlobalProperties().GetValueProperties(),
-        "Properties for the Android platform plugin.",
-        /*is_global_property=*/true);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_android_properties_def.expected_path,
+      GetGlobalProperties().GetValueProperties(),
+      "Properties for the Android platform plugin.",
+      /*is_global_property=*/true);
 }
 
 PlatformAndroid::PlatformAndroid(bool is_host)
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp 
b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
index 3e085e993cad7..a0dfe60bba74e 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
@@ -164,15 +164,13 @@ static PlatformDarwinProperties &GetGlobalProperties() {
 
 void PlatformDarwin::DebuggerInitialize(
     lldb_private::Debugger &debugger) {
-  if (!PluginManager::GetSettingForPlatformPlugin(
-          debugger, PlatformDarwinProperties::GetSettingName())) {
-    const bool is_global_setting = false;
-    PluginManager::CreateSettingForPlatformPlugin(
-        debugger, GetGlobalProperties().GetValueProperties(),
-        "Properties for the Darwin platform plug-in.", is_global_setting);
-    OptionValueString *value = 
GetGlobalProperties().GetIgnoredExceptionValue();
-    value->SetValidator(ExceptionMaskValidator);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_platformdarwin_properties_def.expected_path,
+      GetGlobalProperties().GetValueProperties(),
+      "Properties for the Darwin platform plug-in.",
+      /*is_global_property=*/false);
+  OptionValueString *value = GetGlobalProperties().GetIgnoredExceptionValue();
+  value->SetValidator(ExceptionMaskValidator);
 }
 
 Args
diff --git a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp 
b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp
index 04e87b9dea699..ea30a7ce35be7 100644
--- a/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp
+++ b/lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp
@@ -196,7 +196,7 @@ class PlatformDarwinKernelProperties : public Properties {
 
   PlatformDarwinKernelProperties() : Properties() {
     m_collection_sp = 
std::make_shared<OptionValueProperties>(GetSettingName());
-    m_collection_sp->Initialize(g_platformdarwinkernel_properties);
+    m_collection_sp->Initialize(g_platformdarwinkernel_properties_def);
   }
 
   ~PlatformDarwinKernelProperties() override = default;
@@ -214,13 +214,11 @@ static PlatformDarwinKernelProperties 
&GetGlobalProperties() {
 
 void PlatformDarwinKernel::DebuggerInitialize(
     lldb_private::Debugger &debugger) {
-  if (!PluginManager::GetSettingForPlatformPlugin(
-          debugger, PlatformDarwinKernelProperties::GetSettingName())) {
-    const bool is_global_setting = true;
-    PluginManager::CreateSettingForPlatformPlugin(
-        debugger, GetGlobalProperties().GetValueProperties(),
-        "Properties for the PlatformDarwinKernel plug-in.", is_global_setting);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_platformdarwinkernel_properties.expected_path,
+      GetGlobalProperties().GetValueProperties(),
+      "Properties for the PlatformDarwinKernel plug-in.",
+      /*is_global_property=*/true);
 }
 
 /// Default Constructor
diff --git a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp 
b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp
index ea446f67e0fca..00938d5b155de 100644
--- a/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp
+++ b/lldb/source/Plugins/Platform/QemuUser/PlatformQemuUser.cpp
@@ -8,6 +8,7 @@
 
 #include "Plugins/Platform/QemuUser/PlatformQemuUser.h"
 #include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
+#include "lldb/Core/Debugger.h"
 #include "lldb/Core/PluginManager.h"
 #include "lldb/Host/FileSystem.h"
 #include "lldb/Host/ProcessLaunchInfo.h"
@@ -89,13 +90,11 @@ void PlatformQemuUser::Terminate() {
 }
 
 void PlatformQemuUser::DebuggerInitialize(Debugger &debugger) {
-  if (!PluginManager::GetSettingForPlatformPlugin(debugger,
-                                                  GetPluginNameStatic())) {
-    PluginManager::CreateSettingForPlatformPlugin(
-        debugger, GetGlobalProperties().GetValueProperties(),
-        "Properties for the qemu-user platform plugin.",
-        /*is_global_property=*/true);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_platformqemuuser_properties_def.expected_path,
+      GetGlobalProperties().GetValueProperties(),
+      "Properties for the qemu-user platform plugin.",
+      /*is_global_property=*/true);
 }
 
 PlatformSP PlatformQemuUser::CreateInstance(bool force, const ArchSpec *arch) {
diff --git a/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp 
b/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp
index bcc71f83a017d..a02b5097b1f9a 100644
--- a/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp
+++ b/lldb/source/Plugins/Platform/WebAssembly/PlatformWasm.cpp
@@ -9,6 +9,7 @@
 #include "Plugins/Platform/WebAssembly/PlatformWasm.h"
 #include "Plugins/Platform/WebAssembly/PlatformWasmRemoteGDBServer.h"
 #include "Plugins/Process/wasm/ProcessWasm.h"
+#include "lldb/Core/Debugger.h"
 #include "lldb/Core/PluginManager.h"
 #include "lldb/Host/FileSystem.h"
 #include "lldb/Host/ProcessLaunchInfo.h"
@@ -81,13 +82,10 @@ void PlatformWasm::Terminate() {
 }
 
 void PlatformWasm::DebuggerInitialize(Debugger &debugger) {
-  if (!PluginManager::GetSettingForPlatformPlugin(debugger,
-                                                  GetPluginNameStatic())) {
-    PluginManager::CreateSettingForPlatformPlugin(
-        debugger, GetGlobalProperties().GetValueProperties(),
-        "Properties for the wasm platform plugin.",
-        /*is_global_property=*/true);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_platformwasm_properties_def.expected_path,
+      GetGlobalProperties().GetValueProperties(),
+      "Properties for the wasm platform plugin.", /*is_global_property=*/true);
 }
 
 PlatformSP PlatformWasm::CreateInstance(bool force, const ArchSpec *arch) {
diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp 
b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
index 471beb4f0b9b9..48846f2cf315c 100644
--- a/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
+++ b/lldb/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
@@ -694,13 +694,11 @@ void ProcessKDP::Initialize() {
 }
 
 void ProcessKDP::DebuggerInitialize(lldb_private::Debugger &debugger) {
-  if (!PluginManager::GetSettingForProcessPlugin(
-          debugger, PluginProperties::GetSettingName())) {
-    const bool is_global_setting = true;
-    PluginManager::CreateSettingForProcessPlugin(
-        debugger, GetGlobalPluginProperties().GetValueProperties(),
-        "Properties for the kdp-remote process plug-in.", is_global_setting);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_processkdp_properties_def.expected_path,
+      GetGlobalPluginProperties().GetValueProperties(),
+      "Properties for the kdp-remote process plug-in.",
+      /*is_global_property=*/true);
 }
 
 bool ProcessKDP::StartAsyncThread() {
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp 
b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index 8f920bfdd3740..70901af6f8f2a 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -3849,13 +3849,11 @@ void ProcessGDBRemote::Initialize() {
 }
 
 void ProcessGDBRemote::DebuggerInitialize(Debugger &debugger) {
-  if (!PluginManager::GetSettingForProcessPlugin(
-          debugger, PluginProperties::GetSettingName())) {
-    const bool is_global_setting = true;
-    PluginManager::CreateSettingForProcessPlugin(
-        debugger, GetGlobalPluginProperties().GetValueProperties(),
-        "Properties for the gdb-remote process plug-in.", is_global_setting);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_processgdbremote_properties_def.expected_path,
+      GetGlobalPluginProperties().GetValueProperties(),
+      "Properties for the gdb-remote process plug-in.",
+      /*is_global_property=*/true);
 }
 
 bool ProcessGDBRemote::StartAsyncThread() {
diff --git 
a/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp 
b/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp
index 130bff7a99f3f..2e1aa5a6ed4c4 100644
--- a/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp
+++ b/lldb/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.cpp
@@ -1360,13 +1360,10 @@ void 
StructuredDataDarwinLog::DebuggerInitialize(Debugger &debugger) {
     // TODO log it once we setup structured data logging
   }
 
-  if (!PluginManager::GetSettingForPlatformPlugin(
-          debugger, StructuredDataDarwinLogProperties::GetSettingName())) {
-    const bool is_global_setting = true;
-    PluginManager::CreateSettingForStructuredDataPlugin(
-        debugger, GetGlobalProperties().GetValueProperties(),
-        "Properties for the darwin-log plug-in.", is_global_setting);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_darwinlog_properties_def.expected_path,
+      GetGlobalProperties().GetValueProperties(),
+      "Properties for the darwin-log plug-in.", /*is_global_property=*/true);
 }
 
 Status StructuredDataDarwinLog::FilterLaunchInfo(ProcessLaunchInfo 
&launch_info,
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp 
b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index f66b459a48bfe..ec4dfd86f172b 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Support/FormatAdapters.h"
 #include "llvm/Support/Threading.h"
 
+#include "lldb/Core/Debugger.h"
 #include "lldb/Core/Module.h"
 #include "lldb/Core/ModuleList.h"
 #include "lldb/Core/ModuleSpec.h"
@@ -316,13 +317,11 @@ void SymbolFileDWARF::Initialize() {
 }
 
 void SymbolFileDWARF::DebuggerInitialize(Debugger &debugger) {
-  if (!PluginManager::GetSettingForSymbolFilePlugin(
-          debugger, PluginProperties::GetSettingName())) {
-    const bool is_global_setting = true;
-    PluginManager::CreateSettingForSymbolFilePlugin(
-        debugger, GetGlobalPluginProperties().GetValueProperties(),
-        "Properties for the dwarf symbol-file plug-in.", is_global_setting);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_symbolfiledwarf_properties_def.expected_path,
+      GetGlobalPluginProperties().GetValueProperties(),
+      "Properties for the dwarf symbol-file plug-in.",
+      /*is_global_property=*/true);
 }
 
 void SymbolFileDWARF::Terminate() {
diff --git a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp 
b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
index e35195fec2efc..d03f3812f3d8c 100644
--- a/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
+++ b/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
@@ -207,12 +207,11 @@ bool SymbolFilePDB::UseNativePDB() {
 }
 
 void SymbolFilePDB::DebuggerInitialize(lldb_private::Debugger &debugger) {
-  if (!PluginManager::GetSettingForSymbolFilePlugin(
-          debugger, PluginProperties::GetSettingName())) {
-    PluginManager::CreateSettingForSymbolFilePlugin(
-        debugger, GetGlobalPluginProperties().GetValueProperties(),
-        "Properties for the PDB symbol-file plug-in.", true);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_symbolfilepdb_properties_def.expected_path,
+      GetGlobalPluginProperties().GetValueProperties(),
+      "Properties for the PDB symbol-file plug-in.",
+      /*is_global_property=*/true);
 }
 
 llvm::StringRef SymbolFilePDB::GetPluginDescriptionStatic() {
diff --git 
a/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp 
b/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
index a09bb356e3a8c..b16a708de55c5 100644
--- a/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
+++ b/lldb/source/Plugins/SymbolLocator/Debuginfod/SymbolLocatorDebuginfod.cpp
@@ -117,14 +117,11 @@ void SymbolLocatorDebuginfod::Initialize() {
 }
 
 void SymbolLocatorDebuginfod::DebuggerInitialize(Debugger &debugger) {
-  if (!PluginManager::GetSettingForSymbolLocatorPlugin(
-          debugger, PluginProperties::GetSettingName())) {
-    const bool is_global_setting = true;
-    PluginManager::CreateSettingForSymbolLocatorPlugin(
-        debugger, GetGlobalPluginProperties().GetValueProperties(),
-        "Properties for the Debuginfod Symbol Locator plug-in.",
-        is_global_setting);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_symbollocatordebuginfod_properties_def.expected_path,
+      GetGlobalPluginProperties().GetValueProperties(),
+      "Properties for the Debuginfod Symbol Locator plug-in.",
+      /*is_global_property=*/true);
 }
 
 void SymbolLocatorDebuginfod::Terminate() {
diff --git a/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp 
b/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp
index 740af59d0c1ab..b1b81fb0b0522 100644
--- a/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp
+++ b/lldb/source/Plugins/Trace/intel-pt/TraceIntelPT.cpp
@@ -15,6 +15,7 @@
 #include "TraceIntelPTBundleLoader.h"
 #include "TraceIntelPTBundleSaver.h"
 #include "TraceIntelPTConstants.h"
+#include "lldb/Core/Debugger.h"
 #include "lldb/Core/PluginManager.h"
 #include "lldb/Interpreter/OptionValueProperties.h"
 #include "lldb/Target/Process.h"
@@ -83,13 +84,11 @@ void TraceIntelPT::Initialize() {
 }
 
 void TraceIntelPT::DebuggerInitialize(Debugger &debugger) {
-  if (!PluginManager::GetSettingForProcessPlugin(
-          debugger, PluginProperties::GetSettingName())) {
-    const bool is_global_setting = true;
-    PluginManager::CreateSettingForTracePlugin(
-        debugger, GetGlobalProperties().GetValueProperties(),
-        "Properties for the intel-pt trace plug-in.", is_global_setting);
-  }
+  debugger.SetPropertiesAtPathIfNotExists(
+      g_traceintelpt_properties_def.expected_path,
+      GetGlobalPluginProperties().GetValueProperties(),
+      "Properties for the intel-pt trace plug-in.",
+      /*is_global_property=*/true);
 }
 
 void TraceIntelPT::Terminate() {

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to