1*4882a593Smuzhiyun #ifndef _I386_PTRACE_H 2*4882a593Smuzhiyun #define _I386_PTRACE_H 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #include <asm/types.h> 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #define EBX 0 7*4882a593Smuzhiyun #define ECX 1 8*4882a593Smuzhiyun #define EDX 2 9*4882a593Smuzhiyun #define ESI 3 10*4882a593Smuzhiyun #define EDI 4 11*4882a593Smuzhiyun #define EBP 5 12*4882a593Smuzhiyun #define EAX 6 13*4882a593Smuzhiyun #define DS 7 14*4882a593Smuzhiyun #define ES 8 15*4882a593Smuzhiyun #define FS 9 16*4882a593Smuzhiyun #define GS 10 17*4882a593Smuzhiyun #define ORIG_EAX 11 18*4882a593Smuzhiyun #define EIP 12 19*4882a593Smuzhiyun #define CS 13 20*4882a593Smuzhiyun #define EFL 14 21*4882a593Smuzhiyun #define UESP 15 22*4882a593Smuzhiyun #define SS 16 23*4882a593Smuzhiyun #define FRAME_SIZE 17 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* this struct defines the way the registers are stored on the 26*4882a593Smuzhiyun stack during a system call. */ 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun struct pt_regs { 29*4882a593Smuzhiyun long ebx; 30*4882a593Smuzhiyun long ecx; 31*4882a593Smuzhiyun long edx; 32*4882a593Smuzhiyun long esi; 33*4882a593Smuzhiyun long edi; 34*4882a593Smuzhiyun long ebp; 35*4882a593Smuzhiyun long eax; 36*4882a593Smuzhiyun int xds; 37*4882a593Smuzhiyun int xes; 38*4882a593Smuzhiyun int xfs; 39*4882a593Smuzhiyun int xgs; 40*4882a593Smuzhiyun long orig_eax; 41*4882a593Smuzhiyun long eip; 42*4882a593Smuzhiyun int xcs; 43*4882a593Smuzhiyun long eflags; 44*4882a593Smuzhiyun long esp; 45*4882a593Smuzhiyun int xss; 46*4882a593Smuzhiyun } __attribute__ ((packed)); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun struct irq_regs { 49*4882a593Smuzhiyun /* Pushed by irq_common_entry */ 50*4882a593Smuzhiyun long ebx; 51*4882a593Smuzhiyun long ecx; 52*4882a593Smuzhiyun long edx; 53*4882a593Smuzhiyun long esi; 54*4882a593Smuzhiyun long edi; 55*4882a593Smuzhiyun long ebp; 56*4882a593Smuzhiyun long esp; 57*4882a593Smuzhiyun long eax; 58*4882a593Smuzhiyun long xds; 59*4882a593Smuzhiyun long xes; 60*4882a593Smuzhiyun long xfs; 61*4882a593Smuzhiyun long xgs; 62*4882a593Smuzhiyun long xss; 63*4882a593Smuzhiyun /* Pushed by vector handler (irq_<num>) */ 64*4882a593Smuzhiyun long irq_id; 65*4882a593Smuzhiyun /* Pushed by cpu in response to interrupt */ 66*4882a593Smuzhiyun union { 67*4882a593Smuzhiyun struct { 68*4882a593Smuzhiyun long eip; 69*4882a593Smuzhiyun long xcs; 70*4882a593Smuzhiyun long eflags; 71*4882a593Smuzhiyun } ctx1; 72*4882a593Smuzhiyun struct { 73*4882a593Smuzhiyun long err; 74*4882a593Smuzhiyun long eip; 75*4882a593Smuzhiyun long xcs; 76*4882a593Smuzhiyun long eflags; 77*4882a593Smuzhiyun } ctx2; 78*4882a593Smuzhiyun } context; 79*4882a593Smuzhiyun } __attribute__ ((packed)); 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ 82*4882a593Smuzhiyun #define PTRACE_GETREGS 12 83*4882a593Smuzhiyun #define PTRACE_SETREGS 13 84*4882a593Smuzhiyun #define PTRACE_GETFPREGS 14 85*4882a593Smuzhiyun #define PTRACE_SETFPREGS 15 86*4882a593Smuzhiyun #define PTRACE_GETFPXREGS 18 87*4882a593Smuzhiyun #define PTRACE_SETFPXREGS 19 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun #define PTRACE_SETOPTIONS 21 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun /* options set using PTRACE_SETOPTIONS */ 92*4882a593Smuzhiyun #define PTRACE_O_TRACESYSGOOD 0x00000001 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun #ifdef __KERNEL__ 95*4882a593Smuzhiyun #define user_mode(regs) ((VM_MASK & (regs)->eflags) || (3 & (regs)->xcs)) 96*4882a593Smuzhiyun #define instruction_pointer(regs) ((regs)->eip) 97*4882a593Smuzhiyun extern void show_regs(struct pt_regs *); 98*4882a593Smuzhiyun #endif 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun #endif 101