1import lldb 2from lldbsuite.test.lldbtest import * 3from lldbsuite.test.decorators import * 4from gdbclientutils import * 5 6 7class TestGDBRemoteLoad(GDBRemoteTestBase): 8 9 def setUp(self): 10 super(TestGDBRemoteLoad, self).setUp() 11 self._initial_platform = lldb.DBG.GetSelectedPlatform() 12 13 def tearDown(self): 14 lldb.DBG.SetSelectedPlatform(self._initial_platform) 15 super(TestGDBRemoteLoad, self).tearDown() 16 17 def test_module_load_address(self): 18 """Test that setting the load address of a module uses virtual addresses""" 19 target = self.createTarget("a.yaml") 20 process = self.connect(target) 21 module = target.GetModuleAtIndex(0) 22 self.assertTrue(module.IsValid()) 23 self.assertTrue(target.SetModuleLoadAddress(module, 0).Success()) 24 address = target.ResolveLoadAddress(0x2001) 25 self.assertTrue(address.IsValid()) 26 self.assertEqual(".data", address.GetSection().GetName()) 27 28 def test_ram_load(self): 29 """Test loading an object file to a target's ram""" 30 target = self.createTarget("a.yaml") 31 process = self.connect(target) 32 self.dbg.HandleCommand("target modules load -l -s0") 33 self.assertPacketLogContains([ 34 "M1000,4:c3c3c3c3", 35 "M1004,2:3232" 36 ]) 37 38 @skipIfXmlSupportMissing 39 def test_flash_load(self): 40 """Test loading an object file to a target's flash memory""" 41 42 class Responder(MockGDBServerResponder): 43 def qSupported(self, client_supported): 44 return "PacketSize=3fff;QStartNoAckMode+;qXfer:memory-map:read+" 45 46 def qXferRead(self, obj, annex, offset, length): 47 if obj == "memory-map": 48 return (self.MEMORY_MAP[offset:offset + length], 49 offset + length < len(self.MEMORY_MAP)) 50 return None, False 51 52 def other(self, packet): 53 if packet[0:11] == "vFlashErase": 54 return "OK" 55 if packet[0:11] == "vFlashWrite": 56 return "OK" 57 if packet == "vFlashDone": 58 return "OK" 59 return "" 60 61 MEMORY_MAP = """<?xml version="1.0"?> 62<memory-map> 63 <memory type="ram" start="0x0" length="0x1000"/> 64 <memory type="flash" start="0x1000" length="0x1000"> 65 <property name="blocksize">0x100</property> 66 </memory> 67 <memory type="ram" start="0x2000" length="0x1D400"/> 68</memory-map> 69""" 70 71 self.server.responder = Responder() 72 target = self.createTarget("a.yaml") 73 process = self.connect(target) 74 self.dbg.HandleCommand("target modules load -l -s0") 75 self.assertPacketLogContains([ 76 "vFlashErase:1000,100", 77 "vFlashWrite:1000:\xc3\xc3\xc3\xc3", 78 "vFlashWrite:1004:\x32\x32", 79 "vFlashDone" 80 ]) 81