| #ifndef _I386_PTRACE_H | 
 | #define _I386_PTRACE_H | 
 |  | 
 | #include <asm/ptrace-abi.h> | 
 |  | 
 | /* 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; | 
 | }; | 
 |  | 
 | #ifdef __KERNEL__ | 
 |  | 
 | #include <asm/vm86.h> | 
 | #include <asm/segment.h> | 
 |  | 
 | struct task_struct; | 
 | extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code); | 
 |  | 
 | /* | 
 |  * user_mode_vm(regs) determines whether a register set came from user mode. | 
 |  * This is true if V8086 mode was enabled OR if the register set was from | 
 |  * protected mode with RPL-3 CS value.  This tricky test checks that with | 
 |  * one comparison.  Many places in the kernel can bypass this full check | 
 |  * if they have already ruled out V8086 mode, so user_mode(regs) can be used. | 
 |  */ | 
 | static inline int user_mode(struct pt_regs *regs) | 
 | { | 
 | 	return (regs->xcs & SEGMENT_RPL_MASK) == USER_RPL; | 
 | } | 
 | static inline int user_mode_vm(struct pt_regs *regs) | 
 | { | 
 | 	return ((regs->xcs & SEGMENT_RPL_MASK) | (regs->eflags & VM_MASK)) >= USER_RPL; | 
 | } | 
 | #define instruction_pointer(regs) ((regs)->eip) | 
 | extern unsigned long profile_pc(struct pt_regs *regs); | 
 | #endif /* __KERNEL__ */ | 
 |  | 
 | #endif |