2005-04-16 15:20:36 -07:00
# 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
2006-01-08 01:04:49 -08:00
# define PTRACE_SYSEMU 31
# define PTRACE_SYSEMU_SINGLESTEP 32
2005-04-16 15:20:36 -07:00
# ifdef __KERNEL__
2005-07-27 11:43:25 -07:00
# include <asm/vm86.h>
2005-04-16 15:20:36 -07:00
struct task_struct ;
extern void send_sigtrap ( struct task_struct * tsk , struct pt_regs * regs , int error_code ) ;
2005-07-26 21:57:24 -04:00
2005-09-03 15:56:43 -07:00
/*
* 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 .
*/
2005-07-26 21:57:24 -04:00
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 ;
}
2005-04-16 15:20:36 -07:00
# 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
2005-07-26 21:57:24 -04:00
# endif /* __KERNEL__ */
2005-04-16 15:20:36 -07:00
# endif