[Lldb-commits] [lldb] [lldb] Fix SBMemoryRegionInfoListExtensions iter to yield unique refe… (PR #144815)

via lldb-commits lldb-commits at lists.llvm.org
Fri Jun 20 11:48:53 PDT 2025


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 <zynli at 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.li at 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",
+            )



More information about the lldb-commits mailing list