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