[Lldb-commits] [lldb] [lldb] Cache register types by object UID and register size (PR #215874)
Bar Soloveychik via lldb-commits
lldb-commits at lists.llvm.org
Thu Aug 13 11:54:12 PDT 2026
================
@@ -8,8 +8,18 @@
#include "lldb/Utility/RegisterType.h"
+#include <atomic>
+
using namespace lldb_private;
+namespace {
+std::atomic<uint64_t> g_next_register_type_uid{1};
+}
+
+RegisterType::RegisterType(RegisterTypeKind kind, std::string id)
+ : m_kind(kind), m_id(std::move(id)),
+ m_uid(g_next_register_type_uid.fetch_add(1, std::memory_order_relaxed)) {}
----------------
barsolo2000 wrote:
A case I can think about:
1. Process A creates a `RegisterType` at address X.
2. The target owned builder caches the type using address X.
3. `Target::CreateProcess()` destroys Process A and its register types, but keeps the builder.
4. Process B creates a different type, and the allocator reuses address X.
5. An address based cache returns Process A’s stale type
Technically, its rare.. so whatever you think? I don't see a real harm in using UID.
https://github.com/llvm/llvm-project/pull/215874
More information about the lldb-commits
mailing list