brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 6caa5f8 Raw
103 lines · python
1"""2Tests debugserver support for MultiMemRead.3"""4 5import lldb6from lldbsuite.test.decorators import *7from lldbsuite.test.lldbtest import *8from lldbsuite.test import lldbutil9 10 11@skipUnlessDarwin12@skipIfOutOfTreeDebugserver13class TestCase(TestBase):14    def send_process_packet(self, packet_str):15        self.runCmd(f"proc plugin packet send {packet_str}", check=False)16        # The output is of the form:17        #  packet: <packet_str>18        #  response: <response>19        reply = self.res.GetOutput().split("\n")20        packet = reply[0].strip()21        response = reply[1].strip()22 23        self.assertTrue(packet.startswith("packet: "))24        self.assertTrue(response.startswith("response: "))25        return response[len("response: ") :]26 27    def check_invalid_packet(self, packet_str):28        reply = self.send_process_packet("packet_str")29        self.assertEqual(reply, "E03")30 31    def test_packets(self):32        self.build()33        source_file = lldb.SBFileSpec("main.c")34        target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(35            self, "break here", source_file36        )37 38        reply = self.send_process_packet("qSupported")39        self.assertIn("MultiMemRead+", reply)40 41        mem_address_var = thread.frames[0].FindVariable("memory")42        self.assertTrue(mem_address_var)43        mem_address = mem_address_var.GetValueAsUnsigned() + 4244 45        # no ":"46        self.check_invalid_packet("MultiMemRead")47        # missing ranges48        self.check_invalid_packet("MultiMemRead:")49        # needs at least one range50        self.check_invalid_packet("MultiMemRead:ranges:")51        # needs at least one range52        self.check_invalid_packet("MultiMemRead:ranges:,")53        # a range is a pair of numbers54        self.check_invalid_packet("MultiMemRead:ranges:10")55        # a range is a pair of numbers56        self.check_invalid_packet("MultiMemRead:ranges:10,")57        # range list must end with ;58        self.check_invalid_packet("MultiMemRead:ranges:10,2")59        self.check_invalid_packet("MultiMemRead:ranges:10,2,")60        self.check_invalid_packet("MultiMemRead:ranges:10,2,3")61        # ranges are pairs of numbers.62        self.check_invalid_packet("MultiMemRead:ranges:10,2,3;")63        # unrecognized field64        self.check_invalid_packet("MultiMemRead:ranges:10,2;blah:;")65        # unrecognized field66        self.check_invalid_packet("MultiMemRead:blah:;ranges:10,2;")67 68        # Zero-length reads are ok.69        reply = self.send_process_packet("MultiMemRead:ranges:0,0;")70        self.assertEqual(reply, "0;")71 72        # Debugserver is permissive with trailing commas.73        reply = self.send_process_packet("MultiMemRead:ranges:10,2,;")74        self.assertEqual(reply, "0;")75        reply = self.send_process_packet(f"MultiMemRead:ranges:{mem_address:x},2,;")76        self.assertEqual(reply, "2;ab")77 78        reply = self.send_process_packet("MultiMemRead:ranges:10,2;")79        self.assertEqual(reply, "0;")80        reply = self.send_process_packet(f"MultiMemRead:ranges:{mem_address:x},0;")81        self.assertEqual(reply, "0;")82        reply = self.send_process_packet(f"MultiMemRead:ranges:{mem_address:x},2;")83        self.assertEqual(reply, "2;ab")84        reply = self.send_process_packet(85            f"MultiMemRead:ranges:{mem_address:x},2,{mem_address+2:x},4;"86        )87        self.assertEqual(reply, "2,4;abcdef")88        reply = self.send_process_packet(89            f"MultiMemRead:ranges:{mem_address:x},2,{mem_address+2:x},4,{mem_address+6:x},8;"90        )91        self.assertEqual(reply, "2,4,8;abcdefghijklmn")92 93        # Test zero length in the middle.94        reply = self.send_process_packet(95            f"MultiMemRead:ranges:{mem_address:x},2,{mem_address+2:x},0,{mem_address+6:x},8;"96        )97        self.assertEqual(reply, "2,0,8;abghijklmn")98        # Test zero length in the end.99        reply = self.send_process_packet(100            f"MultiMemRead:ranges:{mem_address:x},2,{mem_address+2:x},4,{mem_address+6:x},0;"101        )102        self.assertEqual(reply, "2,4,0;abcdef")103