Yes, we talked about this approach a few times. Greg went with the jstopinfo addition to the T packet to keep the changes relatively small, but we're all in agreement that we should create a new JSON formatted stop info packet and dump the T packet altogether.
That's one of those changes where we're taking a big step away from traditional gdb-remote protocol which is the only reason Greg hesitated to do it. There's always the concern about lldb compatibility with traditional gdb-remote implementations -- we don't test that very thoroughly/frequently/consistently, and it can be easy to add assumptions that we have the lldb extensions to the protocol. None of this is an argument against a JSON formatted thread reply packet. Greg and I both think that this is the best approach - it was more work than he wanted to take on when he was implementing this addition to the T packet. J > On Jul 31, 2015, at 2:46 AM, Pavel Labath <lab...@google.com> wrote: > > Thank you all for the replies, very interesting information there. > Given that the register caching approach will not work everywhere, I > agree we should stick to sending the PC on all platforms for > consistency. > > Regarding the size of the stop-reply packet, I have a question. Is > there any reason we are tied to the current format of the stop-reply > packet as a whole? Couldn't we just change it as a whole? For example, > we could add a QThreadStopInJSON packet, which will switch the server > to send the stop-replies in the current jThreadsInfo format (perhaps > prefixed by a T or something, to make it more easily detectable). This > would solve the problem of the size increase, and it would enable us > to easily add more data to the packet in the future. > > What do you think? > > cheers, > pl > > > On 30 July 2015 at 19:10, Jason Molenda <ja...@molenda.com> wrote: >> We were discussing the same thing last week - I think we all agree that >> approach #1 is the way to go. My main concern here is that jstopinfo is >> ascii-hex encoded. JSON is already pretty verbose (particularly with all >> the numbers being base 10, sigh) but then we double the size of the string. >> Originally when we listed the stop reasons for all the threads were were >> including a list of all threads and their stop reasons (even if it is >> 'none') and the payload was enormous. I was playing with ideas like given >> that the T packet already gives us a list of thread ids outside the >> jstopinfo payload, maybe we could include an array of thread pc values but >> that was not a good idea even though it would be compact. I think we'll >> need to include a dictionary of threadid:pc's in there. We could have >> mitigated the expansion a little by adopting base64 encoding instead of >> asciihex (133% increase as opposed to 200% increase) but base64 isn't used >> anywhere else in the protocol so it wo! uld have been weird to adopt it in this one place. >> >> J >> >>> On Jul 30, 2015, at 5:09 AM, Pavel Labath <lab...@google.com> wrote: >>> >>> Hello Greg, Jim, >>> >>> after adding jstopinfo support to LLGS, i am still getting a bunch of >>> register read packets which access the program counter. These are >>> coming from Thread::SetupForResume(), where we need to check whether a >>> thread is on a breakpoint before letting it run. I would like to get >>> rid of those packets (my preliminary tests show I can gain about 10% >>> stepping speed improvement on my test app with 20 threads). I see two >>> ways to go about this: >>> 1. send the program counters as a part of the jstopinfo field. I will >>> need to change the format of the field a bit, because the current >>> assumption is that you do not include the threads which don't have a >>> stop reason there, but we need the registers for every thread. >>> 2. cache the registers on the client side. These queries happen after >>> we have previously done a vCont:s (as a part of ThreadPlanStepOver), >>> so the client can determine that the other threads have not executed, >>> and the registers are unchanged. We would still avoid caching the stop >>> reason, since on OSX this can change even if the thread is not >>> running, but I hope the registers remain the same. >>> >>> All in all, the first approach is probably more easier to implement, >>> but the second one sounds better to me architecturally, and has the >>> benefit of caching all registers, and not just the PC. >>> >>> Do you have any thoughts on this? >>> >>> cheers, >>> pl >>> >>> >>> On 23 July 2015 at 10:10, Pavel Labath <lab...@google.com> wrote: >>>> This revision was automatically updated to reflect the committed changes. >>>> labath marked 2 inline comments as done. >>>> Closed by commit rL242997: Add jstopinfo support to llgs (authored by >>>> labath). >>>> >>>> Changed prior to commit: >>>> http://reviews.llvm.org/D11415?vs=30348&id=30464#toc >>>> >>>> Repository: >>>> rL LLVM >>>> >>>> http://reviews.llvm.org/D11415 >>>> >>>> Files: >>>> lldb/trunk/source/Plugins/Process/Linux/NativeProcessLinux.cpp >>>> lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.cpp >>>> lldb/trunk/source/Plugins/Process/Linux/NativeThreadLinux.h >>>> lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp >>>> >>> _______________________________________________ >>> lldb-commits mailing list >>> lldb-commits@cs.uiuc.edu >>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits >> _______________________________________________ lldb-commits mailing list lldb-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits