Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Burgess <andrew.burgess@embecosm.com>
To: gdb-patches@sourceware.org
Cc: Andrew Burgess <andrew.burgess@embecosm.com>
Subject: [PATCH] gdb/remote: Don't use vKill if multi-process features are disabled
Date: Thu, 17 Mar 2016 22:03:00 -0000	[thread overview]
Message-ID: <1458252144-3496-1-git-send-email-andrew.burgess@embecosm.com> (raw)

The below was tested using native gdbserver on x86-64 Fedora Linux
with no regressions.

---

The gdb remote protocol documentation is clear that the vKill command
should not be used unless the multi-process feature is reported as
supported by the remote target.

Currently within gdb we check to see if the vKill packet is enabled or
not before using the vKill command, however, the only way to disable
vKill is from the gdb console, the result is that vKill will be sent to
targets that don't support it, and never claimed to support it.

After this commit I guard use of vKill with a check to see if the
multi-process feature is enabled or not.  I have removed the ability to
disable vkill specifically from the console, the user must now disable
the whole multi-process feature set as one.

I did consider leaving the separate vKill control switch in addition to
the multi-process control switch, but this seemed unnecessary, and I
worried that in the future another bug could be introduced where
PACKET_vKill was used to guard sending a vKill.

Removed:

  set remote kill-packet (auto|on|off)
  show remote kill-packet

Instead Use:

  set remote multiprocess-feature-packet (auto|on|off)
  show set remote multiprocess-feature-packet

gdb/ChangeLog:

	* remote.c (PACKET enum): Remove PACKET_vKill.
	(remote_kill): Use remote_multi_process_p.
	(remote_vKill): Use PACKET_multiprocess_feature.
	(_initialize_remote): Remove vKill configuration.
	* NEWS: Mention removed commands.
---
 gdb/ChangeLog |  8 ++++++++
 gdb/NEWS      |  9 +++++++++
 gdb/remote.c  | 10 +++-------
 3 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 2df6ccd..db2768c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2016-03-17  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+	* remote.c (PACKET enum): Remove PACKET_vKill.
+	(remote_kill): Use remote_multi_process_p.
+	(remote_vKill): Use PACKET_multiprocess_feature.
+	(_initialize_remote): Remove vKill configuration.
+	* NEWS: Mention removed commands.
+
 2016-03-17  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
 	* linux-thread-db.c (check_pid_namespace_match): Extend the message.
diff --git a/gdb/NEWS b/gdb/NEWS
index 34c5a8d..be10da6 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -24,6 +24,15 @@
    Bounds: [lower = 0x7fffffffc390, upper = 0x7fffffffc3a3]
    0x0000000000400d7c in upper () at i386-mpx-sigsegv.c:68
 
+* The following commands which disabled use of the remote vKill packet
+  has been removed:
+      set remote kill-packet (auto|on|off)
+      show remote kill-packet
+  Instead, vKill is part of a larged feature set which can be enabled
+  or disabled as one using:
+      set remote multiprocess-feature-packet (auto|on|off)
+      show set remote multiprocess-feature-packet
+
 * New commands
 
 skip -file file
diff --git a/gdb/remote.c b/gdb/remote.c
index af0a08a..87c1078 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -1398,7 +1398,6 @@ enum {
   PACKET_vAttach,
   PACKET_vRun,
   PACKET_QStartNoAckMode,
-  PACKET_vKill,
   PACKET_qXfer_siginfo_read,
   PACKET_qXfer_siginfo_write,
   PACKET_qAttached,
@@ -8907,7 +8906,7 @@ remote_kill (struct target_ops *ops)
   int pid = ptid_get_pid (inferior_ptid);
   struct remote_state *rs = get_remote_state ();
 
-  if (packet_support (PACKET_vKill) != PACKET_DISABLE)
+  if (remote_multi_process_p (rs))
     {
       /* If we're stopped while forking and we haven't followed yet,
 	 kill the child task.  We need to do this before killing the
@@ -8948,7 +8947,7 @@ remote_kill (struct target_ops *ops)
 static int
 remote_vkill (int pid, struct remote_state *rs)
 {
-  if (packet_support (PACKET_vKill) == PACKET_DISABLE)
+  if (!remote_multi_process_p (rs))
     return -1;
 
   /* Tell the remote target to detach.  */
@@ -8957,7 +8956,7 @@ remote_vkill (int pid, struct remote_state *rs)
   getpkt (&rs->buf, &rs->buf_size, 0);
 
   switch (packet_ok (rs->buf,
-		     &remote_protocol_packets[PACKET_vKill]))
+		     &remote_protocol_packets[PACKET_multiprocess_feature]))
     {
     case PACKET_OK:
       return 0;
@@ -13756,9 +13755,6 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL,
   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
 			 "QStartNoAckMode", "noack", 0);
 
-  add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
-			 "vKill", "kill", 0);
-
   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
 			 "qAttached", "query-attached", 0);
 
-- 
2.5.1


             reply	other threads:[~2016-03-17 22:03 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-17 22:03 Andrew Burgess [this message]
2016-03-17 22:21 ` Pedro Alves
2016-03-17 23:27   ` Andrew Burgess
2016-03-18  0:12     ` Pedro Alves
2016-03-18  6:28       ` Andrew Burgess

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1458252144-3496-1-git-send-email-andrew.burgess@embecosm.com \
    --to=andrew.burgess@embecosm.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox