| 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 __ASSEMBLER__ | 
|---|
| 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 /* !__ASSEMBLER__ */ | 
|---|
| 85 |  | 
|---|
| 86 | #endif /* _UAPI_ASM_X86_PTRACE_H */ | 
|---|
| 87 |  | 
|---|