[Lldb-commits] [lldb] r210573 - Added gdb-remote tests around $qSupported.
Todd Fiala
todd.fiala at gmail.com
Tue Jun 10 13:16:31 PDT 2014
Author: tfiala
Date: Tue Jun 10 15:16:31 2014
New Revision: 210573
URL: http://llvm.org/viewvc/llvm-project?rev=210573&view=rev
Log:
Added gdb-remote tests around $qSupported.
Right now it just checks that qSupported returns at least
one recognized gdb stub feature.
Modified:
lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py
Modified: lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py?rev=210573&r1=210572&r2=210573&view=diff
==============================================================================
--- lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py (original)
+++ lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py Tue Jun 10 15:16:31 2014
@@ -49,7 +49,7 @@ class LldbGdbServerTestCase(TestBase):
self.set_inferior_startup_launch()
# Uncomment this code to force only a single test to run (by name).
- # if not re.search(r"(single_step|break)", self._testMethodName):
+ # if not re.search(r"qSupported", self._testMethodName):
# self.skipTest("focusing on one test")
def reset_test_sequence(self):
@@ -396,6 +396,51 @@ class LldbGdbServerTestCase(TestBase):
"send packet: $OK#00",
], True)
+ def add_qSupported_packets(self):
+ self.test_sequence.add_log_lines(
+ ["read packet: $qSupported#00",
+ {"direction":"send", "regex":r"^\$(.*)#[0-9a-fA-F]{2}", "capture":{1: "qSupported_response"}},
+ ], True)
+
+ _KNOWN_QSUPPORTED_STUB_FEATURES = [
+ "augmented-libraries-svr4-read",
+ "PacketSize",
+ "QStartNoAckMode",
+ "qXfer:auxv:read",
+ "qXfer:libraries:read",
+ "qXfer:libraries-svr4:read",
+ ]
+
+ def parse_qSupported_response(self, context):
+ self.assertIsNotNone(context)
+
+ raw_response = context.get("qSupported_response")
+ self.assertIsNotNone(raw_response)
+
+ # For values with key=val, the dict key and vals are set as expected. For feature+, feature- and feature?, the
+ # +,-,? is stripped from the key and set as the value.
+ supported_dict = {}
+ for match in re.finditer(r";?([^=;]+)(=([^;]+))?", raw_response):
+ key = match.group(1)
+ val = match.group(3)
+
+ # key=val: store as is
+ if val and len(val) > 0:
+ supported_dict[key] = val
+ else:
+ if len(key) < 2:
+ raise Exception("singular stub feature is too short: must be stub_feature{+,-,?}")
+ supported_type = key[-1]
+ key = key[:-1]
+ if not supported_type in ["+", "-", "?"]:
+ raise Exception("malformed stub feature: final character {} not in expected set (+,-,?)".format(supported_type))
+ supported_dict[key] = supported_type
+ # Ensure we know the supported element
+ if not key in self._KNOWN_QSUPPORTED_STUB_FEATURES:
+ raise Exception("unknown qSupported stub feature reported: %s" % key)
+
+ return supported_dict
+
def run_process_then_stop(self, run_seconds=1):
# Tell the stub to continue.
self.test_sequence.add_log_lines(
@@ -1882,6 +1927,37 @@ class LldbGdbServerTestCase(TestBase):
self.set_inferior_startup_launch()
self.single_step_only_steps_one_instruction()
+ def qSupported_returns_known_stub_features(self):
+ # Start up the stub and start/prep the inferior.
+ procs = self.prep_debug_monitor_and_inferior()
+ self.add_qSupported_packets()
+
+ # Run the packet stream.
+ context = self.expect_gdbremote_sequence()
+ self.assertIsNotNone(context)
+
+ # Retrieve the qSupported features.
+ supported_dict = self.parse_qSupported_response(context)
+ self.assertIsNotNone(supported_dict)
+ self.assertTrue(len(supported_dict) > 0)
+
+ @debugserver_test
+ @dsym_test
+ def test_qSupported_returns_known_stub_features_debugserver_dsym(self):
+ self.init_debugserver_test()
+ self.buildDsym()
+ self.set_inferior_startup_launch()
+ self.qSupported_returns_known_stub_features()
+
+ @llgs_test
+ @dwarf_test
+ @unittest2.expectedFailure()
+ def test_qSupported_returns_known_stub_features_llgs_dwarf(self):
+ self.init_llgs_test()
+ self.buildDwarf()
+ self.set_inferior_startup_launch()
+ self.qSupported_returns_known_stub_features()
+
if __name__ == '__main__':
unittest2.main()
More information about the lldb-commits
mailing list