2005-04-16 15:20:36 -07: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 11:49:19 +00:00
# define DSP_BASE 71 /* 3 more hi / lo register pairs */
# define DSP_CONTROL 77
2007-02-02 17:41:47 +01:00
# define ACX 78
2005-04-16 15:20:36 -07: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-03 15:56:16 -07:00
# ifdef CONFIG_32BIT
2005-04-16 15:20:36 -07: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 11:49:19 +00:00
unsigned long lo ;
2007-02-02 17:41:47 +01:00
# ifdef CONFIG_CPU_HAS_SMARTMIPS
unsigned long acx ;
# endif
2005-04-16 15:20:36 -07:00
unsigned long cp0_badvaddr ;
unsigned long cp0_cause ;
unsigned long cp0_epc ;
2006-04-05 09:45:45 +01:00
# ifdef CONFIG_MIPS_MT_SMTC
unsigned long cp0_tcstatus ;
# endif /* CONFIG_MIPS_MT_SMTC */
2006-09-29 11:08:59 +02:00
} __attribute__ ( ( aligned ( 8 ) ) ) ;
2005-04-16 15:20:36 -07:00
/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
2005-09-28 18:11:15 -04:00
# define PTRACE_GETREGS 12
# define PTRACE_SETREGS 13
# define PTRACE_GETFPREGS 14
# define PTRACE_SETFPREGS 15
2005-04-16 15:20:36 -07: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-28 18: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-16 15:20:36 -07:00
# ifdef __KERNEL__
# include <linux/linkage.h>
2006-09-07 01:00:22 +09:00
# include <asm/isadep.h>
2005-04-16 15:20:36 -07: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 ) ;
2007-10-14 23:27:21 +01:00
extern NORET_TYPE void die ( const char * , const struct pt_regs * ) ATTRIB_NORET ;
2006-12-10 15:02:17 +00:00
2007-10-14 23:27:21 +01:00
static inline void die_if_kernel ( const char * str , const struct pt_regs * regs )
2006-12-10 15:02:17 +00:00
{
if ( unlikely ( ! user_mode ( regs ) ) )
die ( str , regs ) ;
}
2005-04-16 15:20:36 -07:00
# endif
# endif /* _ASM_PTRACE_H */