Skip to content

Commit 510cca8

Browse files
committed
Add test for a region that covers more than one actual region, plus one that takes a full region and a sub range of a second region
1 parent afb0a6a commit 510cca8

File tree

2 files changed

+98
-21
lines changed

2 files changed

+98
-21
lines changed

lldb/test/API/functionalities/process_save_core_minidump/TestProcessSaveCoreMinidumpYaml.py

Lines changed: 94 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from lldbsuite.test import lldbutil
1010
from dataclass import dataclass
1111

12+
1213
class AddressRange:
1314
begin: int
1415
end: int
@@ -26,27 +27,35 @@ def process_from_yaml(self, yaml_file):
2627
self.process = self.target.LoadCore(minidump_path)
2728
return self.process
2829

29-
def validate_regions_saved_correctly(self, core_process, expected_region, expected_invalid_region=None):
30-
""" Validate that the expected_region is saved in the core_proc, and that the expected invalid region is not saved, if not not none. """
30+
def validate_regions_saved_correctly(
31+
self, core_process, expected_region, expected_invalid_region=None
32+
):
33+
"""Validate that the expected_region is saved in the core_proc, and that the expected invalid region is not saved, if not not none."""
3134

32-
# Validate we can read the entire expected_region
33-
error = lldb.SBError()
34-
core_process.ReadMemory(expected_region.begin, expected_region.end - expected_region.begin, error)
35-
self.assertTrue(error.Success(), error.GetCString())
35+
# Validate we can read the entire expected_region
36+
error = lldb.SBError()
37+
core_process.ReadMemory(
38+
expected_region.begin, expected_region.end - expected_region.begin, error
39+
)
40+
self.assertTrue(error.Success(), error.GetCString())
3641

37-
# Validate we can't read before and after the expected_region
38-
core_process.ReadMemory(expected_region.begin - 1, 1, error)
39-
self.assertTrue(error.Fail(), error.GetCString())
42+
# Validate we can't read before and after the expected_region
43+
core_process.ReadMemory(expected_region.begin - 1, 1, error)
44+
self.assertTrue(error.Fail(), error.GetCString())
4045

41-
core_process.ReadMemory(expected_region.end + 1, 1, error)
42-
self.assertTrue(error.Fail(), error.GetCString())
46+
core_process.ReadMemory(expected_region.end + 1, 1, error)
47+
self.assertTrue(error.Fail(), error.GetCString())
4348

44-
if expected_invalid_region is None:
45-
return
49+
if expected_invalid_region is None:
50+
return
4651

47-
# Validate we can't read the original_region
48-
core_process.ReadMemory(expected_invalid_region.begin, expected_invalid_region.end - expected_invalid_region.end, error)
49-
self.assertTrue(error.Success(), error.GetCString())
52+
# Validate we can't read the original_region
53+
core_process.ReadMemory(
54+
expected_invalid_region.begin,
55+
expected_invalid_region.end - expected_invalid_region.end,
56+
error,
57+
)
58+
self.assertTrue(error.Success(), error.GetCString())
5059

5160
def test_saving_sub_memory_range(self):
5261
"""
@@ -76,7 +85,9 @@ def test_saving_sub_memory_range(self):
7685

7786
expected_address_range = AddressRange(begin, end)
7887
expected_invalid_range = AddressRange(begin, 0x2020)
79-
self.validate_regions_saved_correctly(core_process, expected_address_range, expected_invalid_range)
88+
self.validate_regions_saved_correctly(
89+
core_process, expected_address_range, expected_invalid_range
90+
)
8091

8192
def test_saving_super_memory_range(self):
8293
"""
@@ -106,7 +117,9 @@ def test_saving_super_memory_range(self):
106117

107118
expected_address_range = AddressRange(begin, end)
108119
expected_invalid_range = AddressRange(begin - 16, end + 16)
109-
self.validate_regions_saved_correctly(core_process, expected_address_range, expected_invalid_range)
120+
self.validate_regions_saved_correctly(
121+
core_process, expected_address_range, expected_invalid_range
122+
)
110123

