<div dir="ltr">First batch of query/multi-response gdb remote protocol tests (qRegisterInfo query/response the first usage thereof) went into TOT here:<div><br></div><div><div>tfiala-macbookpro:lldb tfiala$ svn commit</div>
<div>Sending        test/tools/lldb-gdbserver/TestLldbGdbServer.py</div><div>Sending        test/tools/lldb-gdbserver/lldbgdbserverutils.py</div><div>Sending        test/tools/lldb-gdbserver/main.cpp</div><div>Transmitting file data ...</div>
<div>Committed revision 209170</div></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, May 19, 2014 at 1:45 PM, Todd Fiala <span dir="ltr"><<a href="mailto:tfiala@google.com" target="_blank">tfiala@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Yep, going to do that :-)<div><br></div><div>Almost done.</div></div><div class="gmail_extra"><div><div class="h5">
<br><br><div class="gmail_quote">On Mon, May 19, 2014 at 1:29 PM, Greg Clayton <span dir="ltr"><<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><br>
> On May 19, 2014, at 11:14 AM, Todd Fiala <<a href="mailto:todd.fiala@gmail.com" target="_blank">todd.fiala@gmail.com</a>> wrote:<br>
><br>
> Totally agree.<br>
><br>
> 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.<br>


><br>
> I planned on adding checks for things over the aggregate set like:<br>
> * at least some register classes exist<br>
> * at least the generic registers (or some subset of them) are present,<br>
> etc.<br>
><br>
> I should have that in this afternoon.<br>
<br>
</div>Hopefully it will convert all "<key>:<value>;" items into a python dictionary, and all collections (like multiple qRegisterInfo calls) into arrays of dictionaries?<br>
<div><div><br>
><br>
> -Todd<br>
><br>
><br>
> On Mon, May 19, 2014 at 11:10 AM, Greg Clayton <<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>> wrote:<br>
> 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.<br>
><br>
> > On May 18, 2014, at 11:11 PM, Todd Fiala <<a href="mailto:todd.fiala@gmail.com" target="_blank">todd.fiala@gmail.com</a>> wrote:<br>
> ><br>
> > Author: tfiala<br>
> > Date: Mon May 19 01:11:41 2014<br>
> > New Revision: 209109<br>
> ><br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project?rev=209109&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=209109&view=rev</a><br>
> > Log:<br>
> > Added gdb remote test for one valid qRegisterInfo result.<br>
> ><br>
> > Checks that at at least qRegisterInfo0 responds with a valid<br>
> > register info reply packet.  The packet is parsed and validates<br>
> > that all keys come from the documented set of valid keys.  It<br>
> > then validates that a minimum set of expected keys<br>
> > are present in the returned packet.<br>
> ><br>
> > This test is set to pass on debugserver and fail on llgs TOT.<br>
> ><br>
> > Modified:<br>
> >    lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py<br>
> ><br>
> > Modified: lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py<br>
> > URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py?rev=209109&r1=209108&r2=209109&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py?rev=209109&r1=209108&r2=209109&view=diff</a><br>


