1import lldb 2from lldbsuite.test.lldbtest import * 3from lldbsuite.test.decorators import * 4from lldbsuite.test.gdbclientutils import * 5from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase 6 7 8class TestGdbClientMemoryRegions(GDBRemoteTestBase): 9 def test(self): 10 """ 11 Test handling of overflowing memory regions. In particular, make sure 12 they don't trigger an infinite loop. 13 """ 14 15 class MyResponder(MockGDBServerResponder): 16 def qHostInfo(self): 17 return "ptrsize:8;endian:little;" 18 19 def qMemoryRegionInfo(self, addr): 20 if addr == 0: 21 return "start:0;size:8000000000000000;permissions:rw;" 22 if addr == 0x8000000000000000: 23 return "start:8000000000000000;size:8000000000000000;permissions:r;" 24 25 self.runCmd("log enable gdb-remote packets") 26 self.runCmd("log enable lldb temp") 27 self.server.responder = MyResponder() 28 target = self.dbg.CreateTarget("") 29 process = self.connect(target) 30 31 regions = process.GetMemoryRegions() 32 self.assertEqual(regions.GetSize(), 2) 33 34 region = lldb.SBMemoryRegionInfo() 35 self.assertTrue(regions.GetMemoryRegionAtIndex(0, region)) 36 self.assertEqual(region.GetRegionBase(), 0) 37 self.assertEqual(region.GetRegionEnd(), 0x8000000000000000) 38 self.assertTrue(region.IsWritable()) 39 40 self.assertTrue(regions.GetMemoryRegionAtIndex(1, region)) 41 self.assertEqual(region.GetRegionBase(), 0x8000000000000000) 42 self.assertEqual(region.GetRegionEnd(), 0xFFFFFFFFFFFFFFFF) 43 self.assertFalse(region.IsWritable()) 44