1 /* $Id: ptrace.h,v 1.25 1997/03/04 16:27:25 jj Exp $ */ 2 #ifndef _SPARC_PTRACE_H 3 #define _SPARC_PTRACE_H 4 5 #include <asm/psr.h> 6 7 /* This struct defines the way the registers are stored on the 8 * stack during a system call and basically all traps. 9 */ 10 11 #ifndef __ASSEMBLY__ 12 13 struct pt_regs { 14 unsigned long psr; 15 unsigned long pc; 16 unsigned long npc; 17 unsigned long y; 18 unsigned long u_regs[16]; /* globals and ins */ 19 }; 20 21 #define UREG_G0 0 22 #define UREG_G1 1 23 #define UREG_G2 2 24 #define UREG_G3 3 25 #define UREG_G4 4 26 #define UREG_G5 5 27 #define UREG_G6 6 28 #define UREG_G7 7 29 #define UREG_I0 8 30 #define UREG_I1 9 31 #define UREG_I2 10 32 #define UREG_I3 11 33 #define UREG_I4 12 34 #define UREG_I5 13 35 #define UREG_I6 14 36 #define UREG_I7 15 37 #define UREG_WIM UREG_G0 38 #define UREG_FADDR UREG_G0 39 #define UREG_FP UREG_I6 40 #define UREG_RETPC UREG_I7 41 42 /* A register window */ 43 struct reg_window { 44 unsigned long locals[8]; 45 unsigned long ins[8]; 46 }; 47 48 /* A Sparc stack frame */ 49 struct sparc_stackf { 50 unsigned long locals[8]; 51 unsigned long ins[6]; 52 struct sparc_stackf *fp; 53 unsigned long callers_pc; 54 char *structptr; 55 unsigned long xargs[6]; 56 unsigned long xxargs[1]; 57 }; 58 59 #define TRACEREG_SZ sizeof(struct pt_regs) 60 #define STACKFRAME_SZ sizeof(struct sparc_stackf) 61 62 #ifdef __KERNEL__ 63 #define user_mode(regs) (!((regs)->psr & PSR_PS)) 64 #define instruction_pointer(regs) ((regs)->pc) 65 extern void show_regs(struct pt_regs *); 66 #endif 67 68 #else /* __ASSEMBLY__ */ 69 /* For assembly code. */ 70 #define TRACEREG_SZ 0x50 71 #define STACKFRAME_SZ 0x60 72 #endif 73 74 #include <asm/asm_offsets.h> 75 76 /* These are for pt_regs. */ 77 #define PT_PSR 0x0 78 #define PT_PC 0x4 79 #define PT_NPC 0x8 80 #define PT_Y 0xc 81 #define PT_G0 0x10 82 #define PT_WIM PT_G0 83 #define PT_G1 0x14 84 #define PT_G2 0x18 85 #define PT_G3 0x1c 86 #define PT_G4 0x20 87 #define PT_G5 0x24 88 #define PT_G6 0x28 89 #define PT_G7 0x2c 90 #define PT_I0 0x30 91 #define PT_I1 0x34 92 #define PT_I2 0x38 93 #define PT_I3 0x3c 94 #define PT_I4 0x40 95 #define PT_I5 0x44 96 #define PT_I6 0x48 97 #define PT_FP PT_I6 98 #define PT_I7 0x4c 99 100 /* Reg_window offsets */ 101 #define RW_L0 0x00 102 #define RW_L1 0x04 103 #define RW_L2 0x08 104 #define RW_L3 0x0c 105 #define RW_L4 0x10 106 #define RW_L5 0x14 107 #define RW_L6 0x18 108 #define RW_L7 0x1c 109 #define RW_I0 0x20 110 #define RW_I1 0x24 111 #define RW_I2 0x28 112 #define RW_I3 0x2c 113 #define RW_I4 0x30 114 #define RW_I5 0x34 115 #define RW_I6 0x38 116 #define RW_I7 0x3c 117 118 /* Stack_frame offsets */ 119 #define SF_L0 0x00 120 #define SF_L1 0x04 121 #define SF_L2 0x08 122 #define SF_L3 0x0c 123 #define SF_L4 0x10 124 #define SF_L5 0x14 125 #define SF_L6 0x18 126 #define SF_L7 0x1c 127 #define SF_I0 0x20 128 #define SF_I1 0x24 129 #define SF_I2 0x28 130 #define SF_I3 0x2c 131 #define SF_I4 0x30 132 #define SF_I5 0x34 133 #define SF_FP 0x38 134 #define SF_PC 0x3c 135 #define SF_RETP 0x40 136 #define SF_XARG0 0x44 137 #define SF_XARG1 0x48 138 #define SF_XARG2 0x4c 139 #define SF_XARG3 0x50 140 #define SF_XARG4 0x54 141 #define SF_XARG5 0x58 142 #define SF_XXARG 0x5c 143 144 /* Stuff for the ptrace system call */ 145 #define PTRACE_SUNATTACH 10 146 #define PTRACE_SUNDETACH 11 147 #define PTRACE_GETREGS 12 148 #define PTRACE_SETREGS 13 149 #define PTRACE_GETFPREGS 14 150 #define PTRACE_SETFPREGS 15 151 #define PTRACE_READDATA 16 152 #define PTRACE_WRITEDATA 17 153 #define PTRACE_READTEXT 18 154 #define PTRACE_WRITETEXT 19 155 #define PTRACE_GETFPAREGS 20 156 #define PTRACE_SETFPAREGS 21 157 158 #define PTRACE_GETUCODE 29 /* stupid bsd-ism */ 159 160 161 #endif /* !(_SPARC_PTRACE_H) */ 162