111124
def test_region_that_goes_out_of_bounds(self):
112125
"""
@@ -134,7 +147,9 @@ def test_region_that_goes_out_of_bounds(self):
134147

135148
expected_address_range = AddressRange(begin, end)
136149
expected_invalid_range = AddressRange(begin - 16, end + 16)
137-
self.validate_regions_saved_correctly(core_process, expected_address_range, expected_invalid_range)
150+
self.validate_regions_saved_correctly(
151+
core_process, expected_address_range, expected_invalid_range
152+
)
138153

139154
def test_region_that_starts_out_of_bounds(self):
140155
"""
@@ -162,4 +177,63 @@ def test_region_that_starts_out_of_bounds(self):
162177

163178
expected_address_range = AddressRange(begin, end)
164179
expected_invalid_range = AddressRange(begin - 16, end)
165-
self.validate_regions_saved_correctly(core_process, expected_address_range, expected_invalid_range)
180+
self.validate_regions_saved_correctly(
181+
core_process, expected_address_range, expected_invalid_range
182+
)
183+
184+
def test_region_spans_multiple_regions(self):
185+
"""
186+
Validate we can save a Minidump for a custom region
187+
that includes a start in a (---) page but ends in a valid page.
188+
"""
189+
yaml = "minidump_mem64.yaml"
190+
proc = self.process_from_yaml(yaml)
191+
new_minidump_path = self.getBuildArtifact(__name__ + ".dmp")
192+
options = lldb.SBSaveCoreOptions()
193+
options.SetOutputFile(lldb.SBFileSpec(new_minidump_path))
194+
options.SetPluginName("minidump")
195+
options.SetStyle(lldb.eSaveCoreCustomOnly)
196+
197+
size = 0x1000
198+
begin = 0x5000
199+
end = begin + size
200+
custom_range = lldb.SBMemoryRegionInfo("", begin, end, 3, True, False)
201+
options.AddMemoryRegionToSave(custom_range)
202+
203+
error = proc.SaveCore(options)
204+
self.assertTrue(error.Success(), error.GetCString())
205+
core_target = self.dbg.CreateTarget(None)
206+
core_process = core_target.LoadCore(new_minidump_path)
207+
208+
expected_address_range = AddressRange(begin, end)
209+
self.validate_regions_saved_correctly(core_process, expected_address_range)
210+
211+
def test_region_spans_multiple_regions_with_one_subrange(self):
212+
"""
213+
Validate we can save a Minidump for a custom region
214+
that includes a start in a (---) page but ends in a valid page.
215+
"""
216+
yaml = "minidump_mem64.yaml"
217+
proc = self.process_from_yaml(yaml)
218+
new_minidump_path = self.getBuildArtifact(__name__ + ".dmp")
219+
options = lldb.SBSaveCoreOptions()
220+
options.SetOutputFile(lldb.SBFileSpec(new_minidump_path))
221+
options.SetPluginName("minidump")
222+
options.SetStyle(lldb.eSaveCoreCustomOnly)
223+
224+
size = 0x800
225+
begin = 0x5000
226+
end = begin + size
227+
custom_range = lldb.SBMemoryRegionInfo("", begin, end, 3, True, False)
228+
options.AddMemoryRegionToSave(custom_range)
229+
230+
error = proc.SaveCore(options)
231+
self.assertTrue(error.Success(), error.GetCString())
232+
core_target = self.dbg.CreateTarget(None)
233+
core_process = core_target.LoadCore(new_minidump_path)
234+
235+
expected_address_range = AddressRange(begin, end)
236+
expected_invalid_range = AddressRange(begin, begin + 0x1000)
237+
self.validate_regions_saved_correctly(
238+
core_process, expected_address_range, expected_invalid_range
239+
)

lldb/test/API/functionalities/process_save_core_minidump/minidump_mem64.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ Streams:
3030
Data Size: 0x400
3131
Content : ''
3232
- Start of Memory Range: 0x5000
33-
Data Size: 0x2000
33+
Data Size: 0x500
34+
Content : ''
35+
- Start of Memory Range: 0x5500
36+
Data Size: 0x500
3437
Content : ''
3538
...

0 commit comments

Comments
 (0)