2005-04-17 02:20:36 +04:00
/*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 1994 , 95 , 96 , 97 , 98 , 99 , 2000 by Ralf Baechle
* Copyright ( C ) 1999 , 2000 Silicon Graphics , Inc .
*/
# ifndef _ASM_PTRACE_H
# define _ASM_PTRACE_H
/* 0 - 31 are integer registers, 32 - 63 are fp registers. */
# define FPR_BASE 32
# define PC 64
# define CAUSE 65
# define BADVADDR 66
# define MMHI 67
# define MMLO 68
# define FPC_CSR 69
# define FPC_EIR 70
2005-05-31 15:49:19 +04:00
# define DSP_BASE 71 /* 3 more hi / lo register pairs */
# define DSP_CONTROL 77
2005-04-17 02:20:36 +04:00
/*
* This struct defines the way the registers are stored on the stack during a
* system call / exception . As usual the registers k0 / k1 aren ' t being saved .
*/
struct pt_regs {
2005-09-04 02:56:16 +04:00
# ifdef CONFIG_32BIT
2005-04-17 02:20:36 +04:00
/* Pad bytes for argument save space on the stack. */
unsigned long pad0 [ 6 ] ;
# endif
/* Saved main processor registers. */
unsigned long regs [ 32 ] ;
/* Saved special registers. */
unsigned long cp0_status ;
unsigned long hi ;
2005-05-31 15:49:19 +04:00
unsigned long lo ;
2005-04-17 02:20:36 +04:00
unsigned long cp0_badvaddr ;
unsigned long cp0_cause ;
unsigned long cp0_epc ;
2006-04-05 12:45:45 +04:00
# ifdef CONFIG_MIPS_MT_SMTC
unsigned long cp0_tcstatus ;
# endif /* CONFIG_MIPS_MT_SMTC */
2006-09-29 13:08:59 +04:00
} __attribute__ ( ( aligned ( 8 ) ) ) ;
2005-04-17 02:20:36 +04:00
/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
2005-09-29 02:11:15 +04:00
# define PTRACE_GETREGS 12
# define PTRACE_SETREGS 13
# define PTRACE_GETFPREGS 14
# define PTRACE_SETFPREGS 15
2005-04-17 02:20:36 +04:00
/* #define PTRACE_GETFPXREGS 18 */
/* #define PTRACE_SETFPXREGS 19 */
# define PTRACE_OLDSETOPTIONS 21
# define PTRACE_GET_THREAD_AREA 25
# define PTRACE_SET_THREAD_AREA 26
2005-09-29 02:11:15 +04:00
/* Calls to trace a 64bit program from a 32bit program. */
# define PTRACE_PEEKTEXT_3264 0xc0
# define PTRACE_PEEKDATA_3264 0xc1
# define PTRACE_POKETEXT_3264 0xc2
# define PTRACE_POKEDATA_3264 0xc3
# define PTRACE_GET_THREAD_AREA_3264 0xc4
2005-04-17 02:20:36 +04:00
# ifdef __KERNEL__
# include <linux/linkage.h>
2006-09-06 20:00:22 +04:00
# include <asm/isadep.h>
2005-04-17 02:20:36 +04:00
/*
* Does the process account for user or for system time ?
*/
# define user_mode(regs) (((regs)->cp0_status & KU_MASK) == KU_USER)
# define instruction_pointer(regs) ((regs)->cp0_epc)
# define profile_pc(regs) instruction_pointer(regs)
extern asmlinkage void do_syscall_trace ( struct pt_regs * regs , int entryexit ) ;
2006-12-10 18:02:17 +03:00
extern NORET_TYPE void die ( const char * , struct pt_regs * ) ;
static inline void die_if_kernel ( const char * str , struct pt_regs * regs )
{
if ( unlikely ( ! user_mode ( regs ) ) )
die ( str , regs ) ;
}
2005-04-17 02:20:36 +04:00
# endif
# endif /* _ASM_PTRACE_H */