From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21919 invoked by alias); 5 Jul 2008 17:05:40 -0000 Received: (qmail 21910 invoked by uid 22791); 5 Jul 2008 17:05:39 -0000 X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sat, 05 Jul 2008 17:05:08 +0000 Received: (qmail 15897 invoked from network); 5 Jul 2008 17:05:06 -0000 Received: from unknown (HELO 172.16.unknown.plus.ru) (vladimir@127.0.0.2) by mail.codesourcery.com with ESMTPA; 5 Jul 2008 17:05:06 -0000 From: Vladimir Prus Date: Sat, 05 Jul 2008 17:05:00 -0000 Subject: [RFC] Implement 'detach pid'. To: gdb-patches@sources.redhat.com X-TUID: 29e929273399fe4c X-Length: 2703 X-UID: 275 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200807052104.59616.vladimir@codesourcery.com> Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-07/txt/msg00067.txt.bz2 As Marc has noted, -target-detach does not accept a pid to detach from, and CLI detach does not accept pid either. This patch fixes it. Does it look OK? - Volodya * infcmd.c (_initialize_infcmd): Make 'detach' accept parameter. * mi/mi-cmds.c (mi_cmds): Make '-target-detach' pass parameter to 'detach'. * remote.c (remote_detach_1): Interpret the passed parameter as a pid to detach from. --- gdb/infcmd.c | 2 +- gdb/mi/mi-cmds.c | 2 +- gdb/remote.c | 13 +++++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/gdb/infcmd.c b/gdb/infcmd.c index e650789..dcdaa7f 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -2250,7 +2250,7 @@ to specify the program, and to load its symbol table.")); Detach a process or file previously attached.\n\ If a process, it is no longer traced, and it continues its execution. If\n\ you were debugging a file, the file is closed and gdb no longer accesses it."), - &detachlist, "detach ", 0, &cmdlist); + &detachlist, "detach ", 1, &cmdlist); add_com ("disconnect", class_run, disconnect_command, _("\ Disconnect from a target.\n\ diff --git a/gdb/mi/mi-cmds.c b/gdb/mi/mi-cmds.c index 68c5353..b9c4f8e 100644 --- a/gdb/mi/mi-cmds.c +++ b/gdb/mi/mi-cmds.c @@ -120,7 +120,7 @@ struct mi_cmd mi_cmds[] = { "symbol-type", { NULL, 0 }, NULL }, { "target-attach", { "attach", 1 }, NULL }, { "target-compare-sections", { NULL, 0 }, NULL }, - { "target-detach", { "detach", 0 }, 0 }, + { "target-detach", { "detach", 1 }, 0 }, { "target-disconnect", { "disconnect", 0 }, 0 }, { "target-download", { NULL, 0 }, mi_cmd_target_download}, { "target-exec-status", { NULL, 0 }, NULL }, diff --git a/gdb/remote.c b/gdb/remote.c index 51b8ec5..d8a7500 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -2917,11 +2917,20 @@ remote_open_1 (char *name, int from_tty, struct target_ops *target, int extended static void remote_detach_1 (char *args, int from_tty, int extended) { - int pid = ptid_get_pid (inferior_ptid); + int pid; struct remote_state *rs = get_remote_state (); if (args) - error (_("Argument given to \"detach\" when remotely debugging.")); + { + char *end = args; + pid = strtol (args, &end, 10); + if (*end != '\0') + error (_("Cannot parse process id '%s'"), args); + if (!in_process_list (pid)) + error (_("Invalid process id %d"), pid); + } + else + pid = ptid_get_pid (inferior_ptid); if (!target_has_execution) error (_("No process to detach from.")); -- 1.5.3.5