xref: /linux/arch/x86/include/uapi/asm/ptrace.h (revision 3d0fe49454652117522f60bfbefb978ba0e5300b)
1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 #ifndef _UAPI_ASM_X86_PTRACE_H
3 #define _UAPI_ASM_X86_PTRACE_H
4 
5 #include <linux/compiler.h>	/* For __user */
6 #include <asm/ptrace-abi.h>
7 #include <asm/processor-flags.h>
8 
9 
10 #ifndef __ASSEMBLY__
11 
12 #ifdef __i386__
13 /* this struct defines the way the registers are stored on the
14    stack during a system call. */
15 
16 #ifndef __KERNEL__
17 
18 struct pt_regs {
19 	long ebx;
20 	long ecx;
21 	long edx;
22 	long esi;
23 	long edi;
24 	long ebp;
25 	long eax;
26 	int  xds;
27 	int  xes;
28 	int  xfs;
29 	int  xgs;
30 	long orig_eax;
31 	long eip;
32 	int  xcs;
33 	long eflags;
34 	long esp;
35 	int  xss;
36 };
37 
38 #endif /* __KERNEL__ */
39 
40 #else /* __i386__ */
41 
42 #ifndef __KERNEL__
43 
44 struct pt_regs {
45 /*
46  * C ABI says these regs are callee-preserved. They aren't saved on kernel entry
47  * unless syscall needs a complete, fully filled "struct pt_regs".
48  */
49 	unsigned long r15;
50 	unsigned long r14;
51 	unsigned long r13;
52 	unsigned long r12;
53 	unsigned long rbp;
54 	unsigned long rbx;
55 /* These regs are callee-clobbered. Always saved on kernel entry. */
56 	unsigned long r11;
57 	unsigned long r10;
58 	unsigned long r9;
59 	unsigned long r8;
60 	unsigned long rax;
61 	unsigned long rcx;
62 	unsigned long rdx;
63 	unsigned long rsi;
64 	unsigned long rdi;
65 /*
66  * On syscall entry, this is syscall#. On CPU exception, this is error code.
67  * On hw interrupt, it's IRQ number:
68  */
69 	unsigned long orig_rax;
70 /* Return frame for iretq */
71 	unsigned long rip;
72 	unsigned long cs;
73 	unsigned long eflags;
74 	unsigned long rsp;
75 	unsigned long ss;
76 /* top of stack page */
77 };
78 
79 #endif /* __KERNEL__ */
80 #endif /* !__i386__ */
81 
82 
83 
84 #endif /* !__ASSEMBLY__ */
85 
86 #endif /* _UAPI_ASM_X86_PTRACE_H */
87