[Lldb-commits] [lldb] 95bcf5d - [lldb] Compare registers by LLDB register number (#223704)
via lldb-commits
lldb-commits at lists.llvm.org
Tue Sep 15 09:54:54 PDT 2026
Author: Charles Zablit
Date: 2026-09-15T17:54:48+01:00
New Revision: 95bcf5d16a63e534e8ce0f039d8572734f87b5cd
URL: https://github.com/llvm/llvm-project/commit/95bcf5d16a63e534e8ce0f039d8572734f87b5cd
DIFF: https://github.com/llvm/llvm-project/commit/95bcf5d16a63e534e8ce0f039d8572734f87b5cd.diff
LOG: [lldb] Compare registers by LLDB register number (#223704)
Fix `GetIndexOfChildWithName`/`GetChildMemberWithName` on `Windows
x86_64` (Release builds), where comparing registers by RegisterInfo
pointer identity could spuriously fail to find sp/rsp in the GPR set.
Compare by `eRegisterKindLLDB` number instead.
Failing bot: https://ci-external.swift.org/job/lldb-windows/job/main
Added:
Modified:
lldb/include/lldb/ValueObject/ValueObjectRegister.h
lldb/source/ValueObject/ValueObjectRegister.cpp
Removed:
################################################################################
diff --git a/lldb/include/lldb/ValueObject/ValueObjectRegister.h b/lldb/include/lldb/ValueObject/ValueObjectRegister.h
index 57ee2eadce4fb..b52fa23838c51 100644
--- a/lldb/include/lldb/ValueObject/ValueObjectRegister.h
+++ b/lldb/include/lldb/ValueObject/ValueObjectRegister.h
@@ -78,6 +78,8 @@ class ValueObjectRegisterSet : public ValueObject {
std::optional<std::pair<size_t, const RegisterInfo *>>
LookupChildWithName(llvm::StringRef name);
+ static bool IsSameRegister(const RegisterInfo *a, const RegisterInfo *b);
+
// For ValueObject only
ValueObjectRegisterSet(const ValueObjectRegisterSet &) = delete;
const ValueObjectRegisterSet &
diff --git a/lldb/source/ValueObject/ValueObjectRegister.cpp b/lldb/source/ValueObject/ValueObjectRegister.cpp
index 432824e7e34fb..1a7a4560714bc 100644
--- a/lldb/source/ValueObject/ValueObjectRegister.cpp
+++ b/lldb/source/ValueObject/ValueObjectRegister.cpp
@@ -126,6 +126,11 @@ ValueObject *ValueObjectRegisterSet::CreateChildAtIndex(size_t idx) {
return nullptr;
}
+bool ValueObjectRegisterSet::IsSameRegister(const RegisterInfo *a,
+ const RegisterInfo *b) {
+ return a && b && a->kinds[eRegisterKindLLDB] == b->kinds[eRegisterKindLLDB];
+}
+
std::optional<std::pair<size_t, const RegisterInfo *>>
ValueObjectRegisterSet::LookupChildWithName(llvm::StringRef name) {
if (!m_reg_ctx_sp || !m_reg_set)
@@ -140,7 +145,7 @@ ValueObjectRegisterSet::LookupChildWithName(llvm::StringRef name) {
for (size_t i = 0; i < m_reg_set->num_registers; ++i) {
const RegisterInfo *contained_reg_info =
m_reg_ctx_sp->GetRegisterInfoAtIndex(m_reg_set->registers[i]);
- if (contained_reg_info == reg_info)
+ if (IsSameRegister(contained_reg_info, reg_info))
return std::make_pair(i, reg_info);
}
More information about the lldb-commits
mailing list