1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
2 | #ifndef _LINUX_PTRACE_H |
3 | #define _LINUX_PTRACE_H |
4 | /* ptrace.h */ |
5 | /* structs and defines to help the user use the ptrace system call. */ |
6 | |
7 | /* has the defines to get at the registers. */ |
8 | |
9 | #include <linux/types.h> |
10 | |
11 | #define PTRACE_TRACEME 0 |
12 | #define PTRACE_PEEKTEXT 1 |
13 | #define PTRACE_PEEKDATA 2 |
14 | #define PTRACE_PEEKUSR 3 |
15 | #define PTRACE_POKETEXT 4 |
16 | #define PTRACE_POKEDATA 5 |
17 | #define PTRACE_POKEUSR 6 |
18 | #define PTRACE_CONT 7 |
19 | #define PTRACE_KILL 8 |
20 | #define PTRACE_SINGLESTEP 9 |
21 | |
22 | #define PTRACE_ATTACH 16 |
23 | #define PTRACE_DETACH 17 |
24 | |
25 | #define PTRACE_SYSCALL 24 |
26 | |
27 | /* 0x4200-0x4300 are reserved for architecture-independent additions. */ |
28 | #define PTRACE_SETOPTIONS 0x4200 |
29 | #define PTRACE_GETEVENTMSG 0x4201 |
30 | #define PTRACE_GETSIGINFO 0x4202 |
31 | #define PTRACE_SETSIGINFO 0x4203 |
32 | |
33 | /* |
34 | * Generic ptrace interface that exports the architecture specific regsets |
35 | * using the corresponding NT_* types (which are also used in the core dump). |
36 | * Please note that the NT_PRSTATUS note type in a core dump contains a full |
37 | * 'struct elf_prstatus'. But the user_regset for NT_PRSTATUS contains just the |
38 | * elf_gregset_t that is the pr_reg field of 'struct elf_prstatus'. For all the |
39 | * other user_regset flavors, the user_regset layout and the ELF core dump note |
40 | * payload are exactly the same layout. |
41 | * |
42 | * This interface usage is as follows: |
43 | * struct iovec iov = { buf, len}; |
44 | * |
45 | * ret = ptrace(PTRACE_GETREGSET/PTRACE_SETREGSET, pid, NT_XXX_TYPE, &iov); |
46 | * |
47 | * On the successful completion, iov.len will be updated by the kernel, |
48 | * specifying how much the kernel has written/read to/from the user's iov.buf. |
49 | */ |
50 | #define PTRACE_GETREGSET 0x4204 |
51 | #define PTRACE_SETREGSET 0x4205 |
52 | |
53 | #define PTRACE_SEIZE 0x4206 |
54 | #define PTRACE_INTERRUPT 0x4207 |
55 | #define PTRACE_LISTEN 0x4208 |
56 | |
57 | #define PTRACE_PEEKSIGINFO 0x4209 |
58 | |
59 | struct ptrace_peeksiginfo_args { |
60 | __u64 off; /* from which siginfo to start */ |
61 | __u32 flags; |
62 | __s32 nr; /* how may siginfos to take */ |
63 | }; |
64 | |
65 | #define PTRACE_GETSIGMASK 0x420a |
66 | #define PTRACE_SETSIGMASK 0x420b |
67 | |
68 | #define PTRACE_SECCOMP_GET_FILTER 0x420c |
69 | #define PTRACE_SECCOMP_GET_METADATA 0x420d |
70 | |
71 | struct seccomp_metadata { |
72 | __u64 filter_off; /* Input: which filter */ |
73 | __u64 flags; /* Output: filter's flags */ |
74 | }; |
75 | |
76 | #define PTRACE_GET_SYSCALL_INFO 0x420e |
77 | #define PTRACE_SYSCALL_INFO_NONE 0 |
78 | #define PTRACE_SYSCALL_INFO_ENTRY 1 |
79 | #define PTRACE_SYSCALL_INFO_EXIT 2 |
80 | #define PTRACE_SYSCALL_INFO_SECCOMP 3 |
81 | |
82 | struct ptrace_syscall_info { |
83 | __u8 op; /* PTRACE_SYSCALL_INFO_* */ |
84 | __u8 pad[3]; |
85 | __u32 arch; |
86 | __u64 instruction_pointer; |
87 | __u64 stack_pointer; |
88 | union { |
89 | struct { |
90 | __u64 nr; |
91 | __u64 args[6]; |
92 | } entry; |
93 | struct { |
94 | __s64 rval; |
95 | __u8 is_error; |
96 | } exit; |
97 | struct { |
98 | __u64 nr; |
99 | __u64 args[6]; |
100 | __u32 ret_data; |
101 | } seccomp; |
102 | }; |
103 | }; |
104 | |
105 | #define PTRACE_GET_RSEQ_CONFIGURATION 0x420f |
106 | |
107 | struct ptrace_rseq_configuration { |
108 | __u64 rseq_abi_pointer; |
109 | __u32 rseq_abi_size; |
110 | __u32 signature; |
111 | __u32 flags; |
112 | __u32 pad; |
113 | }; |
114 | |
115 | /* |
116 | * These values are stored in task->ptrace_message |
117 | * by tracehook_report_syscall_* to describe the current syscall-stop. |
118 | */ |
119 | #define PTRACE_EVENTMSG_SYSCALL_ENTRY 1 |
120 | #define PTRACE_EVENTMSG_SYSCALL_EXIT 2 |
121 | |
122 | /* Read signals from a shared (process wide) queue */ |
123 | #define PTRACE_PEEKSIGINFO_SHARED (1 << 0) |
124 | |
125 | /* Wait extended result codes for the above trace options. */ |
126 | #define PTRACE_EVENT_FORK 1 |
127 | #define PTRACE_EVENT_VFORK 2 |
128 | #define PTRACE_EVENT_CLONE 3 |
129 | #define PTRACE_EVENT_EXEC 4 |
130 | #define PTRACE_EVENT_VFORK_DONE 5 |
131 | #define PTRACE_EVENT_EXIT 6 |
132 | #define PTRACE_EVENT_SECCOMP 7 |
133 | /* Extended result codes which enabled by means other than options. */ |
134 | #define PTRACE_EVENT_STOP 128 |
135 | |
136 | /* Options set using PTRACE_SETOPTIONS or using PTRACE_SEIZE @data param */ |
137 | #define PTRACE_O_TRACESYSGOOD 1 |
138 | #define PTRACE_O_TRACEFORK (1 << PTRACE_EVENT_FORK) |
139 | #define PTRACE_O_TRACEVFORK (1 << PTRACE_EVENT_VFORK) |
140 | #define PTRACE_O_TRACECLONE (1 << PTRACE_EVENT_CLONE) |
141 | #define PTRACE_O_TRACEEXEC (1 << PTRACE_EVENT_EXEC) |
142 | #define PTRACE_O_TRACEVFORKDONE (1 << PTRACE_EVENT_VFORK_DONE) |
143 | #define PTRACE_O_TRACEEXIT (1 << PTRACE_EVENT_EXIT) |
144 | #define PTRACE_O_TRACESECCOMP (1 << PTRACE_EVENT_SECCOMP) |
145 | |
146 | /* eventless options */ |
147 | #define PTRACE_O_EXITKILL (1 << 20) |
148 | #define PTRACE_O_SUSPEND_SECCOMP (1 << 21) |
149 | |
150 | #define PTRACE_O_MASK (\ |
151 | 0x000000ff | PTRACE_O_EXITKILL | PTRACE_O_SUSPEND_SECCOMP) |
152 | |
153 | #include <asm/ptrace.h> |
154 | |
155 | |
156 | #endif /* _LINUX_PTRACE_H */ |
157 | |