10437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifndef _ASM_X86_PTRACE_ABI_H
20437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define _ASM_X86_PTRACE_ABI_H
30437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
40437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifdef __i386__
50437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
60437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define EBX 0
70437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define ECX 1
80437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define EDX 2
90437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define ESI 3
100437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define EDI 4
110437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define EBP 5
120437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define EAX 6
130437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define DS 7
140437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define ES 8
150437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define FS 9
160437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define GS 10
170437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define ORIG_EAX 11
180437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define EIP 12
190437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define CS  13
200437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define EFL 14
210437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define UESP 15
220437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define SS   16
230437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define FRAME_SIZE 17
240437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
250437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#else /* __i386__ */
260437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
270437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#if defined(__ASSEMBLY__) || defined(__FRAME_OFFSETS)
2812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/*
2912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * C ABI says these regs are callee-preserved. They aren't saved on kernel entry
3012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * unless syscall needs a complete, fully filled "struct pt_regs".
3112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris */
320437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define R15 0
330437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define R14 8
340437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define R13 16
350437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define R12 24
360437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define RBP 32
370437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define RBX 40
3812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* These regs are callee-clobbered. Always saved on kernel entry. */
390437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define R11 48
400437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define R10 56
410437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define R9 64
420437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define R8 72
430437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define RAX 80
440437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define RCX 88
450437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define RDX 96
460437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define RSI 104
470437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define RDI 112
4812e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/*
4912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * On syscall entry, this is syscall#. On CPU exception, this is error code.
5012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris * On hw interrupt, it's IRQ number:
5112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris */
5212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define ORIG_RAX 120
5312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* Return frame for iretq */
540437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define RIP 128
550437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define CS 136
560437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define EFLAGS 144
570437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define RSP 152
580437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define SS 160
590437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* __ASSEMBLY__ */
600437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
610437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* top of stack page */
620437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define FRAME_SIZE 168
630437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
640437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* !__i386__ */
650437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
660437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
670437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_GETREGS            12
680437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_SETREGS            13
690437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_GETFPREGS          14
700437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_SETFPREGS          15
710437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_GETFPXREGS         18
720437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_SETFPXREGS         19
730437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
740437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_OLDSETOPTIONS      21
750437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
760437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* only useful for access 32bit programs / kernels */
770437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_GET_THREAD_AREA    25
780437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_SET_THREAD_AREA    26
790437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
800437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifdef __x86_64__
810437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris# define PTRACE_ARCH_PRCTL	  30
820437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif
830437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
840437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_SYSEMU		  31
850437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_SYSEMU_SINGLESTEP  32
860437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
870437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define PTRACE_SINGLEBLOCK	33	/* resume execution until next branch */
880437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
890437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifndef __ASSEMBLY__
900437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#include <linux/types.h>
910437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif
920437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
930437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* _ASM_X86_PTRACE_ABI_H */
94