74 lines · python
1import lldb2from lldbsuite.test.lldbtest import *3from lldbsuite.test.decorators import *4from lldbsuite.test.gdbclientutils import *5from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase6 7 8class TestGDBRemoteLoad(GDBRemoteTestBase):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 def test_ram_load(self):21 """Test loading an object file to a target's ram"""22 target = self.createTarget("a.yaml")23 process = self.connect(target)24 self.dbg.HandleCommand("target modules load -l -s0")25 self.assertPacketLogReceived(["M1000,4:c3c3c3c3", "M1004,2:3232"])26 27 @skipIfXmlSupportMissing28 def test_flash_load(self):29 """Test loading an object file to a target's flash memory"""30 31 class Responder(MockGDBServerResponder):32 def qSupported(self, client_supported):33 return "PacketSize=3fff;QStartNoAckMode+;qXfer:memory-map:read+"34 35 def qXferRead(self, obj, annex, offset, length):36 if obj == "memory-map":37 return (38 self.MEMORY_MAP[offset : offset + length],39 offset + length < len(self.MEMORY_MAP),40 )41 return None, False42 43 def other(self, packet):44 if packet[0:11] == "vFlashErase":45 return "OK"46 if packet[0:11] == "vFlashWrite":47 return "OK"48 if packet == "vFlashDone":49 return "OK"50 return ""51 52 MEMORY_MAP = """<?xml version="1.0"?>53<memory-map>54 <memory type="ram" start="0x0" length="0x1000"/>55 <memory type="flash" start="0x1000" length="0x1000">56 <property name="blocksize">0x100</property>57 </memory>58 <memory type="ram" start="0x2000" length="0x1D400"/>59</memory-map>60"""61 62 self.server.responder = Responder()63 target = self.createTarget("a.yaml")64 process = self.connect(target)65 self.dbg.HandleCommand("target modules load -l -s0")66 self.assertPacketLogReceived(67 [68 "vFlashErase:1000,100",69 "vFlashWrite:1000:\xc3\xc3\xc3\xc3",70 "vFlashWrite:1004:\x32\x32",71 "vFlashDone",72 ]73 )74