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