Subversion Repositories shark

Rev

Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
#ifndef _LINUX_PTRACE_H
2
#define _LINUX_PTRACE_H
3
/* ptrace.h */
4
/* structs and defines to help the user use the ptrace system call. */
5
 
6
/* has the defines to get at the registers. */
7
 
8
#define PTRACE_TRACEME             0
9
#define PTRACE_PEEKTEXT            1
10
#define PTRACE_PEEKDATA            2
11
#define PTRACE_PEEKUSR             3
12
#define PTRACE_POKETEXT            4
13
#define PTRACE_POKEDATA            5
14
#define PTRACE_POKEUSR             6
15
#define PTRACE_CONT                7
16
#define PTRACE_KILL                8
17
#define PTRACE_SINGLESTEP          9
18
 
19
#define PTRACE_ATTACH           0x10
20
#define PTRACE_DETACH           0x11
21
 
22
#define PTRACE_SYSCALL            24
23
 
24
/* 0x4200-0x4300 are reserved for architecture-independent additions.  */
25
#define PTRACE_SETOPTIONS       0x4200
26
#define PTRACE_GETEVENTMSG      0x4201
27
#define PTRACE_GETSIGINFO       0x4202
28
#define PTRACE_SETSIGINFO       0x4203
29
 
30
/* options set using PTRACE_SETOPTIONS */
31
#define PTRACE_O_TRACESYSGOOD   0x00000001
32
#define PTRACE_O_TRACEFORK      0x00000002
33
#define PTRACE_O_TRACEVFORK     0x00000004
34
#define PTRACE_O_TRACECLONE     0x00000008
35
#define PTRACE_O_TRACEEXEC      0x00000010
36
#define PTRACE_O_TRACEVFORKDONE 0x00000020
37
#define PTRACE_O_TRACEEXIT      0x00000040
38
 
39
#define PTRACE_O_MASK           0x0000007f
40
 
41
/* Wait extended result codes for the above trace options.  */
42
#define PTRACE_EVENT_FORK       1
43
#define PTRACE_EVENT_VFORK      2
44
#define PTRACE_EVENT_CLONE      3
45
#define PTRACE_EVENT_EXEC       4
46
#define PTRACE_EVENT_VFORK_DONE 5
47
#define PTRACE_EVENT_EXIT       6
48
 
49
#include <asm/ptrace.h>
50
 
51
#ifdef __KERNEL__
52
/*
53
 * Ptrace flags
54
 */
55
 
56
#define PT_PTRACED      0x00000001
57
#define PT_DTRACE       0x00000002      /* delayed trace (used on m68k, i386) */
58
#define PT_TRACESYSGOOD 0x00000004
59
#define PT_PTRACE_CAP   0x00000008      /* ptracer can follow suid-exec */
60
#define PT_TRACE_FORK   0x00000010
61
#define PT_TRACE_VFORK  0x00000020
62
#define PT_TRACE_CLONE  0x00000040
63
#define PT_TRACE_EXEC   0x00000080
64
#define PT_TRACE_VFORK_DONE     0x00000100
65
#define PT_TRACE_EXIT   0x00000200
66
 
67
#define PT_TRACE_MASK   0x000003f4
68
#define PT_SINGLESTEP   0x80000000      /* single stepping (used on ARM) */
69
 
70
#include <linux/compiler.h>             /* For unlikely.  */
71
#include <linux/sched.h>                /* For struct task_struct.  */
72
 
73
extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);
74
extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len);
75
extern int ptrace_attach(struct task_struct *tsk);
76
extern int ptrace_detach(struct task_struct *, unsigned int);
77
extern void ptrace_disable(struct task_struct *);
78
extern int ptrace_check_attach(struct task_struct *task, int kill);
79
extern int ptrace_request(struct task_struct *child, long request, long addr, long data);
80
extern void ptrace_notify(int exit_code);
81
extern void __ptrace_link(struct task_struct *child,
82
                          struct task_struct *new_parent);
83
extern void __ptrace_unlink(struct task_struct *child);
84
 
85
static inline void ptrace_link(struct task_struct *child,
86
                               struct task_struct *new_parent)
87
{
88
        if (unlikely(child->ptrace))
89
                __ptrace_link(child, new_parent);
90
}
91
static inline void ptrace_unlink(struct task_struct *child)
92
{
93
        if (unlikely(child->ptrace))
94
                __ptrace_unlink(child);
95
}
96
 
97
 
98
#ifndef force_successful_syscall_return
99
/*
100
 * System call handlers that, upon successful completion, need to return a
101
 * negative value should call force_successful_syscall_return() right before
102
 * returning.  On architectures where the syscall convention provides for a
103
 * separate error flag (e.g., alpha, ia64, ppc{,64}, sparc{,64}, possibly
104
 * others), this macro can be used to ensure that the error flag will not get
105
 * set.  On architectures which do not support a separate error flag, the macro
106
 * is a no-op and the spurious error condition needs to be filtered out by some
107
 * other means (e.g., in user-level, by passing an extra argument to the
108
 * syscall handler, or something along those lines).
109
 */
110
#define force_successful_syscall_return() do { } while (0)
111
#endif
112
 
113
#endif
114
 
115
#endif