https://github.com/zyn-li updated https://github.com/llvm/llvm-project/pull/144815
>From 16792f7dffae9ef95a3a09c2dbaa6731b07e0ea7 Mon Sep 17 00:00:00 2001 From: Zhiyuan Li <zy...@meta.com> Date: Wed, 18 Jun 2025 16:49:12 -0700 Subject: [PATCH 1/2] [lldb] Fix SBMemoryRegionInfoListExtensions iter to yield unique references --- .../SBMemoryRegionInfoListExtensions.i | 2 +- .../find_in_memory/TestFindInMemory.py | 24 ++++++++++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i b/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i index 29c0179c0ffe3..f565f45880119 100644 --- a/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i +++ b/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i @@ -9,8 +9,8 @@ '''Iterate over all the memory regions in a lldb.SBMemoryRegionInfoList object.''' import lldb size = self.GetSize() - region = lldb.SBMemoryRegionInfo() for i in range(size): + region = lldb.SBMemoryRegionInfo() self.GetMemoryRegionAtIndex(i, region) yield region %} diff --git a/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py b/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py index 1ef37d2ec9898..4eabbb6e46774 100644 --- a/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py +++ b/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py @@ -154,14 +154,32 @@ def test_find_in_memory_unaligned(self): self.assertEqual(addr, lldb.LLDB_INVALID_ADDRESS) def test_memory_info_list_iterable(self): - """Make sure the SBMemoryRegionInfoList is iterable""" + """Make sure the SBMemoryRegionInfoList is iterable and each yielded object is unique""" self.assertTrue(self.process, PROCESS_IS_VALID) self.assertState(self.process.GetState(), lldb.eStateStopped, PROCESS_STOPPED) info_list = self.process.GetMemoryRegions() self.assertTrue(info_list.GetSize() > 0) + + collected_info = [] try: - for info in info_list: - pass + for region in info_list: + collected_info.append(region) except Exception: self.fail("SBMemoryRegionInfoList is not iterable") + + self.assertTrue(len(collected_info) >= 2, "Need at least 2 items") + self.assertEqual(len(collected_info), info_list.GetSize(), "Should have collected all items") + + for i in range(len(collected_info)): + region = lldb.SBMemoryRegionInfo() + info_list.GetMemoryRegionAtIndex(i, region) + + self.assertEqual(collected_info[i].GetRegionBase(), region.GetRegionBase(), + f"items {i}: iterator data should match index access data") + self.assertEqual(collected_info[i].GetRegionEnd(), region.GetRegionEnd(), + f"items {i}: iterator data should match index access data") + + if len(collected_info) >= 2: + self.assertNotEqual(collected_info[0].GetRegionBase(), collected_info[1].GetRegionBase(), + "Different items should have different base addresses") >From b3015471bff73981807174d9913a144590126e17 Mon Sep 17 00:00:00 2001 From: zyn-li <zhiyuan.zyn...@gmail.com> Date: Fri, 20 Jun 2025 11:47:18 -0700 Subject: [PATCH 2/2] use SBMemoryRegionInfo equality operator in test --- .../find_in_memory/TestFindInMemory.py | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py b/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py index 4eabbb6e46774..d61fdb16e2a02 100644 --- a/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py +++ b/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py @@ -163,23 +163,24 @@ def test_memory_info_list_iterable(self): collected_info = [] try: - for region in info_list: - collected_info.append(region) + for info in info_list: + collected_info.append(info) except Exception: self.fail("SBMemoryRegionInfoList is not iterable") - - self.assertTrue(len(collected_info) >= 2, "Need at least 2 items") - self.assertEqual(len(collected_info), info_list.GetSize(), "Should have collected all items") for i in range(len(collected_info)): region = lldb.SBMemoryRegionInfo() info_list.GetMemoryRegionAtIndex(i, region) - - self.assertEqual(collected_info[i].GetRegionBase(), region.GetRegionBase(), - f"items {i}: iterator data should match index access data") - self.assertEqual(collected_info[i].GetRegionEnd(), region.GetRegionEnd(), - f"items {i}: iterator data should match index access data") - + + self.assertEqual( + collected_info[i], + region, + f"items {i}: iterator data should match index access data", + ) + if len(collected_info) >= 2: - self.assertNotEqual(collected_info[0].GetRegionBase(), collected_info[1].GetRegionBase(), - "Different items should have different base addresses") + self.assertNotEqual( + collected_info[0].GetRegionBase(), + collected_info[1].GetRegionBase(), + "Different items should have different base addresses", + ) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits