This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] [gdbserver/win32] Enable detaching on MinGW.


Daniel Jacobowitz wrote:
On Tue, May 08, 2007 at 03:10:36AM +0100, Pedro Alves wrote:
Hi all,

Currently detach support is skipped on MinGW (and mingw32ce),
because there is no waitpid on Windows.  This patch enables it
by implementing the waiting for the inferior to exit in a new
target_op::join.

One thing that annoys me, is that requesting for detach kills the
inferior if detaching isn't supported.  The patch makes gdbserver
return an error (E packet) to gdb, so gdb knows it shouldn't
stop debugging.  The user can then kill the inferior is he wants.

What do you think of this behavior?

Is the patch OK?

The gdbserver parts are fine.


-  remote_send (&rs->buf, &rs->buf_size);
+  putpkt (rs->buf);
+  getpkt (&rs->buf, &rs->buf_size, 0);
+
+  if (rs->buf[0] == 'E')
+    error (_("Can't detach process."));

Isn't this basically what happens already in remote_send? Oh, but we have a better error message now. This part's OK too.


Thanks.


I've also committed the following as obvious.

Cheers,
Pedro Alves

2007-05-10  Pedro Alves  <pedro_alves@portugalmail.pt>

	* linux-low.c (linux_detach): Change return type to int.  Return 0.
	* spu-low.c (spu_detach): Likewise.
---
 gdb/gdbserver/linux-low.c |    3 ++-
 gdb/gdbserver/spu-low.c   |    3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

Index: src/gdb/gdbserver/linux-low.c
===================================================================
--- src.orig/gdb/gdbserver/linux-low.c	2007-05-10 21:55:20.000000000 +0100
+++ src/gdb/gdbserver/linux-low.c	2007-05-10 22:22:04.000000000 +0100
@@ -287,10 +287,11 @@ linux_detach_one_process (struct inferio
   ptrace (PTRACE_DETACH, pid_of (process), 0, 0);
 }
 
-static void
+static int
 linux_detach (void)
 {
   for_each_inferior (&all_threads, linux_detach_one_process);
+  return 0;
 }
 
 static void
Index: src/gdb/gdbserver/spu-low.c
===================================================================
--- src.orig/gdb/gdbserver/spu-low.c	2007-05-10 21:55:20.000000000 +0100
+++ src/gdb/gdbserver/spu-low.c	2007-05-10 22:22:46.000000000 +0100
@@ -314,10 +314,11 @@ spu_kill (void)
 }
 
 /* Detach from inferior process.  */
-static void
+static int
 spu_detach (void)
 {
   ptrace (PTRACE_DETACH, current_tid, 0, 0);
+  return 0;
 }
 
 static void

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]