[Lldb-commits] [PATCH] D62221: [lldb-server][LLGS] Support 'g' packets
Jason Molenda via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Tue May 21 15:19:56 PDT 2019
jasonmolenda added inline comments.
================
Comment at: lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp:307-316
+#ifdef LLDB_REMOTE_SHOULD_READ_ALL_REGISTERS_AT_ONCE
+ // Always fetch the registers at once when the flag has been defined.
+ bool read_all_registers_at_once = true;
+#else
// read_all_registers_at_once will be true if 'p' packet is not
// supported.
bool read_all_registers_at_once =
----------------
clayborg wrote:
> I would make this a gdb-remote setting like "plugin.process.gdb-remote.packet-timeout" but named "plugin.process.gdb-remote.use-g-packet". Then we don't need a #define. It would be fine to use this all the time for most targets I believe. So it might be worth trying this out. We will need to watch stepping times.
One way to force the use of g/G is to not support p/P in the Remote Serial Protocol stub. I've seen some stubs that behave this way. g is the older packet, and IMO is a more fragile one because it requires complete agreement about the layout of the register context. for lldb + lldbserver or lldb + debugserver, this isn't such a concern, but with interop with random other Remote Serial Protocol implementations, p/P is much simpler.
I understand the perf concerns of using p/P for multiple registers - as Greg says, ideally the RSP stub will include the base register context for the stopped thread in the stop packet aka T packet aka ? packet. For debugging with multiple threads, we use the jThreadsInfo packet to send the GPR register contents and likely stack memory needed for a simple stack unwind to address these issues.
Repository:
rLLDB LLDB
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D62221/new/
https://reviews.llvm.org/D62221
More information about the lldb-commits
mailing list