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