| import gdbremote_testcase |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test.lldbdwarf import * |
| |
| |
| class TestGdbRemote_qSupported(gdbremote_testcase.GdbRemoteTestCaseBase): |
| def get_qSupported_dict(self, features=[]): |
| self.build() |
| self.set_inferior_startup_launch() |
| |
| # Start up the stub and start/prep the inferior. |
| procs = self.prep_debug_monitor_and_inferior() |
| self.add_qSupported_packets(features) |
| |
| # Run the packet stream. |
| context = self.expect_gdbremote_sequence() |
| self.assertIsNotNone(context) |
| |
| # Retrieve the qSupported features. |
| return self.parse_qSupported_response(context) |
| |
| def test_qSupported_returns_known_stub_features(self): |
| supported_dict = self.get_qSupported_dict() |
| self.assertIsNotNone(supported_dict) |
| self.assertGreater(len(supported_dict), 0) |
| |
| def test_qSupported_auvx(self): |
| expected = ( |
| "+" |
| if lldbplatformutil.getPlatform() in ["freebsd", "linux", "netbsd"] |
| else "-" |
| ) |
| supported_dict = self.get_qSupported_dict() |
| self.assertEqual(supported_dict.get("qXfer:auxv:read", "-"), expected) |
| |
| def test_qSupported_libraries_svr4(self): |
| expected = ( |
| "+" |
| if lldbplatformutil.getPlatform() in ["freebsd", "linux", "netbsd"] |
| else "-" |
| ) |
| supported_dict = self.get_qSupported_dict() |
| self.assertEqual(supported_dict.get("qXfer:libraries-svr4:read", "-"), expected) |
| |
| def test_qSupported_siginfo_read(self): |
| expected = ( |
| "+" if lldbplatformutil.getPlatform() in ["freebsd", "linux"] else "-" |
| ) |
| supported_dict = self.get_qSupported_dict() |
| self.assertEqual(supported_dict.get("qXfer:siginfo:read", "-"), expected) |
| |
| def test_qSupported_QPassSignals(self): |
| expected = ( |
| "+" |
| if lldbplatformutil.getPlatform() in ["freebsd", "linux", "netbsd"] |
| else "-" |
| ) |
| supported_dict = self.get_qSupported_dict() |
| self.assertEqual(supported_dict.get("QPassSignals", "-"), expected) |
| |
| @add_test_categories(["fork"]) |
| def test_qSupported_fork_events(self): |
| supported_dict = self.get_qSupported_dict(["multiprocess+", "fork-events+"]) |
| self.assertEqual(supported_dict.get("multiprocess", "-"), "+") |
| self.assertEqual(supported_dict.get("fork-events", "-"), "+") |
| self.assertEqual(supported_dict.get("vfork-events", "-"), "-") |
| |
| @add_test_categories(["fork"]) |
| def test_qSupported_fork_events_without_multiprocess(self): |
| supported_dict = self.get_qSupported_dict(["fork-events+"]) |
| self.assertEqual(supported_dict.get("multiprocess", "-"), "-") |
| self.assertEqual(supported_dict.get("fork-events", "-"), "-") |
| self.assertEqual(supported_dict.get("vfork-events", "-"), "-") |
| |
| @add_test_categories(["fork"]) |
| def test_qSupported_vfork_events(self): |
| supported_dict = self.get_qSupported_dict(["multiprocess+", "vfork-events+"]) |
| self.assertEqual(supported_dict.get("multiprocess", "-"), "+") |
| self.assertEqual(supported_dict.get("fork-events", "-"), "-") |
| self.assertEqual(supported_dict.get("vfork-events", "-"), "+") |
| |
| @add_test_categories(["fork"]) |
| def test_qSupported_vfork_events_without_multiprocess(self): |
| supported_dict = self.get_qSupported_dict(["vfork-events+"]) |
| self.assertEqual(supported_dict.get("multiprocess", "-"), "-") |
| self.assertEqual(supported_dict.get("fork-events", "-"), "-") |
| self.assertEqual(supported_dict.get("vfork-events", "-"), "-") |
| |
| # We need to be able to self.runCmd to get cpuinfo, |
| # which is not possible when using a remote platform. |
| @skipIfRemote |
| def test_qSupported_memory_tagging(self): |
| supported_dict = self.get_qSupported_dict() |
| self.assertEqual( |
| supported_dict.get("memory-tagging", "-"), |
| "+" if self.isAArch64MTE() else "-", |
| ) |