|  | #ifndef _I386_PTRACE_H | 
|  | #define _I386_PTRACE_H | 
|  |  | 
|  | #define EBX 0 | 
|  | #define ECX 1 | 
|  | #define EDX 2 | 
|  | #define ESI 3 | 
|  | #define EDI 4 | 
|  | #define EBP 5 | 
|  | #define EAX 6 | 
|  | #define DS 7 | 
|  | #define ES 8 | 
|  | #define FS 9 | 
|  | #define GS 10 | 
|  | #define ORIG_EAX 11 | 
|  | #define EIP 12 | 
|  | #define CS  13 | 
|  | #define EFL 14 | 
|  | #define UESP 15 | 
|  | #define SS   16 | 
|  | #define FRAME_SIZE 17 | 
|  |  | 
|  | /* this struct defines the way the registers are stored on the | 
|  | stack during a system call. */ | 
|  |  | 
|  | struct pt_regs { | 
|  | long ebx; | 
|  | long ecx; | 
|  | long edx; | 
|  | long esi; | 
|  | long edi; | 
|  | long ebp; | 
|  | long eax; | 
|  | int  xds; | 
|  | int  xes; | 
|  | long orig_eax; | 
|  | long eip; | 
|  | int  xcs; | 
|  | long eflags; | 
|  | long esp; | 
|  | int  xss; | 
|  | }; | 
|  |  | 
|  | /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */ | 
|  | #define PTRACE_GETREGS            12 | 
|  | #define PTRACE_SETREGS            13 | 
|  | #define PTRACE_GETFPREGS          14 | 
|  | #define PTRACE_SETFPREGS          15 | 
|  | #define PTRACE_GETFPXREGS         18 | 
|  | #define PTRACE_SETFPXREGS         19 | 
|  |  | 
|  | #define PTRACE_OLDSETOPTIONS         21 | 
|  |  | 
|  | #define PTRACE_GET_THREAD_AREA    25 | 
|  | #define PTRACE_SET_THREAD_AREA    26 | 
|  |  | 
|  | #ifdef __KERNEL__ | 
|  |  | 
|  | #include <asm/vm86.h> | 
|  |  | 
|  | struct task_struct; | 
|  | extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code); | 
|  |  | 
|  | static inline int user_mode(struct pt_regs *regs) | 
|  | { | 
|  | return (regs->xcs & 3) != 0; | 
|  | } | 
|  | static inline int user_mode_vm(struct pt_regs *regs) | 
|  | { | 
|  | return ((regs->xcs & 3) | (regs->eflags & VM_MASK)) != 0; | 
|  | } | 
|  | #define instruction_pointer(regs) ((regs)->eip) | 
|  | #if defined(CONFIG_SMP) && defined(CONFIG_FRAME_POINTER) | 
|  | extern unsigned long profile_pc(struct pt_regs *regs); | 
|  | #else | 
|  | #define profile_pc(regs) instruction_pointer(regs) | 
|  | #endif | 
|  | #endif /* __KERNEL__ */ | 
|  |  | 
|  | #endif |