1*deae26bfSKyle McMartin #ifndef _PARISC_PTRACE_H 2*deae26bfSKyle McMartin #define _PARISC_PTRACE_H 3*deae26bfSKyle McMartin 4*deae26bfSKyle McMartin /* written by Philipp Rumpf, Copyright (C) 1999 SuSE GmbH Nuernberg 5*deae26bfSKyle McMartin ** Copyright (C) 2000 Grant Grundler, Hewlett-Packard 6*deae26bfSKyle McMartin */ 7*deae26bfSKyle McMartin 8*deae26bfSKyle McMartin #include <linux/types.h> 9*deae26bfSKyle McMartin 10*deae26bfSKyle McMartin /* This struct defines the way the registers are stored on the 11*deae26bfSKyle McMartin * stack during a system call. 12*deae26bfSKyle McMartin * 13*deae26bfSKyle McMartin * N.B. gdb/strace care about the size and offsets within this 14*deae26bfSKyle McMartin * structure. If you change things, you may break object compatibility 15*deae26bfSKyle McMartin * for those applications. 16*deae26bfSKyle McMartin */ 17*deae26bfSKyle McMartin 18*deae26bfSKyle McMartin struct pt_regs { 19*deae26bfSKyle McMartin unsigned long gr[32]; /* PSW is in gr[0] */ 20*deae26bfSKyle McMartin __u64 fr[32]; 21*deae26bfSKyle McMartin unsigned long sr[ 8]; 22*deae26bfSKyle McMartin unsigned long iasq[2]; 23*deae26bfSKyle McMartin unsigned long iaoq[2]; 24*deae26bfSKyle McMartin unsigned long cr27; 25*deae26bfSKyle McMartin unsigned long pad0; /* available for other uses */ 26*deae26bfSKyle McMartin unsigned long orig_r28; 27*deae26bfSKyle McMartin unsigned long ksp; 28*deae26bfSKyle McMartin unsigned long kpc; 29*deae26bfSKyle McMartin unsigned long sar; /* CR11 */ 30*deae26bfSKyle McMartin unsigned long iir; /* CR19 */ 31*deae26bfSKyle McMartin unsigned long isr; /* CR20 */ 32*deae26bfSKyle McMartin unsigned long ior; /* CR21 */ 33*deae26bfSKyle McMartin unsigned long ipsw; /* CR22 */ 34*deae26bfSKyle McMartin }; 35*deae26bfSKyle McMartin 36*deae26bfSKyle McMartin /* 37*deae26bfSKyle McMartin * The numbers chosen here are somewhat arbitrary but absolutely MUST 38*deae26bfSKyle McMartin * not overlap with any of the number assigned in <linux/ptrace.h>. 39*deae26bfSKyle McMartin * 40*deae26bfSKyle McMartin * These ones are taken from IA-64 on the assumption that theirs are 41*deae26bfSKyle McMartin * the most correct (and we also want to support PTRACE_SINGLEBLOCK 42*deae26bfSKyle McMartin * since we have taken branch traps too) 43*deae26bfSKyle McMartin */ 44*deae26bfSKyle McMartin #define PTRACE_SINGLEBLOCK 12 /* resume execution until next branch */ 45*deae26bfSKyle McMartin 46*deae26bfSKyle McMartin #ifdef __KERNEL__ 47*deae26bfSKyle McMartin 48*deae26bfSKyle McMartin #define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS)) 49*deae26bfSKyle McMartin 50*deae26bfSKyle McMartin /* XXX should we use iaoq[1] or iaoq[0] ? */ 51*deae26bfSKyle McMartin #define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0) 52*deae26bfSKyle McMartin #define user_space(regs) (((regs)->iasq[1] != 0) ? 1 : 0) 53*deae26bfSKyle McMartin #define instruction_pointer(regs) ((regs)->iaoq[0] & ~3) 54*deae26bfSKyle McMartin unsigned long profile_pc(struct pt_regs *); 55*deae26bfSKyle McMartin extern void show_regs(struct pt_regs *); 56*deae26bfSKyle McMartin #endif 57*deae26bfSKyle McMartin 58*deae26bfSKyle McMartin #endif 59