[PATCH 2/2] gdb, remote: Skip sending of 'vCont' package if remote target is empty

Stephan Rohr <[email protected]> Wed, 5 Aug 2026 08:59:18 +0000
Newsgroups gmane.comp.gdb.patches
Message-ID <[email protected]>
From: "Rohr, Stephan" <[email protected]>

If the remote target has no threads that need to be stopped, we can
skip sending the 'vCont' package in 'remote_stop_ns'.
---
 gdb/remote.c                                   |  4 ++++
 .../interrupt-empty-remote-target.exp          | 18 +++++++++++++++++-
 gdb/thread-iter.h                              |  3 +++
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/gdb/remote.c b/gdb/remote.c
index 194c4cbd9bb..8be552b4533 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -7884,6 +7884,10 @@ remote_target::remote_stop_ns (ptid_t ptid)
 	  }
       }
 
+  /* Skip 'vCont' package if there are no threads to be stopped.  */
+  if (all_non_exited_threads (this, ptid).empty ())
+    return;
+
   if (!rs->supports_vCont.t)
     error (_("Remote server does not support stopping threads"));
 
diff --git a/gdb/testsuite/gdb.server/interrupt-empty-remote-target.exp b/gdb/testsuite/gdb.server/interrupt-empty-remote-target.exp
index 34437a17d90..c26b535be16 100644
--- a/gdb/testsuite/gdb.server/interrupt-empty-remote-target.exp
+++ b/gdb/testsuite/gdb.server/interrupt-empty-remote-target.exp
@@ -14,7 +14,8 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Tests that GDB does not assert if interrupting an empty remote target
-# in non-stop mode.
+# in non-stop mode.  Also tests that no 'vCont' package is sent for empty
+# remote targets.
 
 load_lib gdbserver-support.exp
 
@@ -38,3 +39,18 @@ gdb_test_no_output "set non-stop on"
 
 gdb_test "interrupt" \
     "Cannot execute this command without a live selected thread."
+
+gdb_test_no_output "set debug remote on"
+
+# Test that we do not see a 'vCont' package if we interrupt an empty
+# remote target.
+gdb_test_multiple "interrupt -a" "no vCont is sent" {
+    -re -wrap "vCont.*" {
+	fail $gdb_test_name
+    }
+    -re -wrap "" {
+	pass $gdb_test_name
+    }
+}
+
+gdb_test_no_output "set debug remote off"
diff --git a/gdb/thread-iter.h b/gdb/thread-iter.h
index c649560c0e1..cc2b04e7e99 100644
--- a/gdb/thread-iter.h
+++ b/gdb/thread-iter.h
@@ -248,6 +248,9 @@ class all_non_exited_threads_range
   all_non_exited_threads_iterator end () const
   { return all_non_exited_threads_iterator (); }
 
+  bool empty ()
+  { return begin () == end (); }
+
 private:
   process_stratum_target *m_filter_target;
   ptid_t m_filter_ptid;
-- 
2.43.0

________________________________________
Intel Deutschland GmbH 

Registered Address: Dornacher Strasse 1, 85622 Feldkirchen, Germany 

Tel: +49 (89) 99143-0 

www.intel.de 

Managing Directors: Candice Moore, Jeffrey Schneiderman, Ramachandran Sitaraman

Chairperson of the Supervisory Board: Sonja Pierer

Registered Seat: Munich Commercial Register B: Amtsgericht Munich HRB 186928

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.