aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Kudrin <ikudrin@accesssoftek.com>2025-08-13 14:15:45 -0700
committerGitHub <noreply@github.com>2025-08-13 14:15:45 -0700
commit36c2a6696853020ffc0072566b1f5e77efe96d0c (patch)
treeb4cd62cc1d6bf0ca415a39000eb5f6260a499a73
parent8061cae756aecf0da689ba31e0e14bf2b37b5e7f (diff)
downloadllvm-36c2a6696853020ffc0072566b1f5e77efe96d0c.zip
llvm-36c2a6696853020ffc0072566b1f5e77efe96d0c.tar.gz
llvm-36c2a6696853020ffc0072566b1f5e77efe96d0c.tar.bz2
[lldb][test] Make TestFindRangesInMemory.py more robust (#152817)
`GetHeapRanges()` could return two overlapping ranges because it did not check whether `heap_pointer1` lies within the range returned for `heap_pointer2`. This could result in a test failure in `test_find_ranges_in_memory_two_matches` when `process.FindRangesInMemory()` returned 3 instead of 2. The patch ensures that `GetHeapRanges()` returns either two non-overlapping ranges or one range covering both heap pointers. The issue was probably introduced in #111951
-rw-r--r--lldb/test/API/python_api/find_in_memory/address_ranges_helper.py33
1 files changed, 20 insertions, 13 deletions
diff --git a/lldb/test/API/python_api/find_in_memory/address_ranges_helper.py b/lldb/test/API/python_api/find_in_memory/address_ranges_helper.py
index dcceca6..102f2b0 100644
--- a/lldb/test/API/python_api/find_in_memory/address_ranges_helper.py
+++ b/lldb/test/API/python_api/find_in_memory/address_ranges_helper.py
@@ -55,27 +55,34 @@ def GetRangeFromAddrValue(test_base, addr, shrink=False):
return lldb.SBAddressRange(start, size)
-def IsWithinRange(addr, size, range, target):
- start_addr = range.GetBaseAddress().GetLoadAddress(target)
- end_addr = start_addr + range.GetByteSize()
- addr = addr.GetValueAsUnsigned()
- return addr >= start_addr and addr + size <= end_addr
-
-
def GetHeapRanges(test_base, shrink=False):
frame = test_base.thread.GetSelectedFrame()
ex = frame.EvaluateExpression("heap_pointer1")
test_base.assertTrue(ex.IsValid())
- range = GetRangeFromAddrValue(test_base, ex, shrink)
- addr_ranges = lldb.SBAddressRangeList()
- addr_ranges.Append(range)
+ range1 = GetRangeFromAddrValue(test_base, ex, shrink)
+ range1_start = range1.GetBaseAddress().GetLoadAddress(test_base.target)
+ range1_end = range1_start + range1.GetByteSize()
ex = frame.EvaluateExpression("heap_pointer2")
test_base.assertTrue(ex.IsValid())
- size = len(DOUBLE_INSTANCE_PATTERN_HEAP)
- if not IsWithinRange(ex, size, addr_ranges[0], test_base.target):
- addr_ranges.Append(GetRangeFromAddrValue(test_base, ex, shrink))
+ range2 = GetRangeFromAddrValue(test_base, ex, shrink)
+ range2_start = range2.GetBaseAddress().GetLoadAddress(test_base.target)
+ range2_end = range2_start + range2.GetByteSize()
+
+ addr_ranges = lldb.SBAddressRangeList()
+
+ if range1_end < range2_start or range2_end < range1_start:
+ # The ranges do not overlap; add them both.
+ addr_ranges.Append(range1)
+ addr_ranges.Append(range2)
+ else:
+ # Merge overlapping ranges.
+ base = min(range1_start, range2_start)
+ end = max(range1_end, range2_end)
+ start = lldb.SBAddress(base, test_base.target)
+ size = end - base
+ addr_ranges.Append(lldb.SBAddressRange(start, size))
return addr_ranges