diff options
author | Todd Fiala <todd.fiala@gmail.com> | 2014-05-19 06:11:41 +0000 |
---|---|---|
committer | Todd Fiala <todd.fiala@gmail.com> | 2014-05-19 06:11:41 +0000 |
commit | 06fcbd95e8daeabc1d1cd8c0292f96ecd87c0259 (patch) | |
tree | a759d0363e274c594c6233582ca169d652807898 | |
parent | ff6131a958ad0b5f35896a55e63394972651e62a (diff) | |
download | bcm5719-llvm-06fcbd95e8daeabc1d1cd8c0292f96ecd87c0259.tar.gz bcm5719-llvm-06fcbd95e8daeabc1d1cd8c0292f96ecd87c0259.zip |
Added gdb remote test for one valid qRegisterInfo result.
Checks that at at least qRegisterInfo0 responds with a valid
register info reply packet. The packet is parsed and validates
that all keys come from the documented set of valid keys. It
then validates that a minimum set of expected keys
are present in the returned packet.
This test is set to pass on debugserver and fail on llgs TOT.
llvm-svn: 209109
-rw-r--r-- | lldb/test/tools/lldb-gdbserver/TestLldbGdbServer.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/lldb/test/tools/lldb-gdbserver/TestLldbGdbServer.py b/lldb/test/tools/lldb-gdbserver/TestLldbGdbServer.py index bbe5e4bcb3f..90f1ba2d36c 100644 --- a/lldb/test/tools/lldb-gdbserver/TestLldbGdbServer.py +++ b/lldb/test/tools/lldb-gdbserver/TestLldbGdbServer.py @@ -134,6 +134,40 @@ class LldbGdbServerTestCase(TestBase): def expect_gdbremote_sequence(self): return expect_lldb_gdbserver_replay(self, self.sock, self.test_sequence, self._TIMEOUT_SECONDS, self.logger) + _KNOWN_REGINFO_KEYS = [ + "name", + "alt-name", + "bitsize", + "offset", + "encoding", + "format", + "set", + "gcc", + "dwarf", + "generic", + "container-regs", + "invalidate-regs" + ] + + def assert_valid_reg_info_packet(self, reginfo_packet): + keyval_pairs = reginfo_packet.split(";") + self.assertTrue(len(keyval_pairs) >= 5) + + values = {} + for kv in keyval_pairs: + (key, val) = kv.split(':') + values[key] = val + # Ensure key is something we expect. + self.assertTrue(key in self._KNOWN_REGINFO_KEYS) + + # Check the bare-minimum expected set of register info keys. + self.assertTrue("name" in values) + self.assertTrue("bitsize" in values) + self.assertTrue("offset" in values) + self.assertTrue("encoding" in values) + self.assertTrue("format" in values) + + @debugserver_test def test_exe_starts_debugserver(self): self.init_debugserver_test() @@ -522,5 +556,41 @@ class LldbGdbServerTestCase(TestBase): self.buildDwarf() self.attach_commandline_kill_after_initial_stop() + def qRegisterInfo_returns_one_valid_result(self): + server = self.start_server() + self.assertIsNotNone(server) + + # Build launch args + launch_args = [os.path.abspath('a.out')] + + # Build the expected protocol stream + self.add_no_ack_remote_stream() + self.add_verified_launch_packets(launch_args) + self.test_sequence.add_log_lines( + ["read packet: $qRegisterInfo0#00", + { "direction":"send", "regex":r"^\$(.+);#\d{2}", "capture":{1:"reginfo_0"} }], + True) + + # Run the stream + context = self.expect_gdbremote_sequence() + self.assertIsNotNone(context) + self.assertIsNotNone(context.get("reginfo_0")) + self.assert_valid_reg_info_packet(context.get("reginfo_0")) + + @debugserver_test + @dsym_test + def test_qRegisterInfo_returns_one_valid_result_debugserver_dsym(self): + self.init_debugserver_test() + self.buildDsym() + self.qRegisterInfo_returns_one_valid_result() + + @llgs_test + @dwarf_test + @unittest2.expectedFailure() + def test_qRegisterInfo_returns_one_valid_result_llgs_dwarf(self): + self.init_llgs_test() + self.buildDwarf() + self.qRegisterInfo_returns_one_valid_result() + if __name__ == '__main__': unittest2.main() |