xref: /linux/arch/x86/include/uapi/asm/ptrace-abi.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 #ifndef _ASM_X86_PTRACE_ABI_H
3 #define _ASM_X86_PTRACE_ABI_H
4 
5 #ifdef __i386__
6 
7 #define EBX 0
8 #define ECX 1
9 #define EDX 2
10 #define ESI 3
11 #define EDI 4
12 #define EBP 5
13 #define EAX 6
14 #define DS 7
15 #define ES 8
16 #define FS 9
17 #define GS 10
18 #define ORIG_EAX 11
19 #define EIP 12
20 #define CS  13
21 #define EFL 14
22 #define UESP 15
23 #define SS   16
24 #define FRAME_SIZE 17
25 
26 #else /* __i386__ */
27 
28 #if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS)
29 /*
30  * C ABI says these regs are callee-preserved. They aren't saved on kernel entry
31  * unless syscall needs a complete, fully filled "struct pt_regs".
32  */
33 #define R15 0
34 #define R14 8
35 #define R13 16
36 #define R12 24
37 #define RBP 32
38 #define RBX 40
39 /* These regs are callee-clobbered. Always saved on kernel entry. */
40 #define R11 48
41 #define R10 56
42 #define R9 64
43 #define R8 72
44 #define RAX 80
45 #define RCX 88
46 #define RDX 96
47 #define RSI 104
48 #define RDI 112
49 /*
50  * On syscall entry, this is syscall#. On CPU exception, this is error code.
51  * On hw interrupt, it's IRQ number:
52  */
53 #define ORIG_RAX 120
54 /* Return frame for iretq */
55 #define RIP 128
56 #define CS 136
57 #define EFLAGS 144
58 #define RSP 152
59 #define SS 160
60 #endif /* __ASSEMBLY__ */
61 
62 /* top of stack page */
63 #define FRAME_SIZE 168
64 
65 #endif /* !__i386__ */
66 
67 /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
68 #define PTRACE_GETREGS            12
69 #define PTRACE_SETREGS            13
70 #define PTRACE_GETFPREGS          14
71 #define PTRACE_SETFPREGS          15
72 #define PTRACE_GETFPXREGS         18
73 #define PTRACE_SETFPXREGS         19
74 
75 #define PTRACE_OLDSETOPTIONS      21
76 
77 /* only useful for access 32bit programs / kernels */
78 #define PTRACE_GET_THREAD_AREA    25
79 #define PTRACE_SET_THREAD_AREA    26
80 
81 #ifdef __x86_64__
82 # define PTRACE_ARCH_PRCTL	  30
83 #endif
84 
85 #define PTRACE_SYSEMU		  31
86 #define PTRACE_SYSEMU_SINGLESTEP  32
87 
88 #define PTRACE_SINGLEBLOCK	33	/* resume execution until next branch */
89 
90 #ifndef __ASSEMBLY__
91 #include <linux/types.h>
92 #endif
93 
94 #endif /* _ASM_X86_PTRACE_ABI_H */
95