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