[Lldb-commits] [lldb] [lldb] Only create RegisterTypeBuilderClang plugin once (PR #189393)
David Spickett via lldb-commits
lldb-commits at lists.llvm.org
Mon Mar 30 07:25:00 PDT 2026
https://github.com/DavidSpickett created https://github.com/llvm/llvm-project/pull/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.
>From edac15390ee7bc9f66dd0a715536b84ffcd59a68 Mon Sep 17 00:00:00 2001
From: David Spickett <david.spickett at arm.com>
Date: Mon, 30 Mar 2026 14:07:58 +0000
Subject: [PATCH] [lldb] Only create RegisterTypeBuilderClang plugin once
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.
---
lldb/include/lldb/Target/Target.h | 2 ++
lldb/source/Target/Target.cpp | 7 ++++---
2 files changed, 6 insertions(+), 3 deletions(-)
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>
More information about the lldb-commits
mailing list