Improve remote attach round-trips without btrace
authorConrad Meyer <cem@FreeBSD.org>
Mon, 19 Aug 2019 07:02:19 +0000 (00:02 -0700)
committerPedro Alves <palves@redhat.com>
Tue, 20 Aug 2019 14:06:37 +0000 (15:06 +0100)
For remotes which do not support btrace at all, we can save several
round trips for each thread.  This is especially significant when your
remote is a kernel with 100s or 1000s of threads and latency is
intercontinental.

Previously, with target, remote, and infrun debugging enabled, one
might see:

    Sending packet: $Hg18aee#43...Ack
    Packet received: OK
    Sending packet: $Hg186f7#eb...Ack
    Packet received: OK
    remote:target_xfer_partial (24, , 0x805454000, 0x0, 0x0, 4096) = -1, 0

repeated for all non-exited threads.

Afterwards, if the remote does not specify 'qXfer:btrace-conf:read+'
in qSupported stub features, these unnecessary thread switches are
avoided.

gdb/ChangeLog:

* remote.c (remote_target::remote_btrace_maybe_reopen): Avoid
unnecessary thread walk if remote doesn't support the packet.

gdb/ChangeLog
gdb/remote.c

index 2dce6090685ee1ca33ef98cc7489722294279e67..d9e676ac7cde1781cdffde4edbfd4dfabfcbf7fc 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-20  Conrad Meyer  <cem@FreeBSD.org>
+
+       * remote.c (remote_target::remote_btrace_maybe_reopen): Avoid
+       unnecessary thread walk if remote doesn't support the packet.
+
 2019-08-19  Tom Tromey  <tromey@adacore.com>
 
        * python/py-value.c (value_has_field): Fix indentation.
index 7ea9cd4cf0618513088ccc522200985018ead2ed..ae06c4ba79155ed37478e1d45af8148f6c3c5ce6 100644 (file)
@@ -13700,6 +13700,11 @@ remote_target::remote_btrace_maybe_reopen ()
   int warned = 0;
 #endif
 
+  /* Don't bother walking the entirety of the remote thread list when
+     we know the feature isn't supported by the remote.  */
+  if (packet_support (PACKET_qXfer_btrace_conf) != PACKET_ENABLE)
+    return;
+
   scoped_restore_current_thread restore_thread;
 
   for (thread_info *tp : all_non_exited_threads ())