Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / i386 / ptrace.h @ 14

History | View | Annotate | Download (5.78 KB)

1
/*        $NetBSD: ptrace.h,v 1.15 2015/09/25 16:05:17 christos Exp $        */
2

    
3
/*
4
 * Copyright (c) 2001 Wasabi Systems, Inc.
5
 * All rights reserved.
6
 *
7
 * Written by Jason R. Thorpe for Wasabi Systems, Inc.
8
 *
9
 * Redistribution and use in source and binary forms, with or without
10
 * modification, are permitted provided that the following conditions
11
 * are met:
12
 * 1. Redistributions of source code must retain the above copyright
13
 *    notice, this list of conditions and the following disclaimer.
14
 * 2. Redistributions in binary form must reproduce the above copyright
15
 *    notice, this list of conditions and the following disclaimer in the
16
 *    documentation and/or other materials provided with the distribution.
17
 * 3. All advertising materials mentioning features or use of this software
18
 *    must display the following acknowledgement:
19
 *        This product includes software developed for the NetBSD Project by
20
 *        Wasabi Systems, Inc.
21
 * 4. The name of Wasabi Systems, Inc. may not be used to endorse
22
 *    or promote products derived from this software without specific prior
23
 *    written permission.
24
 *
25
 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
26
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
29
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
 * POSSIBILITY OF SUCH DAMAGE.
36
 */
37

    
38
/*
39
 * Copyright (c) 1993 Christopher G. Demetriou
40
 * All rights reserved.
41
 *
42
 * Redistribution and use in source and binary forms, with or without
43
 * modification, are permitted provided that the following conditions
44
 * are met:
45
 * 1. Redistributions of source code must retain the above copyright
46
 *    notice, this list of conditions and the following disclaimer.
47
 * 2. Redistributions in binary form must reproduce the above copyright
48
 *    notice, this list of conditions and the following disclaimer in the
49
 *    documentation and/or other materials provided with the distribution.
50
 * 3. All advertising materials mentioning features or use of this software
51
 *    must display the following acknowledgement:
52
 *      This product includes software developed by Christopher G. Demetriou.
53
 * 4. The name of the author may not be used to endorse or promote products
54
 *    derived from this software without specific prior written permission
55
 *
56
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
57
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
58
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
59
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
60
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
61
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
62
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
63
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
64
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
65
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
66
 */
67

    
68
#ifndef _I386_PTRACE_H_
69
#define        _I386_PTRACE_H_
70

    
71
/*
72
 * i386-dependent ptrace definitions
73
 */
74
#define        PT_STEP                (PT_FIRSTMACH + 0)
75
#define        PT_GETREGS        (PT_FIRSTMACH + 1)
76
#define        PT_SETREGS        (PT_FIRSTMACH + 2)
77
#define        PT_GETFPREGS        (PT_FIRSTMACH + 3)
78
#define        PT_SETFPREGS        (PT_FIRSTMACH + 4)
79

    
80
/* We have machine-dependent process tracing needs. */
81
#define        __HAVE_PTRACE_MACHDEP
82

    
83
/* We have machine-dependent procfs nodes. */
84
#define        __HAVE_PROCFS_MACHDEP
85

    
86
/* The machine-dependent ptrace(2) requests. */
87
#define        PT_GETXMMREGS        (PT_FIRSTMACH + 5)
88
#define        PT_SETXMMREGS        (PT_FIRSTMACH + 6)
89

    
90
#define PT_MACHDEP_STRINGS \
91
        "PT_STEP", \
92
        "PT_GETREGS", \
93
        "PT_SETREGS", \
94
        "PT_GETFPREGS", \
95
        "PT_SETFPREGS", \
96
        "PT_GETXMMREGS", \
97
        "PT_SETXMMREGS",
98

    
99
#include <machine/reg.h>
100
#define PTRACE_REG_PC(r)        (r)->r_eip
101
#define PTRACE_REG_SET_PC(r, v)        (r)->r_eip = (v)
102
#define PTRACE_REG_SP(r)        (r)->r_esp
103
#define PTRACE_REG_INTRV(r)        (r)->r_eax
104

    
105
#define PTRACE_BREAKPOINT        ((const uint8_t[]) { 0xcc })
106
#define PTRACE_BREAKPOINT_SIZE        1
107
#define PTRACE_BREAKPOINT_ADJ        sizeof(PTRACE_BREAKPOINT)
108

    
109
#ifdef _KERNEL
110

    
111
/*
112
 * These are used in sys_ptrace() to find good ptrace(2) requests.
113
 */
114
#define        PTRACE_MACHDEP_REQUEST_CASES                                        \
115
        case PT_GETXMMREGS:                                                \
116
        case PT_SETXMMREGS:
117

    
118
/*
119
 * These are used to define machine-dependent procfs node types.
120
 */
121
#define        PROCFS_MACHDEP_NODE_TYPES                                        \
122
        Pmachdep_xmmregs,        /* extended FP register set */
123

    
124
/*
125
 * These are used in switch statements to catch machine-dependent
126
 * procfs node types.
127
 */
128
#define        PROCFS_MACHDEP_NODETYPE_CASES                                        \
129
        case Pmachdep_xmmregs:
130

    
131
/*
132
 * These are used to protect a privileged process's state.
133
 */
134
#define        PROCFS_MACHDEP_PROTECT_CASES                                        \
135
        case Pmachdep_xmmregs:
136

    
137
/*
138
 * These are used to define the machine-dependent procfs nodes.
139
 */
140
#define        PROCFS_MACHDEP_NODETYPE_DEFNS                                        \
141
        { DT_REG, N("xmmregs"), Pmachdep_xmmregs,                        \
142
          procfs_machdep_validxmmregs },
143

    
144
struct xmmregs;
145

    
146
/* Functions used by both ptrace(2) and procfs. */
147
int        process_machdep_doxmmregs(struct lwp *, struct lwp *, struct uio *);
148
int        process_machdep_validxmmregs(struct proc *);
149

    
150
/* Functions used by procfs. */
151
struct mount;
152
struct pfsnode;
153
int        procfs_machdep_doxmmregs(struct lwp *, struct lwp *,
154
            struct pfsnode *, struct uio *);
155
int        procfs_machdep_validxmmregs(struct lwp *, struct mount *);
156

    
157
#endif /* _KERNEL */
158

    
159
#endif /* _I386_PTRACE_H_ */