[Lldb-commits] [lldb] r209109 - Added gdb remote test for one valid qRegisterInfo result.
Todd Fiala
todd.fiala at gmail.com
Mon May 19 15:49:41 PDT 2014
First batch of query/multi-response gdb remote protocol tests
(qRegisterInfo query/response the first usage thereof) went into TOT here:
tfiala-macbookpro:lldb tfiala$ svn commit
Sending test/tools/lldb-gdbserver/TestLldbGdbServer.py
Sending test/tools/lldb-gdbserver/lldbgdbserverutils.py
Sending test/tools/lldb-gdbserver/main.cpp
Transmitting file data ...
Committed revision 209170
On Mon, May 19, 2014 at 1:45 PM, Todd Fiala <tfiala at google.com> wrote:
> Yep, going to do that :-)
>
> Almost done.
>
>
> On Mon, May 19, 2014 at 1:29 PM, Greg Clayton <gclayton at apple.com> wrote:
>
>>
>> > On May 19, 2014, at 11:14 AM, Todd Fiala <todd.fiala at gmail.com> wrote:
>> >
>> > Totally agree.
>> >
>> > I'm actually working on a change to the gdbremote framework test
>> expectations as we speak (well, I pushed the warning fix on the stack,
>> about ready with that now). The change to the gdb remote scripting
>> framework will allow a type of expectation that does iteration, for things
>> like qRegisterInfo and qfThreadInfo/qnThreadInfo, collecting results that
>> can later be checked against.
>> >
>> > I planned on adding checks for things over the aggregate set like:
>> > * at least some register classes exist
>> > * at least the generic registers (or some subset of them) are present,
>> > etc.
>> >
>> > I should have that in this afternoon.
>>
>> Hopefully it will convert all "<key>:<value>;" items into a python
>> dictionary, and all collections (like multiple qRegisterInfo calls) into
>> arrays of dictionaries?
>>
>> >
>> > -Todd
>> >
>> >
>> > On Mon, May 19, 2014 at 11:10 AM, Greg Clayton <gclayton at apple.com>
>> wrote:
>> > You might also want to check if people have at least defined the
>> generic register values for "pc", "sp", "fp" as we rely on these for some
>> things in the debugger.
>> >
>> > > On May 18, 2014, at 11:11 PM, Todd Fiala <todd.fiala at gmail.com>
>> wrote:
>> > >
>> > > Author: tfiala
>> > > Date: Mon May 19 01:11:41 2014
>> > > New Revision: 209109
>> > >
>> > > URL: http://llvm.org/viewvc/llvm-project?rev=209109&view=rev
>> > > Log:
>> > > 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.
>> > >
>> > > 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=209109&r1=209108&r2=209109&view=diff
>> > >
>> ==============================================================================
>> > > --- lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py
>> (original)
>> > > +++ lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py Mon May
>> 19 01:11:41 2014
>> > > @@ -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()
>> > >
>> > >
>> > > _______________________________________________
>> > > lldb-commits mailing list
>> > > lldb-commits at cs.uiuc.edu
>> > > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>> >
>> >
>> >
>> >
>> > --
>> > -Todd
>>
>> _______________________________________________
>> lldb-commits mailing list
>> lldb-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>>
>
>
>
> --
> Todd Fiala | Software Engineer | tfiala at google.com | 650-943-3180
>
--
-Todd
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20140519/1f3e0719/attachment.html>
More information about the lldb-commits
mailing list