99 lines · python
1import gdbremote_testcase2from lldbsuite.test.decorators import *3from lldbsuite.test.lldbtest import *4from lldbsuite.test.lldbdwarf import *5 6 7class TestGdbRemote_qSupported(gdbremote_testcase.GdbRemoteTestCaseBase):8 def get_qSupported_dict(self, features=[]):9 self.build()10 self.set_inferior_startup_launch()11 12 # Start up the stub and start/prep the inferior.13 procs = self.prep_debug_monitor_and_inferior()14 self.add_qSupported_packets(features)15 16 # Run the packet stream.17 context = self.expect_gdbremote_sequence()18 self.assertIsNotNone(context)19 20 # Retrieve the qSupported features.21 return self.parse_qSupported_response(context)22 23 def test_qSupported_returns_known_stub_features(self):24 supported_dict = self.get_qSupported_dict()25 self.assertIsNotNone(supported_dict)26 self.assertGreater(len(supported_dict), 0)27 28 def test_qSupported_auvx(self):29 expected = (30 "+"31 if lldbplatformutil.getPlatform() in ["freebsd", "linux", "netbsd"]32 else "-"33 )34 supported_dict = self.get_qSupported_dict()35 self.assertEqual(supported_dict.get("qXfer:auxv:read", "-"), expected)36 37 def test_qSupported_libraries_svr4(self):38 expected = (39 "+"40 if lldbplatformutil.getPlatform() in ["freebsd", "linux", "netbsd"]41 else "-"42 )43 supported_dict = self.get_qSupported_dict()44 self.assertEqual(supported_dict.get("qXfer:libraries-svr4:read", "-"), expected)45 46 def test_qSupported_siginfo_read(self):47 expected = (48 "+" if lldbplatformutil.getPlatform() in ["freebsd", "linux"] else "-"49 )50 supported_dict = self.get_qSupported_dict()51 self.assertEqual(supported_dict.get("qXfer:siginfo:read", "-"), expected)52 53 def test_qSupported_QPassSignals(self):54 expected = (55 "+"56 if lldbplatformutil.getPlatform() in ["freebsd", "linux", "netbsd"]57 else "-"58 )59 supported_dict = self.get_qSupported_dict()60 self.assertEqual(supported_dict.get("QPassSignals", "-"), expected)61 62 @add_test_categories(["fork"])63 def test_qSupported_fork_events(self):64 supported_dict = self.get_qSupported_dict(["multiprocess+", "fork-events+"])65 self.assertEqual(supported_dict.get("multiprocess", "-"), "+")66 self.assertEqual(supported_dict.get("fork-events", "-"), "+")67 self.assertEqual(supported_dict.get("vfork-events", "-"), "-")68 69 @add_test_categories(["fork"])70 def test_qSupported_fork_events_without_multiprocess(self):71 supported_dict = self.get_qSupported_dict(["fork-events+"])72 self.assertEqual(supported_dict.get("multiprocess", "-"), "-")73 self.assertEqual(supported_dict.get("fork-events", "-"), "-")74 self.assertEqual(supported_dict.get("vfork-events", "-"), "-")75 76 @add_test_categories(["fork"])77 def test_qSupported_vfork_events(self):78 supported_dict = self.get_qSupported_dict(["multiprocess+", "vfork-events+"])79 self.assertEqual(supported_dict.get("multiprocess", "-"), "+")80 self.assertEqual(supported_dict.get("fork-events", "-"), "-")81 self.assertEqual(supported_dict.get("vfork-events", "-"), "+")82 83 @add_test_categories(["fork"])84 def test_qSupported_vfork_events_without_multiprocess(self):85 supported_dict = self.get_qSupported_dict(["vfork-events+"])86 self.assertEqual(supported_dict.get("multiprocess", "-"), "-")87 self.assertEqual(supported_dict.get("fork-events", "-"), "-")88 self.assertEqual(supported_dict.get("vfork-events", "-"), "-")89 90 # We need to be able to self.runCmd to get cpuinfo,91 # which is not possible when using a remote platform.92 @skipIfRemote93 def test_qSupported_memory_tagging(self):94 supported_dict = self.get_qSupported_dict()95 self.assertEqual(96 supported_dict.get("memory-tagging", "-"),97 "+" if self.isAArch64MTE() else "-",98 )99