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