125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
20437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifndef _UAPI_ASM_X86_PTRACE_H
30437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define _UAPI_ASM_X86_PTRACE_H
40437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
50437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#include <linux/compiler.h>	/* For __user */
60437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#include <asm/ptrace-abi.h>
70437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#include <asm/processor-flags.h>
80437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
90437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
100437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifndef __ASSEMBLY__
110437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
120437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifdef __i386__
130437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* this struct defines the way the registers are stored on the
140437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris   stack during a system call. */
150437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
160437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifndef __KERNEL__
170437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
180437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferrisstruct pt_regs {
190437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long ebx;
200437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long ecx;
210437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long edx;
220437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long esi;
230437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long edi;
240437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long ebp;
250437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long eax;
260437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	int  xds;
270437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	int  xes;
280437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	int  xfs;
290437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	int  xgs;
300437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long orig_eax;
310437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long eip;
320437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	int  xcs;
330437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long eflags;
340437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	long esp;
350437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	int  xss;
360437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris};
370437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
380437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* __KERNEL__ */
390437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
400437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#else /* __i386__ */
410437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
420437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifndef __KERNEL__
430437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
440437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferrisstruct pt_regs {
4512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/*
4612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * C ABI says these regs are callee-preserved. They aren't saved on kernel entry
4712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * unless syscall needs a complete, fully filled "struct pt_regs".
4812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris */
490437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long r15;
500437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long r14;
510437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long r13;
520437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long r12;
530437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long rbp;
540437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long rbx;
5512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* These regs are callee-clobbered. Always saved on kernel entry. */
560437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long r11;
570437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long r10;
580437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long r9;
590437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long r8;
600437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long rax;
610437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long rcx;
620437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long rdx;
630437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long rsi;
640437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long rdi;
6512e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/*
6612e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * On syscall entry, this is syscall#. On CPU exception, this is error code.
6712e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * On hw interrupt, it's IRQ number:
6812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris */
690437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long orig_rax;
7012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* Return frame for iretq */
710437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long rip;
720437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long cs;
730437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long eflags;
740437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long rsp;
750437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned long ss;
760437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* top of stack page */
770437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris};
780437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
790437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* __KERNEL__ */
800437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* !__i386__ */
810437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
820437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
830437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
840437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* !__ASSEMBLY__ */
850437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
860437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* _UAPI_ASM_X86_PTRACE_H */
87