[Lldb-commits] [lldb] [lldb] Only create RegisterTypeBuilderClang plugin once (PR #189393)

via lldb-commits lldb-commits at lists.llvm.org
Mon Mar 30 07:25:45 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: David Spickett (DavidSpickett)

<details>
<summary>Changes</summary>

This plugin creates types based on information from target XML, which is parsed only once per session. It has internal logic to reuse created types, but the plugin itself was being remade every time a type was requested.

---
Full diff: https://github.com/llvm/llvm-project/pull/189393.diff


2 Files Affected:

- (modified) lldb/include/lldb/Target/Target.h (+2) 
- (modified) lldb/source/Target/Target.cpp (+4-3) 


``````````diff
diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h
index 7907ed2f1a5f6..77b8f04a4b3b8 100644
--- a/lldb/include/lldb/Target/Target.h
+++ b/lldb/include/lldb/Target/Target.h
@@ -1842,6 +1842,8 @@ class Target : public std::enable_shared_from_this<Target>,
   /// signals you will have.
   llvm::StringMap<DummySignalValues> m_dummy_signals;
 
+  lldb::RegisterTypeBuilderSP m_register_type_builder_sp;
+
   static void ImageSearchPathsChanged(const PathMappingList &path_list,
                                       void *baton);
 
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 250d3f337a7bb..3a8d703badc8f 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -2637,9 +2637,10 @@ Target::GetScratchTypeSystemForLanguage(lldb::LanguageType language,
 CompilerType Target::GetRegisterType(const std::string &name,
                                      const lldb_private::RegisterFlags &flags,
                                      uint32_t byte_size) {
-  RegisterTypeBuilderSP provider = PluginManager::GetRegisterTypeBuilder(*this);
-  assert(provider);
-  return provider->GetRegisterType(name, flags, byte_size);
+  if (!m_register_type_builder_sp)
+    m_register_type_builder_sp = PluginManager::GetRegisterTypeBuilder(*this);
+  assert(m_register_type_builder_sp);
+  return m_register_type_builder_sp->GetRegisterType(name, flags, byte_size);
 }
 
 std::vector<lldb::TypeSystemSP>

``````````

</details>


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


More information about the lldb-commits mailing list