aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorConrad Meyer <cem@FreeBSD.org>2019-08-19 00:02:19 -0700
committerPedro Alves <palves@redhat.com>2019-08-20 15:06:37 +0100
commitaedbe3bb9f03be12ad714adca1fefc391317bd94 (patch)
tree577892888ccb5462341d72bc9056f6c46edbe16f /gdb
parentac533243beac35f158341d53edab53031218bcde (diff)
downloadgdb-aedbe3bb9f03be12ad714adca1fefc391317bd94.zip
gdb-aedbe3bb9f03be12ad714adca1fefc391317bd94.tar.gz
gdb-aedbe3bb9f03be12ad714adca1fefc391317bd94.tar.bz2
Improve remote attach round-trips without btrace
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.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/remote.c5
2 files changed, 10 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2dce609..d9e676a 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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.
diff --git a/gdb/remote.c b/gdb/remote.c
index 7ea9cd4..ae06c4b 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -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 ())