Skip to content

Commit 16792f7

Browse files
author
Zhiyuan Li
committed
[lldb] Fix SBMemoryRegionInfoListExtensions iter to yield unique references
1 parent 8c3fbaf commit 16792f7

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
'''Iterate over all the memory regions in a lldb.SBMemoryRegionInfoList object.'''
1010
import lldb
1111
size = self.GetSize()
12-
region = lldb.SBMemoryRegionInfo()
1312
for i in range(size):
13+
region = lldb.SBMemoryRegionInfo()
1414
self.GetMemoryRegionAtIndex(i, region)
1515
yield region
1616
%}

lldb/test/API/python_api/find_in_memory/TestFindInMemory.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,14 +154,32 @@ def test_find_in_memory_unaligned(self):
154154
self.assertEqual(addr, lldb.LLDB_INVALID_ADDRESS)
155155

156156
def test_memory_info_list_iterable(self):
157-
"""Make sure the SBMemoryRegionInfoList is iterable"""
157+
"""Make sure the SBMemoryRegionInfoList is iterable and each yielded object is unique"""
158158
self.assertTrue(self.process, PROCESS_IS_VALID)
159159
self.assertState(self.process.GetState(), lldb.eStateStopped, PROCESS_STOPPED)
160160

161161
info_list = self.process.GetMemoryRegions()
162162
self.assertTrue(info_list.GetSize() > 0)
163+
164+
collected_info = []
163165
try:
164-
for info in info_list:
165-
pass
166+
for region in info_list:
167+
collected_info.append(region)
166168
except Exception:
167169
self.fail("SBMemoryRegionInfoList is not iterable")
170+
171+
self.assertTrue(len(collected_info) >= 2, "Need at least 2 items")
172+
self.assertEqual(len(collected_info), info_list.GetSize(), "Should have collected all items")
173+
174+
for i in range(len(collected_info)):
175+
region = lldb.SBMemoryRegionInfo()
176+
info_list.GetMemoryRegionAtIndex(i, region)
177+
178+
self.assertEqual(collected_info[i].GetRegionBase(), region.GetRegionBase(),
179+
f"items {i}: iterator data should match index access data")
180+
self.assertEqual(collected_info[i].GetRegionEnd(), region.GetRegionEnd(),
181+
f"items {i}: iterator data should match index access data")
182+
183+
if len(collected_info) >= 2:
184+
self.assertNotEqual(collected_info[0].GetRegionBase(), collected_info[1].GetRegionBase(),
185+
"Different items should have different base addresses")

0 commit comments

Comments
 (0)