Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/sys Add support for PTRACE_FORK.



details:   https://anonhg.NetBSD.org/src/rev/41c34fc27abf
branches:  trunk
changeset: 769191:41c34fc27abf
user:      christos <christos%NetBSD.org@localhost>
date:      Fri Sep 02 20:10:19 2011 +0000

description:
Add support for PTRACE_FORK.
- add a field in struct proc to save the forker/forkee pid, and a flag.
- add 3 new ptrace calls: PT_GET_PROCESS_STATE, PT_GET_EVENT_MASK,
  PT_SET_EVENT_MASK
Add a PT_STRINGS constant so that we don't hard-code the list of ptrace
subcalls in other programs (kdump).

diffstat:

 sys/sys/proc.h   |   4 ++-
 sys/sys/ptrace.h |  72 ++++++++++++++++++++++++++++++++++++++++++-------------
 2 files changed, 58 insertions(+), 18 deletions(-)

diffs (111 lines):

diff -r 47c0440887cd -r 41c34fc27abf sys/sys/proc.h
--- a/sys/sys/proc.h    Fri Sep 02 20:07:41 2011 +0000
+++ b/sys/sys/proc.h    Fri Sep 02 20:10:19 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: proc.h,v 1.309 2011/08/31 22:58:39 jmcneill Exp $      */
+/*     $NetBSD: proc.h,v 1.310 2011/09/02 20:10:19 christos Exp $      */
 
 /*-
  * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -290,6 +290,7 @@
        sigpend_t       p_sigpend;      /* p: pending signals */
        struct lcproc   *p_lwpctl;      /* p, a: _lwp_ctl() information */
        pid_t           p_ppid;         /* :: cached parent pid */
+       pid_t           p_fpid;         /* :: forked pid */
 
 /*
  * End area that is zeroed on creation
@@ -374,6 +375,7 @@
  * These flags are kept in p_sflag and are protected by the proc_lock
  * and p_lock.  Access from process context only.
  */
+#define        PSL_TRACEFORK   0x00000001 /* traced process wants fork events */
 #define        PSL_TRACED      0x00000800 /* Debugged process being traced */
 #define        PSL_FSTRACE     0x00010000 /* Debugger process being traced by procfs */
 #define        PSL_CHTRACED    0x00400000 /* Child has been traced & reparented */
diff -r 47c0440887cd -r 41c34fc27abf sys/sys/ptrace.h
--- a/sys/sys/ptrace.h  Fri Sep 02 20:07:41 2011 +0000
+++ b/sys/sys/ptrace.h  Fri Sep 02 20:10:19 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ptrace.h,v 1.43 2011/08/31 22:58:39 jmcneill Exp $     */
+/*     $NetBSD: ptrace.h,v 1.44 2011/09/02 20:10:19 christos Exp $     */
 
 /*-
  * Copyright (c) 1984, 1993
@@ -34,22 +34,60 @@
 #ifndef        _SYS_PTRACE_H_
 #define        _SYS_PTRACE_H_
 
-#define        PT_TRACE_ME     0       /* child declares it's being traced */
-#define        PT_READ_I       1       /* read word in child's I space */
-#define        PT_READ_D       2       /* read word in child's D space */
-#define        PT_WRITE_I      4       /* write word in child's I space */
-#define        PT_WRITE_D      5       /* write word in child's D space */
-#define        PT_CONTINUE     7       /* continue the child */
-#define        PT_KILL         8       /* kill the child process */
-#define        PT_ATTACH       9       /* attach to running process */
-#define        PT_DETACH       10      /* detach from running process */
-#define        PT_IO           11      /* do I/O to/from the stopped process */
-#define        PT_DUMPCORE     12      /* make the child generate a core dump */
-#define        PT_LWPINFO      13      /* get info about the LWP */
-#define        PT_SYSCALL      14      /* stop on syscall entry/exit */
-#define        PT_SYSCALLEMU   15      /* cancel syscall, tracer will emulate it */
-#define        PT_FIRSTMACH    32      /* for machine-specific requests */
-#include <machine/ptrace.h>    /* machine-specific requests, if any */
+#define        PT_TRACE_ME             0       /* child declares it's being traced */
+#define        PT_READ_I               1       /* read word in child's I space */
+#define        PT_READ_D               2       /* read word in child's D space */
+#define        PT_WRITE_I              4       /* write word in child's I space */
+#define        PT_WRITE_D              5       /* write word in child's D space */
+#define        PT_CONTINUE             7       /* continue the child */
+#define        PT_KILL                 8       /* kill the child process */
+#define        PT_ATTACH               9       /* attach to running process */
+#define        PT_DETACH               10      /* detach from running process */
+#define        PT_IO                   11      /* do I/O to/from the stopped process */
+#define        PT_DUMPCORE             12      /* make child generate a core dump */
+#define        PT_LWPINFO              13      /* get info about the LWP */
+#define        PT_SYSCALL              14      /* stop on syscall entry/exit */
+#define        PT_SYSCALLEMU           15      /* cancel syscall, tracer emulates it */
+#define        PT_SET_EVENT_MASK       16      /* set the event mask, defined below */
+#define        PT_GET_EVENT_MASK       17      /* get the event mask, defined below */
+#define        PT_GET_PROCESS_STATE    18      /* get process state, defined below */
+
+#define        PT_FIRSTMACH            32      /* for machine-specific requests */
+#include <machine/ptrace.h>            /* machine-specific requests, if any */
+
+#define PT_STRINGS \
+/*  0 */    "PT_TRACE_ME", \
+/*  1 */    "PT_READ_I", \
+/*  2 */    "PT_READ_D", \
+/*  3 */    "*PT_INVALID_3*", \
+/*  4 */    "PT_WRITE_I", \
+/*  5 */    "PT_WRITE_D", \
+/*  6 */    "*PT_INVALID_6*", \
+/*  7 */    "PT_CONTINUE", \
+/*  8 */    "PT_KILL", \
+/*  9 */    "PT_ATTACH", \
+/* 10 */    "PT_DETACH", \
+/* 11 */    "PT_IO", \
+/* 12 */    "PT_DUMPCORE", \
+/* 13 */    "PT_LWPINFO", \
+/* 14 */    "PT_SYSCALL", \
+/* 15 */    "PT_SYSCALLEMU", \
+/* 16 */    "PT_SET_EVENT_MASK", \
+/* 17 */    "PT_GET_EVENT_MASK", \
+/* 18 */    "PT_GET_PROCESS_STATE",
+
+/* PT_{G,S}EVENT_MASK */
+typedef struct ptrace_event {
+       int     pe_set_event;
+} ptrace_event_t;
+
+/* PT_GET_PROCESS_STATE */
+typedef struct ptrace_state {
+       int     pe_report_event;
+       pid_t   pe_other_pid;
+} ptrace_state_t;
+
+#define        PTRACE_FORK     0x0001  /* Report forks */
 
 /*
  * Argument structure for PT_IO.



Home | Main Index | Thread Index | Old Index