diff options
Diffstat (limited to 'include/linux/ptrace.h')
-rw-r--r-- | include/linux/ptrace.h | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h new file mode 100644 index 000000000000..a373fc254df2 --- /dev/null +++ b/include/linux/ptrace.h | |||
@@ -0,0 +1,122 @@ | |||
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 | #define PT_ATTACHED 0x00000400 /* parent != real_parent */ | ||
67 | |||
68 | #define PT_TRACE_MASK 0x000003f4 | ||
69 | |||
70 | /* single stepping state bits (used on ARM and PA-RISC) */ | ||
71 | #define PT_SINGLESTEP_BIT 31 | ||
72 | #define PT_SINGLESTEP (1<<PT_SINGLESTEP_BIT) | ||
73 | #define PT_BLOCKSTEP_BIT 30 | ||
74 | #define PT_BLOCKSTEP (1<<PT_BLOCKSTEP_BIT) | ||
75 | |||
76 | #include <linux/compiler.h> /* For unlikely. */ | ||
77 | #include <linux/sched.h> /* For struct task_struct. */ | ||
78 | |||
79 | extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len); | ||
80 | extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len); | ||
81 | extern int ptrace_attach(struct task_struct *tsk); | ||
82 | extern int ptrace_detach(struct task_struct *, unsigned int); | ||
83 | extern void ptrace_disable(struct task_struct *); | ||
84 | extern int ptrace_check_attach(struct task_struct *task, int kill); | ||
85 | extern int ptrace_request(struct task_struct *child, long request, long addr, long data); | ||
86 | extern void ptrace_notify(int exit_code); | ||
87 | extern void __ptrace_link(struct task_struct *child, | ||
88 | struct task_struct *new_parent); | ||
89 | extern void __ptrace_unlink(struct task_struct *child); | ||
90 | extern void ptrace_untrace(struct task_struct *child); | ||
91 | |||
92 | static inline void ptrace_link(struct task_struct *child, | ||
93 | struct task_struct *new_parent) | ||
94 | { | ||
95 | if (unlikely(child->ptrace)) | ||
96 | __ptrace_link(child, new_parent); | ||
97 | } | ||
98 | static inline void ptrace_unlink(struct task_struct *child) | ||
99 | { | ||
100 | if (unlikely(child->ptrace)) | ||
101 | __ptrace_unlink(child); | ||
102 | } | ||
103 | |||
104 | |||
105 | #ifndef force_successful_syscall_return | ||
106 | /* | ||
107 | * System call handlers that, upon successful completion, need to return a | ||
108 | * negative value should call force_successful_syscall_return() right before | ||
109 | * returning. On architectures where the syscall convention provides for a | ||
110 | * separate error flag (e.g., alpha, ia64, ppc{,64}, sparc{,64}, possibly | ||
111 | * others), this macro can be used to ensure that the error flag will not get | ||
112 | * set. On architectures which do not support a separate error flag, the macro | ||
113 | * is a no-op and the spurious error condition needs to be filtered out by some | ||
114 | * other means (e.g., in user-level, by passing an extra argument to the | ||
115 | * syscall handler, or something along those lines). | ||
116 | */ | ||
117 | #define force_successful_syscall_return() do { } while (0) | ||
118 | #endif | ||
119 | |||
120 | #endif | ||
121 | |||
122 | #endif | ||