zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

ptrace.h (5500B) - Raw


      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 #define PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG 0x4210
    116 #define PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG 0x4211
    117 
    118 /*
    119  * struct ptrace_sud_config - Per-task configuration for Syscall User Dispatch
    120  * @mode:	One of PR_SYS_DISPATCH_ON or PR_SYS_DISPATCH_OFF
    121  * @selector:	Tracees user virtual address of SUD selector
    122  * @offset:	SUD exclusion area (virtual address)
    123  * @len:	Length of SUD exclusion area
    124  *
    125  * Used to get/set the syscall user dispatch configuration for a tracee.
    126  * Selector is optional (may be NULL), and if invalid will produce
    127  * a SIGSEGV in the tracee upon first access.
    128  *
    129  * If mode is PR_SYS_DISPATCH_ON, syscall dispatch will be enabled. If
    130  * PR_SYS_DISPATCH_OFF, syscall dispatch will be disabled and all other
    131  * parameters must be 0.  The value in *selector (if not null), also determines
    132  * whether syscall dispatch will occur.
    133  *
    134  * The Syscall User Dispatch Exclusion area described by offset/len is the
    135  * virtual address space from which syscalls will not produce a user
    136  * dispatch.
    137  */
    138 struct ptrace_sud_config {
    139 	__u64 mode;
    140 	__u64 selector;
    141 	__u64 offset;
    142 	__u64 len;
    143 };
    144 
    145 /*
    146  * These values are stored in task->ptrace_message
    147  * by ptrace_stop to describe the current syscall-stop.
    148  */
    149 #define PTRACE_EVENTMSG_SYSCALL_ENTRY	1
    150 #define PTRACE_EVENTMSG_SYSCALL_EXIT	2
    151 
    152 /* Read signals from a shared (process wide) queue */
    153 #define PTRACE_PEEKSIGINFO_SHARED	(1 << 0)
    154 
    155 /* Wait extended result codes for the above trace options.  */
    156 #define PTRACE_EVENT_FORK	1
    157 #define PTRACE_EVENT_VFORK	2
    158 #define PTRACE_EVENT_CLONE	3
    159 #define PTRACE_EVENT_EXEC	4
    160 #define PTRACE_EVENT_VFORK_DONE	5
    161 #define PTRACE_EVENT_EXIT	6
    162 #define PTRACE_EVENT_SECCOMP	7
    163 /* Extended result codes which enabled by means other than options.  */
    164 #define PTRACE_EVENT_STOP	128
    165 
    166 /* Options set using PTRACE_SETOPTIONS or using PTRACE_SEIZE @data param */
    167 #define PTRACE_O_TRACESYSGOOD	1
    168 #define PTRACE_O_TRACEFORK	(1 << PTRACE_EVENT_FORK)
    169 #define PTRACE_O_TRACEVFORK	(1 << PTRACE_EVENT_VFORK)
    170 #define PTRACE_O_TRACECLONE	(1 << PTRACE_EVENT_CLONE)
    171 #define PTRACE_O_TRACEEXEC	(1 << PTRACE_EVENT_EXEC)
    172 #define PTRACE_O_TRACEVFORKDONE	(1 << PTRACE_EVENT_VFORK_DONE)
    173 #define PTRACE_O_TRACEEXIT	(1 << PTRACE_EVENT_EXIT)
    174 #define PTRACE_O_TRACESECCOMP	(1 << PTRACE_EVENT_SECCOMP)
    175 
    176 /* eventless options */
    177 #define PTRACE_O_EXITKILL		(1 << 20)
    178 #define PTRACE_O_SUSPEND_SECCOMP	(1 << 21)
    179 
    180 #define PTRACE_O_MASK		(\
    181 	0x000000ff | PTRACE_O_EXITKILL | PTRACE_O_SUSPEND_SECCOMP)
    182 
    183 #include <asm/ptrace.h>
    184 
    185 
    186 #endif /* _LINUX_PTRACE_H */