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

via lldb-commits lldb-commits at lists.llvm.org
Tue Mar 31 01:33:49 PDT 2026


Author: David Spickett
Date: 2026-03-31T09:33:44+01:00
New Revision: 0f75ecf2326d70394026277d9b40f6e53434c6da

URL: https://github.com/llvm/llvm-project/commit/0f75ecf2326d70394026277d9b40f6e53434c6da
DIFF: https://github.com/llvm/llvm-project/commit/0f75ecf2326d70394026277d9b40f6e53434c6da.diff

LOG: [lldb] Only create RegisterTypeBuilderClang plugin once (#189393)

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.

Added: 
    

Modified: 
    lldb/include/lldb/Target/Target.h
    lldb/source/Target/Target.cpp

Removed: 
    


################################################################################
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 500e4e27fe992..2a3832225f9b7 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>


        


More information about the lldb-commits mailing list