> > ==============================================================================<br>
> > --- lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py (original)<br>
> > +++ lldb/trunk/test/tools/lldb-gdbserver/TestLldbGdbServer.py Mon May 19 01:11:41 2014<br>
> > @@ -134,6 +134,40 @@ class LldbGdbServerTestCase(TestBase):<br>
> >     def expect_gdbremote_sequence(self):<br>
> >         return expect_lldb_gdbserver_replay(self, self.sock, self.test_sequence, self._TIMEOUT_SECONDS, self.logger)<br>
> ><br>
> > +    _KNOWN_REGINFO_KEYS = [<br>
> > +        "name",<br>
> > +        "alt-name",<br>
> > +        "bitsize",<br>
> > +        "offset",<br>
> > +        "encoding",<br>
> > +        "format",<br>
> > +        "set",<br>
> > +        "gcc",<br>
> > +        "dwarf",<br>
> > +        "generic",<br>
> > +        "container-regs",<br>
> > +        "invalidate-regs"<br>
> > +    ]<br>
> > +<br>
> > +    def assert_valid_reg_info_packet(self, reginfo_packet):<br>
> > +        keyval_pairs = reginfo_packet.split(";")<br>
> > +        self.assertTrue(len(keyval_pairs) >= 5)<br>
> > +<br>
> > +        values = {}<br>
> > +        for kv in keyval_pairs:<br>
> > +            (key, val) = kv.split(':')<br>
> > +            values[key] = val<br>
> > +            # Ensure key is something we expect.<br>
> > +            self.assertTrue(key in self._KNOWN_REGINFO_KEYS)<br>
> > +<br>
> > +        # Check the bare-minimum expected set of register info keys.<br>
> > +        self.assertTrue("name" in values)<br>
> > +        self.assertTrue("bitsize" in values)<br>
> > +        self.assertTrue("offset" in values)<br>
> > +        self.assertTrue("encoding" in values)<br>
> > +        self.assertTrue("format" in values)<br>
> > +<br>
> > +<br>
> >     @debugserver_test<br>
> >     def test_exe_starts_debugserver(self):<br>
> >         self.init_debugserver_test()<br>
> > @@ -522,5 +556,41 @@ class LldbGdbServerTestCase(TestBase):<br>
> >         self.buildDwarf()<br>
> >         self.attach_commandline_kill_after_initial_stop()<br>
> ><br>
> > +    def qRegisterInfo_returns_one_valid_result(self):<br>
> > +        server = self.start_server()<br>
> > +        self.assertIsNotNone(server)<br>
> > +<br>
> > +        # Build launch args<br>
> > +        launch_args = [os.path.abspath('a.out')]<br>
> > +<br>
> > +        # Build the expected protocol stream<br>
> > +        self.add_no_ack_remote_stream()<br>
> > +        self.add_verified_launch_packets(launch_args)<br>
> > +        self.test_sequence.add_log_lines(<br>
> > +            ["read packet: $qRegisterInfo0#00",<br>
> > +             { "direction":"send", "regex":r"^\$(.+);#\d{2}", "capture":{1:"reginfo_0"} }],<br>
> > +            True)<br>
> > +<br>
> > +        # Run the stream<br>
> > +        context = self.expect_gdbremote_sequence()<br>
> > +        self.assertIsNotNone(context)<br>
> > +        self.assertIsNotNone(context.get("reginfo_0"))<br>
> > +        self.assert_valid_reg_info_packet(context.get("reginfo_0"))<br>
> > +<br>
> > +    @debugserver_test<br>
> > +    @dsym_test<br>
> > +    def test_qRegisterInfo_returns_one_valid_result_debugserver_dsym(self):<br>
> > +        self.init_debugserver_test()<br>
> > +        self.buildDsym()<br>
> > +        self.qRegisterInfo_returns_one_valid_result()<br>
> > +<br>
> > +    @llgs_test<br>
> > +    @dwarf_test<br>
> > +    @unittest2.expectedFailure()<br>
> > +    def test_qRegisterInfo_returns_one_valid_result_llgs_dwarf(self):<br>
> > +        self.init_llgs_test()<br>
> > +        self.buildDwarf()<br>
> > +        self.qRegisterInfo_returns_one_valid_result()<br>
> > +<br>
> > if __name__ == '__main__':<br>
> >     unittest2.main()<br>
> ><br>
> ><br>
> > _______________________________________________<br>
> > lldb-commits mailing list<br>
> > <a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.edu</a><br>
> > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits</a><br>
><br>
><br>
><br>
><br>
> --<br>
> -Todd<br>
<br>
_______________________________________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br></div></div><span class="HOEnZb"><font color="#888888"><div dir="ltr"><table cellspacing="0" cellpadding="0" style="color:rgb(136,136,136);font-family:'Times New Roman'">
<tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small">
<td nowrap style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px">Todd Fiala |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"> Software Engineer |</td>

<td nowrap style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"> <a href="mailto:tfiala@google.com" style="color:rgb(17,85,204)" target="_blank"><span style="background-color:rgb(255,255,204);color:rgb(34,34,34);background-repeat:initial initial">tfiala@google.com</span></a> |</td>

<td nowrap style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"><font color="#1155cc"> <a>650-943-3180</a></font></td></tr></tbody></table><br></div>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">-Todd</div>
</div>