Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 | /* $Id: ptrace.h,v 1.13 1997/09/17 17:27:51 davem Exp $ */ #ifndef _SPARC64_PTRACE_H #define _SPARC64_PTRACE_H #include <asm/pstate.h> /* This struct defines the way the registers are stored on the * stack during a system call and basically all traps. */ #ifndef __ASSEMBLY__ struct pt_regs { unsigned long u_regs[16]; /* globals and ins */ unsigned long tstate; unsigned long tpc; unsigned long tnpc; unsigned int y; unsigned int fprs; }; struct pt_regs32 { unsigned int psr; unsigned int pc; unsigned int npc; unsigned int y; unsigned int u_regs[16]; /* globals and ins */ }; #define UREG_G0 0 #define UREG_G1 1 #define UREG_G2 2 #define UREG_G3 3 #define UREG_G4 4 #define UREG_G5 5 #define UREG_G6 6 #define UREG_G7 7 #define UREG_I0 8 #define UREG_I1 9 #define UREG_I2 10 #define UREG_I3 11 #define UREG_I4 12 #define UREG_I5 13 #define UREG_I6 14 #define UREG_I7 15 #define UREG_FP UREG_I6 #define UREG_RETPC UREG_I7 /* A V9 register window */ struct reg_window { unsigned long locals[8]; unsigned long ins[8]; }; /* A 32-bit register window. */ struct reg_window32 { unsigned int locals[8]; unsigned int ins[8]; }; /* A V9 Sparc stack frame */ struct sparc_stackf { unsigned long locals[8]; unsigned long ins[6]; struct sparc_stackf *fp; unsigned long callers_pc; char *structptr; unsigned long xargs[6]; unsigned long xxargs[1]; }; /* A 32-bit Sparc stack frame */ struct sparc_stackf32 { unsigned int locals[8]; unsigned int ins[6]; unsigned int fp; unsigned int callers_pc; unsigned int structptr; unsigned int xargs[6]; unsigned int xxargs[1]; }; struct sparc_trapf { unsigned long locals[8]; unsigned long ins[8]; unsigned long _unused; struct pt_regs *regs; }; #define TRACEREG_SZ sizeof(struct pt_regs) #define STACKFRAME_SZ sizeof(struct sparc_stackf) #define REGWIN_SZ sizeof(struct reg_window) #define TRACEREG32_SZ sizeof(struct pt_regs32) #define STACKFRAME32_SZ sizeof(struct sparc_stackf32) #define REGWIN32_SZ sizeof(struct reg_window32) #ifdef __KERNEL__ #define user_mode(regs) (!((regs)->tstate & TSTATE_PRIV)) #define instruction_pointer(regs) ((regs)->tpc) extern void show_regs(struct pt_regs *); #endif #else /* __ASSEMBLY__ */ /* For assembly code. */ #define TRACEREG_SZ 0xa0 #define STACKFRAME_SZ 0xc0 #define REGWIN_SZ 0x80 #define TRACEREG32_SZ 0x50 #define STACKFRAME32_SZ 0x60 #define REGWIN32_SZ 0x40 #include <asm/asm_offsets.h> #endif #ifdef __KERNEL__ #define STACK_BIAS 2047 #endif /* These are for pt_regs. */ #define PT_V9_G0 0x00 #define PT_V9_G1 0x08 #define PT_V9_G2 0x10 #define PT_V9_G3 0x18 #define PT_V9_G4 0x20 #define PT_V9_G5 0x28 #define PT_V9_G6 0x30 #define PT_V9_G7 0x38 #define PT_V9_I0 0x40 #define PT_V9_I1 0x48 #define PT_V9_I2 0x50 #define PT_V9_I3 0x58 #define PT_V9_I4 0x60 #define PT_V9_I5 0x68 #define PT_V9_I6 0x70 #define PT_V9_FP PT_V9_I6 #define PT_V9_I7 0x78 #define PT_V9_TSTATE 0x80 #define PT_V9_TPC 0x88 #define PT_V9_TNPC 0x90 #define PT_V9_Y 0x98 #define PT_V9_FPRS 0x9c #define PT_TSTATE PT_V9_TSTATE #define PT_TPC PT_V9_TPC #define PT_TNPC PT_V9_TNPC /* These for pt_regs32. */ #define PT_PSR 0x0 #define PT_PC 0x4 #define PT_NPC 0x8 #define PT_Y 0xc #define PT_G0 0x10 #define PT_WIM PT_G0 #define PT_G1 0x14 #define PT_G2 0x18 #define PT_G3 0x1c #define PT_G4 0x20 #define PT_G5 0x24 #define PT_G6 0x28 #define PT_G7 0x2c #define PT_I0 0x30 #define PT_I1 0x34 #define PT_I2 0x38 #define PT_I3 0x3c #define PT_I4 0x40 #define PT_I5 0x44 #define PT_I6 0x48 #define PT_FP PT_I6 #define PT_I7 0x4c /* Reg_window offsets */ #define RW_V9_L0 0x00 #define RW_V9_L1 0x08 #define RW_V9_L2 0x10 #define RW_V9_L3 0x18 #define RW_V9_L4 0x20 #define RW_V9_L5 0x28 #define RW_V9_L6 0x30 #define RW_V9_L7 0x38 #define RW_V9_I0 0x40 #define RW_V9_I1 0x48 #define RW_V9_I2 0x50 #define RW_V9_I3 0x58 #define RW_V9_I4 0x60 #define RW_V9_I5 0x68 #define RW_V9_I6 0x70 #define RW_V9_I7 0x78 #define RW_L0 0x00 #define RW_L1 0x04 #define RW_L2 0x08 #define RW_L3 0x0c #define RW_L4 0x10 #define RW_L5 0x14 #define RW_L6 0x18 #define RW_L7 0x1c #define RW_I0 0x20 #define RW_I1 0x24 #define RW_I2 0x28 #define RW_I3 0x2c #define RW_I4 0x30 #define RW_I5 0x34 #define RW_I6 0x38 #define RW_I7 0x3c /* Stack_frame offsets */ #define SF_V9_L0 0x00 #define SF_V9_L1 0x08 #define SF_V9_L2 0x10 #define SF_V9_L3 0x18 #define SF_V9_L4 0x20 #define SF_V9_L5 0x28 #define SF_V9_L6 0x30 #define SF_V9_L7 0x38 #define SF_V9_I0 0x40 #define SF_V9_I1 0x48 #define SF_V9_I2 0x50 #define SF_V9_I3 0x58 #define SF_V9_I4 0x60 #define SF_V9_I5 0x68 #define SF_V9_FP 0x70 #define SF_V9_PC 0x78 #define SF_V9_RETP 0x80 #define SF_V9_XARG0 0x88 #define SF_V9_XARG1 0x90 #define SF_V9_XARG2 0x98 #define SF_V9_XARG3 0xa0 #define SF_V9_XARG4 0xa8 #define SF_V9_XARG5 0xb0 #define SF_V9_XXARG 0xb8 #define SF_L0 0x00 #define SF_L1 0x04 #define SF_L2 0x08 #define SF_L3 0x0c #define SF_L4 0x10 #define SF_L5 0x14 #define SF_L6 0x18 #define SF_L7 0x1c #define SF_I0 0x20 #define SF_I1 0x24 #define SF_I2 0x28 #define SF_I3 0x2c #define SF_I4 0x30 #define SF_I5 0x34 #define SF_FP 0x38 #define SF_PC 0x3c #define SF_RETP 0x40 #define SF_XARG0 0x44 #define SF_XARG1 0x48 #define SF_XARG2 0x4c #define SF_XARG3 0x50 #define SF_XARG4 0x54 #define SF_XARG5 0x58 #define SF_XXARG 0x5c /* Stuff for the ptrace system call */ #define PTRACE_SUNATTACH 10 #define PTRACE_SUNDETACH 11 #define PTRACE_GETREGS 12 #define PTRACE_SETREGS 13 #define PTRACE_GETFPREGS 14 #define PTRACE_SETFPREGS 15 #define PTRACE_READDATA 16 #define PTRACE_WRITEDATA 17 #define PTRACE_READTEXT 18 #define PTRACE_WRITETEXT 19 #define PTRACE_GETFPAREGS 20 #define PTRACE_SETFPAREGS 21 /* There are for debugging 64-bit processes, either from a 32 or 64 bit * parent. Thus their compliments are for debugging 32-bit processes only. */ #define PTRACE_GETREGS64 22 #define PTRACE_SETREGS64 23 /* PTRACE_SYSCALL is 24 */ #define PTRACE_GETFPREGS64 25 #define PTRACE_SETFPREGS64 26 #define PTRACE_GETUCODE 29 /* stupid bsd-ism */ /* These are for 32-bit processes debugging 64-bit ones. * Here addr and addr2 are passed in %g2 and %g3 respectively. */ #define PTRACE_PEEKTEXT64 (30 + PTRACE_PEEKTEXT) #define PTRACE_POKETEXT64 (30 + PTRACE_POKETEXT) #define PTRACE_PEEKDATA64 (30 + PTRACE_PEEKDATA) #define PTRACE_POKEDATA64 (30 + PTRACE_POKEDATA) #define PTRACE_READDATA64 (30 + PTRACE_READDATA) #define PTRACE_WRITEDATA64 (30 + PTRACE_WRITEDATA) #define PTRACE_READTEXT64 (30 + PTRACE_READTEXT) #define PTRACE_WRITETEXT64 (30 + PTRACE_WRITETEXT) #endif /* !(_SPARC64_PTRACE_H) */ |