199451b44SJordan Rupprechtimport lldb 299451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 399451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 4*33c0f93fSPavel Labathfrom lldbsuite.test.gdbclientutils import * 5*33c0f93fSPavel Labathfrom lldbsuite.test.lldbgdbclient import GDBRemoteTestBase 699451b44SJordan Rupprecht 799451b44SJordan Rupprecht 899451b44SJordan Rupprechtclass TestGDBRemoteLoad(GDBRemoteTestBase): 999451b44SJordan Rupprecht 10f47a84bcSMichał Górny @expectedFailureAll(archs=["aarch64"], oslist=["freebsd"], 11f47a84bcSMichał Górny bugnumber="llvm.org/pr49414") 1299451b44SJordan Rupprecht def test_module_load_address(self): 1399451b44SJordan Rupprecht """Test that setting the load address of a module uses virtual addresses""" 1499451b44SJordan Rupprecht target = self.createTarget("a.yaml") 1599451b44SJordan Rupprecht process = self.connect(target) 1699451b44SJordan Rupprecht module = target.GetModuleAtIndex(0) 1799451b44SJordan Rupprecht self.assertTrue(module.IsValid()) 1899451b44SJordan Rupprecht self.assertTrue(target.SetModuleLoadAddress(module, 0).Success()) 1999451b44SJordan Rupprecht address = target.ResolveLoadAddress(0x2001) 2099451b44SJordan Rupprecht self.assertTrue(address.IsValid()) 2199451b44SJordan Rupprecht self.assertEqual(".data", address.GetSection().GetName()) 2299451b44SJordan Rupprecht 23f47a84bcSMichał Górny @expectedFailureAll(archs=["aarch64"], oslist=["freebsd"], 24f47a84bcSMichał Górny bugnumber="llvm.org/pr49414") 2599451b44SJordan Rupprecht def test_ram_load(self): 2699451b44SJordan Rupprecht """Test loading an object file to a target's ram""" 2799451b44SJordan Rupprecht target = self.createTarget("a.yaml") 2899451b44SJordan Rupprecht process = self.connect(target) 2999451b44SJordan Rupprecht self.dbg.HandleCommand("target modules load -l -s0") 3099451b44SJordan Rupprecht self.assertPacketLogContains([ 3199451b44SJordan Rupprecht "M1000,4:c3c3c3c3", 3299451b44SJordan Rupprecht "M1004,2:3232" 3399451b44SJordan Rupprecht ]) 3499451b44SJordan Rupprecht 3599451b44SJordan Rupprecht @skipIfXmlSupportMissing 36f47a84bcSMichał Górny @expectedFailureAll(archs=["aarch64"], oslist=["freebsd"], 37f47a84bcSMichał Górny bugnumber="llvm.org/pr49414") 3899451b44SJordan Rupprecht def test_flash_load(self): 3999451b44SJordan Rupprecht """Test loading an object file to a target's flash memory""" 4099451b44SJordan Rupprecht 4199451b44SJordan Rupprecht class Responder(MockGDBServerResponder): 4299451b44SJordan Rupprecht def qSupported(self, client_supported): 4399451b44SJordan Rupprecht return "PacketSize=3fff;QStartNoAckMode+;qXfer:memory-map:read+" 4499451b44SJordan Rupprecht 4599451b44SJordan Rupprecht def qXferRead(self, obj, annex, offset, length): 4699451b44SJordan Rupprecht if obj == "memory-map": 4799451b44SJordan Rupprecht return (self.MEMORY_MAP[offset:offset + length], 4899451b44SJordan Rupprecht offset + length < len(self.MEMORY_MAP)) 4999451b44SJordan Rupprecht return None, False 5099451b44SJordan Rupprecht 5199451b44SJordan Rupprecht def other(self, packet): 5299451b44SJordan Rupprecht if packet[0:11] == "vFlashErase": 5399451b44SJordan Rupprecht return "OK" 5499451b44SJordan Rupprecht if packet[0:11] == "vFlashWrite": 5599451b44SJordan Rupprecht return "OK" 5699451b44SJordan Rupprecht if packet == "vFlashDone": 5799451b44SJordan Rupprecht return "OK" 5899451b44SJordan Rupprecht return "" 5999451b44SJordan Rupprecht 6099451b44SJordan Rupprecht MEMORY_MAP = """<?xml version="1.0"?> 6199451b44SJordan Rupprecht<memory-map> 6299451b44SJordan Rupprecht <memory type="ram" start="0x0" length="0x1000"/> 6399451b44SJordan Rupprecht <memory type="flash" start="0x1000" length="0x1000"> 6499451b44SJordan Rupprecht <property name="blocksize">0x100</property> 6599451b44SJordan Rupprecht </memory> 6699451b44SJordan Rupprecht <memory type="ram" start="0x2000" length="0x1D400"/> 6799451b44SJordan Rupprecht</memory-map> 6899451b44SJordan Rupprecht""" 6999451b44SJordan Rupprecht 7099451b44SJordan Rupprecht self.server.responder = Responder() 7199451b44SJordan Rupprecht target = self.createTarget("a.yaml") 7299451b44SJordan Rupprecht process = self.connect(target) 7399451b44SJordan Rupprecht self.dbg.HandleCommand("target modules load -l -s0") 7499451b44SJordan Rupprecht self.assertPacketLogContains([ 7599451b44SJordan Rupprecht "vFlashErase:1000,100", 7699451b44SJordan Rupprecht "vFlashWrite:1000:\xc3\xc3\xc3\xc3", 7799451b44SJordan Rupprecht "vFlashWrite:1004:\x32\x32", 7899451b44SJordan Rupprecht "vFlashDone" 7999451b44SJordan Rupprecht ]) 80