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