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