about summary refs log tree commit diff
path: root/sysdeps/mach/hurd/ptrace.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mach/hurd/ptrace.c')
-rw-r--r--sysdeps/mach/hurd/ptrace.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/sysdeps/mach/hurd/ptrace.c b/sysdeps/mach/hurd/ptrace.c
index f68d3b41ed..24cf9469d5 100644
--- a/sysdeps/mach/hurd/ptrace.c
+++ b/sysdeps/mach/hurd/ptrace.c
@@ -1,5 +1,5 @@
 /* Process tracing interface `ptrace' for GNU Hurd.
-Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc.
+Copyright (C) 1991, 1992, 1993, 1995, 1996 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -93,7 +93,7 @@ ptrace (enum __ptrace_request request, ... )
     {
     case PTRACE_TRACEME:
       /* Make this process be traced.  */
-      _hurd_exec_flags |= EXEC_TRACED;
+      __sigfillset (&_hurdsig_traced);
       __USEPORT (PROC, __proc_mark_traced (port));
       break;
 
@@ -144,7 +144,7 @@ ptrace (enum __ptrace_request request, ... )
 	      /* Tell the process to take the signal (or just resume if 0).  */
 	      err = HURD_MSGPORT_RPC
 		(__USEPORT (PROC, __proc_getmsgport (port, pid, &msgport)),
-		 0, 0, __msg_sig_post_untraced (msgport, data, task));
+		 0, 0, __msg_sig_post_untraced (msgport, data, 0, task));
 	  }
 	__mach_port_deallocate (__mach_task_self (), task);
 	return err ? __hurd_fail (err) : 0;
@@ -178,25 +178,17 @@ ptrace (enum __ptrace_request request, ... )
 	err = __USEPORT (PROC, __proc_getmsgport (port, pid, &msgport));
 	if (! err)
 	  {
-	    err = (request == PTRACE_ATTACH ?
-		   __msg_set_some_exec_flags :
-		   __msg_clear_some_exec_flags) (msgport, task, EXEC_TRACED);
-#ifdef notyet			/* XXX */
-	    if (! err)
-	      /* Request (or request an end to) SIGCHLD notification
-		 when PID stops or dies, and proc_wait working on PID.  */
-	      err = __USEPORT (PROC,
-			       __proc_trace_pid (port, pid,
-						 request == PTRACE_ATTACH));
-#endif
+	    err = __msg_set_init_int (msgport, task, INIT_TRACEMASK,
+				      request == PTRACE_DETACH ? 0 :
+				      ~(sigset_t) 0);
 	    if (! err)
 	      {
 		if (request == PTRACE_ATTACH)
 		  /* Now stop the process.  */
-		  err = __msg_sig_post (msgport, SIGSTOP, task);
+		  err = __msg_sig_post (msgport, SIGSTOP, 0, task);
 		else
 		  /* Resume the process from tracing stop.  */
-		  err = __msg_sig_post_untraced (msgport, 0, task);
+		  err = __msg_sig_post_untraced (msgport, 0, 0, task);
 	      }
 	    __mach_port_deallocate (__mach_task_self (), msgport);
 	  }