From 9c031c9d7f9b88eaa438797cefc4c1f322ec08db Mon Sep 17 00:00:00 2001 From: Ben Gras Date: Tue, 10 Dec 2013 18:18:13 +0100 Subject: [PATCH] Change-Id: Ib930c661c1e6de05b2e0d5fce4ffc1ae2269fc6a --- lib/libc/sys-minix/ptrace.c | 2 +- sys/arch/arm/include/Makefile | 2 +- sys/arch/arm/include/ptrace.h | 50 ++++++ sys/arch/evbarm/include/Makefile | 2 +- sys/arch/evbarm/include/ptrace.h | 3 + sys/arch/i386/include/Makefile | 2 +- sys/arch/i386/include/ptrace.h | 149 ++++++++++++++++ sys/sys/ptrace.h | 291 ++++++++++++++++++++++++++----- 8 files changed, 453 insertions(+), 48 deletions(-) create mode 100644 sys/arch/arm/include/ptrace.h create mode 100644 sys/arch/evbarm/include/ptrace.h create mode 100644 sys/arch/i386/include/ptrace.h diff --git a/lib/libc/sys-minix/ptrace.c b/lib/libc/sys-minix/ptrace.c index 79c28aa58..a70dfa972 100644 --- a/lib/libc/sys-minix/ptrace.c +++ b/lib/libc/sys-minix/ptrace.c @@ -9,7 +9,7 @@ __weak_alias(ptrace, _ptrace) #endif -long ptrace(int req, pid_t pid, long addr, long data) +int ptrace(int req, pid_t pid, void *addr, int data) { message m; diff --git a/sys/arch/arm/include/Makefile b/sys/arch/arm/include/Makefile index dee4cf777..2baebc26c 100644 --- a/sys/arch/arm/include/Makefile +++ b/sys/arch/arm/include/Makefile @@ -13,7 +13,7 @@ INCS= aeabi.h ansi.h armreg.h asm.h \ \ limits.h lock.h \ math.h mcontext.h mutex.h \ - param.h profile.h rwlock.h \ + param.h ptrace.h profile.h rwlock.h \ \ rwlock.h \ setjmp.h signal.h \ diff --git a/sys/arch/arm/include/ptrace.h b/sys/arch/arm/include/ptrace.h new file mode 100644 index 000000000..061820128 --- /dev/null +++ b/sys/arch/arm/include/ptrace.h @@ -0,0 +1,50 @@ +/* $NetBSD: ptrace.h,v 1.5 2008/01/25 11:59:20 skrll Exp $ */ + +/* + * Copyright (c) 1995 Frank Lancaster + * Copyright (c) 1995 Tools GmbH + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by TooLs GmbH. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * arm-dependent ptrace definitions + */ +#ifndef _KERNEL +#define PT_STEP (PT_FIRSTMACH + 0) /* Not implemented */ +#endif +#define PT_GETREGS (PT_FIRSTMACH + 1) +#define PT_SETREGS (PT_FIRSTMACH + 2) +#define PT_GETFPREGS (PT_FIRSTMACH + 3) +#define PT_SETFPREGS (PT_FIRSTMACH + 4) + +#define PT_MACHDEP_STRINGS \ + "(unused)", \ + "PT_GETREGS", \ + "PT_SETREGS", \ + "PT_GETFPREGS", \ + "PT_SETFPREGS", diff --git a/sys/arch/evbarm/include/Makefile b/sys/arch/evbarm/include/Makefile index fc9eac797..227150e4c 100644 --- a/sys/arch/evbarm/include/Makefile +++ b/sys/arch/evbarm/include/Makefile @@ -13,7 +13,7 @@ INCS= ansi.h asm.h \ \ limits.h lock.h \ math.h mcontext.h mutex.h \ - param.h proc.h profile.h \ + param.h proc.h profile.h ptrace.h \ rwlock.h \ setjmp.h signal.h \ types.h \ diff --git a/sys/arch/evbarm/include/ptrace.h b/sys/arch/evbarm/include/ptrace.h new file mode 100644 index 000000000..810060344 --- /dev/null +++ b/sys/arch/evbarm/include/ptrace.h @@ -0,0 +1,3 @@ +/* $NetBSD: ptrace.h,v 1.1 2001/11/25 15:56:05 thorpej Exp $ */ + +#include diff --git a/sys/arch/i386/include/Makefile b/sys/arch/i386/include/Makefile index bbccc8841..cdc4d2e21 100644 --- a/sys/arch/i386/include/Makefile +++ b/sys/arch/i386/include/Makefile @@ -17,7 +17,7 @@ INCS= ansi.h asm.h \ limits.h \ math.h mcontext.h mutex.h multiboot.h \ npx.h \ - param.h pio.h profile.h \ + param.h pio.h profile.h ptrace.h \ \ rwlock.h \ setjmp.h signal.h \ diff --git a/sys/arch/i386/include/ptrace.h b/sys/arch/i386/include/ptrace.h new file mode 100644 index 000000000..2c51c5d06 --- /dev/null +++ b/sys/arch/i386/include/ptrace.h @@ -0,0 +1,149 @@ +/* $NetBSD: ptrace.h,v 1.13 2006/03/05 07:17:21 christos Exp $ */ + +/* + * Copyright (c) 2001 Wasabi Systems, Inc. + * All rights reserved. + * + * Written by Jason R. Thorpe for Wasabi Systems, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed for the NetBSD Project by + * Wasabi Systems, Inc. + * 4. The name of Wasabi Systems, Inc. may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Copyright (c) 1993 Christopher G. Demetriou + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Christopher G. Demetriou. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _I386_PTRACE_H_ +#define _I386_PTRACE_H_ + +/* + * i386-dependent ptrace definitions + */ +#define PT_STEP (PT_FIRSTMACH + 0) +#define PT_GETREGS (PT_FIRSTMACH + 1) +#define PT_SETREGS (PT_FIRSTMACH + 2) +#define PT_GETFPREGS (PT_FIRSTMACH + 3) +#define PT_SETFPREGS (PT_FIRSTMACH + 4) + +/* We have machine-dependent process tracing needs. */ +#define __HAVE_PTRACE_MACHDEP + +/* We have machine-dependent procfs nodes. */ +#define __HAVE_PROCFS_MACHDEP + +/* The machine-dependent ptrace(2) requests. */ +#define PT_GETXMMREGS (PT_FIRSTMACH + 5) +#define PT_SETXMMREGS (PT_FIRSTMACH + 6) + +#define PT_MACHDEP_STRINGS \ + "PT_STEP", \ + "PT_GETREGS", \ + "PT_SETREGS", \ + "PT_GETFPREGS", \ + "PT_SETFPREGS", \ + "PT_GETXMMREGS", \ + "PT_SETXMMREGS", + +#ifdef _KERNEL + +/* + * These are used in sys_ptrace() to find good ptrace(2) requests. + */ +#define PTRACE_MACHDEP_REQUEST_CASES \ + case PT_GETXMMREGS: \ + case PT_SETXMMREGS: + +/* + * These are used to define machine-dependent procfs node types. + */ +#define PROCFS_MACHDEP_NODE_TYPES \ + Pmachdep_xmmregs, /* extended FP register set */ + +/* + * These are used in switch statements to catch machine-dependent + * procfs node types. + */ +#define PROCFS_MACHDEP_NODETYPE_CASES \ + case Pmachdep_xmmregs: + +/* + * These are used to protect a privileged process's state. + */ +#define PROCFS_MACHDEP_PROTECT_CASES \ + case Pmachdep_xmmregs: + +/* + * These are used to define the machine-dependent procfs nodes. + */ +#define PROCFS_MACHDEP_NODETYPE_DEFNS \ + { DT_REG, N("xmmregs"), Pmachdep_xmmregs, \ + procfs_machdep_validxmmregs }, + +struct xmmregs; + +/* Functions used by both ptrace(2) and procfs. */ +int process_machdep_doxmmregs(struct lwp *, struct lwp *, struct uio *); +int process_machdep_validxmmregs(struct proc *); + +/* Functions used by procfs. */ +struct mount; +struct pfsnode; +int procfs_machdep_doxmmregs(struct lwp *, struct lwp *, + struct pfsnode *, struct uio *); +int procfs_machdep_validxmmregs(struct lwp *, struct mount *); + +#endif /* _KERNEL */ + +#endif /* _I386_PTRACE_H_ */ diff --git a/sys/sys/ptrace.h b/sys/sys/ptrace.h index b829771a4..5a58fa7cf 100644 --- a/sys/sys/ptrace.h +++ b/sys/sys/ptrace.h @@ -1,58 +1,261 @@ -/* - * definitions for ptrace(2) +/* $NetBSD: ptrace.h,v 1.44 2011/09/02 20:10:19 christos Exp $ */ + +/*- + * Copyright (c) 1984, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)ptrace.h 8.2 (Berkeley) 1/4/94 */ -#ifndef _PTRACE_H -#define _PTRACE_H +#ifndef _SYS_PTRACE_H_ +#define _SYS_PTRACE_H_ -/* Trace requests. */ -#define T_STOP -1 /* stop the process */ -#define T_OK 0 /* enable tracing by parent for this process */ -#define T_GETINS 1 /* return value from instruction space */ -#define T_GETDATA 2 /* return value from data space */ -#define T_GETUSER 3 /* return value from user process table */ -#define T_SETINS 4 /* set value from instruction space */ -#define T_SETDATA 5 /* set value from data space */ -#define T_SETUSER 6 /* set value in user process table */ -#define T_RESUME 7 /* resume execution */ -#define T_EXIT 8 /* exit */ -#define T_STEP 9 /* set trace bit */ -#define T_SYSCALL 10 /* trace system call */ -#define T_ATTACH 11 /* attach to a running process */ -#define T_DETACH 12 /* detach from a traced process */ -#define T_SETOPT 13 /* set trace options */ -#define T_GETRANGE 14 /* get range of values */ -#define T_SETRANGE 15 /* set range of values */ +#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 T_READB_INS 100 /* Read a byte from the text segment of an - * untraced process (only for root) - */ -#define T_WRITEB_INS 101 /* Write a byte in the text segment of an - * untraced process (only for root) - */ +#define PT_FIRSTMACH 32 /* for machine-specific requests */ +#include /* machine-specific requests, if any */ -/* Trace options. */ -#define TO_TRACEFORK 0x1 /* automatically attach to forked children */ -#define TO_ALTEXEC 0x2 /* send SIGSTOP on successful exec() */ -#define TO_NOEXEC 0x4 /* do not send signal on successful exec() */ +#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", -/* Trace spaces. */ -#define TS_INS 0 /* text space */ -#define TS_DATA 1 /* data space */ +/* PT_{G,S}EVENT_MASK */ +typedef struct ptrace_event { + int pe_set_event; +} ptrace_event_t; -/* Trance range structure. */ -struct ptrace_range { - int pr_space; /* space in traced process */ - long pr_addr; /* address in traced process */ - void *pr_ptr; /* buffer in caller process */ - size_t pr_size; /* size of range, in bytes */ +/* 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. + */ +struct ptrace_io_desc { + int piod_op; /* I/O operation (see below) */ + void *piod_offs; /* child offset */ + void *piod_addr; /* parent offset */ + size_t piod_len; /* request length (in)/actual count (out) */ }; -/* Function Prototypes. */ +/* piod_op */ +#define PIOD_READ_D 1 /* read from D space */ +#define PIOD_WRITE_D 2 /* write to D spcae */ +#define PIOD_READ_I 3 /* read from I space */ +#define PIOD_WRITE_I 4 /* write to I space */ + +/* + * Argument structure for PT_LWPINFO. + */ +struct ptrace_lwpinfo { + lwpid_t pl_lwpid; /* LWP described */ + int pl_event; /* Event that stopped the LWP */ + /* Add fields at the end */ +}; + +#define PL_EVENT_NONE 0 +#define PL_EVENT_SIGNAL 1 + +#ifdef _KERNEL + +#if defined(PT_GETREGS) || defined(PT_SETREGS) +struct reg; +#ifndef process_reg32 +#define process_reg32 struct reg +#endif +#ifndef process_reg64 +#define process_reg64 struct reg +#endif +#endif +#if defined(PT_GETFPREGS) || defined(PT_SETFPREGS) +struct fpreg; +#ifndef process_fpreg32 +#define process_fpreg32 struct fpreg +#endif +#ifndef process_fpreg64 +#define process_fpreg64 struct fpreg +#endif +#endif + +void ptrace_init(void); + +int process_doregs(struct lwp *, struct lwp *, struct uio *); +int process_validregs(struct lwp *); + +int process_dofpregs(struct lwp *, struct lwp *, struct uio *); +int process_validfpregs(struct lwp *); + +int process_domem(struct lwp *, struct lwp *, struct uio *); + +void process_stoptrace(void); + +void proc_reparent(struct proc *, struct proc *); +#ifdef PT_GETFPREGS +#ifdef __HAVE_PROCESS_XFPREGS +int process_read_xfpregs(struct lwp *, struct fpreg *, size_t *); +#ifndef process_read_xfpregs32 +#define process_read_xfpregs32 process_read_xfpregs +#endif +#ifndef process_read_xfpregs64 +#define process_read_xfpregs64 process_read_xfpregs +#endif +#else +int process_read_fpregs(struct lwp *, struct fpreg *); +#ifndef process_read_fpregs32 +#define process_read_fpregs32 process_read_fpregs +#endif +#ifndef process_read_fpregs64 +#define process_read_fpregs64 process_read_fpregs +#endif +#endif +#endif +#ifdef PT_GETREGS +int process_read_regs(struct lwp *, struct reg *); +#ifndef process_read_regs32 +#define process_read_regs32 process_read_regs +#endif +#ifndef process_read_regs64 +#define process_read_regs64 process_read_regs +#endif +#endif +int process_set_pc(struct lwp *, void *); +int process_sstep(struct lwp *, int); +#ifdef PT_SETFPREGS +#ifdef __HAVE_PROCESS_XFPREGS +int process_write_xfpregs(struct lwp *, const struct fpreg *, size_t); +#else +int process_write_fpregs(struct lwp *, const struct fpreg *); +#endif +#endif +#ifdef PT_SETREGS +int process_write_regs(struct lwp *, const struct reg *); +#endif + +#ifdef __HAVE_PROCFS_MACHDEP +int ptrace_machdep_dorequest(struct lwp *, struct lwp *, int, + void *, int); +#endif + +#ifndef FIX_SSTEP +#define FIX_SSTEP(p) +#endif + +#else /* !_KERNEL */ + #include __BEGIN_DECLS -long ptrace(int _req, pid_t _pid, long _addr, long _data); +int ptrace(int _request, pid_t _pid, void *_addr, int _data); __END_DECLS -#endif /* _PTRACE_H */ +#endif /* !_KERNEL */ + +#ifdef __minix +/* Trace options. */ +#define TO_TRACEFORK 0x1 /* automatically attach to forked children */ +#define TO_ALTEXEC 0x2 /* send SIGSTOP on successful exec() */ +#define TO_NOEXEC 0x4 /* do not send signal on successful exec() */ + +/* Trace spaces. */ +#define TS_INS 0 /* text space */ +#define TS_DATA 1 /* data space */ + +/* Trance range structure. */ +struct ptrace_range { + int pr_space; /* space in traced process */ + long pr_addr; /* address in traced process */ + void *pr_ptr; /* buffer in caller process */ + size_t pr_size; /* size of range, in bytes */ +}; + +/* Trace requests aliases for minix. */ +#define T_OK PT_TRACE_ME /* enable tracing by parent for this process */ +#define T_GETINS PT_READ_I /* return value from instruction space */ +#define T_GETDATA PT_READ_D /* return value from data space */ +#define T_SETINS PT_WRITE_I /* set value from instruction space */ +#define T_SETDATA PT_WRITE_D /* set value from data space */ +#define T_RESUME PT_CONTINUE /* resume execution */ +#define T_EXIT PT_KILL /* exit */ +#define T_SYSCALL PT_SYSCALL /* trace system call */ +#define T_ATTACH PT_ATTACH /* attach to a running process */ +#define T_DETACH PT_DETACH /* detach from a traced process */ + +/* Trace requests unique to minix */ +#define T_STOP -1 /* stop the process */ +#define T_READB_INS 100 /* Read a byte from the text segment of an + * untraced process (only for root) + */ +#define T_WRITEB_INS 101 /* Write a byte in the text segment of an + * untraced process (only for root) + */ +#define T_GETUSER 102 /* return value from user process table */ +#define T_SETUSER 103 /* set value in user process table */ +#define T_STEP 104 /* set trace bit */ +#define T_SETOPT 105 /* set trace options */ +#define T_GETRANGE 106 /* get range of values */ +#define T_SETRANGE 107 /* set range of values */ + +#endif + +#endif /* !_SYS_PTRACE_H_ */