Skip to content

Commit 4b0beb4

Browse files
authored
Reapply "Fix error in unrecognized register name handling for "SBFram…e.register"" (llvm#88468)" (llvm#88535)
The only change is a fix for the "register" iterator test to not rely on particular register names. I mistook where the artificial "pc" register is generated. It isn't added to the register list or the register sets (except on arm where that's the name of the actual register), so I can't use it in this test. I instead just assert that the "register" generator produces the same list as flattening the register sets from "registers". This reverts commit 9f14914.
1 parent 9022d9c commit 4b0beb4

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

lldb/bindings/interface/SBFrameExtensions.i

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,16 @@ STRING_EXTENSION_OUTSIDE(SBFrame)
4444
def __init__(self, regs):
4545
self.regs = regs
4646

47+
def __iter__(self):
48+
return self.get_registers()
49+
50+
def get_registers(self):
51+
for i in range(0,len(self.regs)):
52+
rs = self.regs[i]
53+
for j in range (0,rs.num_children):
54+
reg = rs.GetChildAtIndex(j)
55+
yield reg
56+
4757
def __getitem__(self, key):
4858
if type(key) is str:
4959
for i in range(0,len(self.regs)):
@@ -52,7 +62,7 @@ STRING_EXTENSION_OUTSIDE(SBFrame)
5262
reg = rs.GetChildAtIndex(j)
5363
if reg.name == key: return reg
5464
else:
55-
return lldb.SBValue()
65+
return SBValue()
5666

5767
return registers_access(self.registers)
5868

lldb/test/API/python_api/frame/TestFrames.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ def test_get_arg_vals_for_call_stack(self):
7373
gpr_reg_set = lldbutil.get_GPRs(frame)
7474
pc_value = gpr_reg_set.GetChildMemberWithName("pc")
7575
self.assertTrue(pc_value, "We should have a valid PC.")
76-
pc_value_int = int(pc_value.GetValue(), 0)
76+
77+
7778
# Make sure on arm targets we dont mismatch PC value on the basis of thumb bit.
7879
# Frame PC will not have thumb bit set in case of a thumb
7980
# instruction as PC.
81+
pc_value_int = int(pc_value.GetValue(), 0)
8082
if self.getArchitecture() in ["arm", "armv7", "armv7k"]:
8183
pc_value_int &= ~1
8284
self.assertEqual(
@@ -91,7 +93,17 @@ def test_get_arg_vals_for_call_stack(self):
9193
frame.GetSP(),
9294
"SP gotten as a value should equal frame's GetSP",
9395
)
94-
96+
# Test that the "register" property's flat list matches the list from
97+
# the "registers" property that returns register sets:
98+
register_regs = set()
99+
flattened_regs = set()
100+
for reg_set in frame.registers:
101+
for reg in reg_set:
102+
flattened_regs.add(reg.name)
103+
for reg in frame.register:
104+
register_regs.add(reg.name)
105+
self.assertEqual(register_regs, flattened_regs, "register matches registers")
106+
95107
print("---", file=session)
96108
process.Continue()
97109

0 commit comments

Comments
 (0)