blob: 28c07938410b93484512c5d80a12eb5ae3b5e010 [file]
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 "-",
)