1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux 1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 /* !! 2 #ifndef _UAPI__SPARC_PTRACE_H 3 * Ptrace definitions for the Hexagon architec !! 3 #define _UAPI__SPARC_PTRACE_H 4 * !! 4 5 * Copyright (c) 2010-2011, The Linux Foundati !! 5 #if defined(__sparc__) && defined(__arch64__) 6 * !! 6 /* 64 bit sparc */ 7 * This program is free software; you can redi !! 7 #include <asm/pstate.h> 8 * it under the terms of the GNU General Publi !! 8 9 * only version 2 as published by the Free Sof !! 9 /* This struct defines the way the registers are stored on the 10 * !! 10 * stack during a system call and basically all traps. 11 * This program is distributed in the hope tha !! 11 */ 12 * but WITHOUT ANY WARRANTY; without even the !! 12 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR !! 13 /* This magic value must have the low 9 bits clear, 14 * GNU General Public License for more details !! 14 * as that is where we encode the %tt value, see below. 15 * << 16 * You should have received a copy of the GNU << 17 * along with this program; if not, write to t << 18 * Foundation, Inc., 51 Franklin Street, Fifth << 19 * 02110-1301, USA. << 20 */ 15 */ >> 16 #define PT_REGS_MAGIC 0x57ac6c00 >> 17 >> 18 #ifndef __ASSEMBLY__ >> 19 >> 20 #include <linux/types.h> >> 21 >> 22 struct pt_regs { >> 23 unsigned long u_regs[16]; /* globals and ins */ >> 24 unsigned long tstate; >> 25 unsigned long tpc; >> 26 unsigned long tnpc; >> 27 unsigned int y; >> 28 >> 29 /* We encode a magic number, PT_REGS_MAGIC, along >> 30 * with the %tt (trap type) register value at trap >> 31 * entry time. The magic number allows us to identify >> 32 * accurately a trap stack frame in the stack >> 33 * unwinder, and the %tt value allows us to test >> 34 * things like "in a system call" etc. for an arbitray >> 35 * process. >> 36 * >> 37 * The PT_REGS_MAGIC is chosen such that it can be >> 38 * loaded completely using just a sethi instruction. >> 39 */ >> 40 unsigned int magic; >> 41 }; >> 42 >> 43 struct pt_regs32 { >> 44 unsigned int psr; >> 45 unsigned int pc; >> 46 unsigned int npc; >> 47 unsigned int y; >> 48 unsigned int u_regs[16]; /* globals and ins */ >> 49 }; >> 50 >> 51 /* A V9 register window */ >> 52 struct reg_window { >> 53 unsigned long locals[8]; >> 54 unsigned long ins[8]; >> 55 }; >> 56 >> 57 /* A 32-bit register window. */ >> 58 struct reg_window32 { >> 59 unsigned int locals[8]; >> 60 unsigned int ins[8]; >> 61 }; >> 62 >> 63 /* A V9 Sparc stack frame */ >> 64 struct sparc_stackf { >> 65 unsigned long locals[8]; >> 66 unsigned long ins[6]; >> 67 struct sparc_stackf *fp; >> 68 unsigned long callers_pc; >> 69 char *structptr; >> 70 unsigned long xargs[6]; >> 71 unsigned long xxargs[1]; >> 72 }; >> 73 >> 74 /* A 32-bit Sparc stack frame */ >> 75 struct sparc_stackf32 { >> 76 unsigned int locals[8]; >> 77 unsigned int ins[6]; >> 78 unsigned int fp; >> 79 unsigned int callers_pc; >> 80 unsigned int structptr; >> 81 unsigned int xargs[6]; >> 82 unsigned int xxargs[1]; >> 83 }; >> 84 >> 85 struct sparc_trapf { >> 86 unsigned long locals[8]; >> 87 unsigned long ins[8]; >> 88 unsigned long _unused; >> 89 struct pt_regs *regs; >> 90 }; >> 91 #endif /* (!__ASSEMBLY__) */ >> 92 #else >> 93 /* 32 bit sparc */ >> 94 >> 95 #include <asm/psr.h> >> 96 >> 97 /* This struct defines the way the registers are stored on the >> 98 * stack during a system call and basically all traps. >> 99 */ >> 100 #ifndef __ASSEMBLY__ >> 101 >> 102 #include <linux/types.h> >> 103 >> 104 struct pt_regs { >> 105 unsigned long psr; >> 106 unsigned long pc; >> 107 unsigned long npc; >> 108 unsigned long y; >> 109 unsigned long u_regs[16]; /* globals and ins */ >> 110 }; >> 111 >> 112 /* A 32-bit register window. */ >> 113 struct reg_window32 { >> 114 unsigned long locals[8]; >> 115 unsigned long ins[8]; >> 116 }; >> 117 >> 118 /* A Sparc stack frame */ >> 119 struct sparc_stackf { >> 120 unsigned long locals[8]; >> 121 unsigned long ins[6]; >> 122 struct sparc_stackf *fp; >> 123 unsigned long callers_pc; >> 124 char *structptr; >> 125 unsigned long xargs[6]; >> 126 unsigned long xxargs[1]; >> 127 }; >> 128 #endif /* (!__ASSEMBLY__) */ >> 129 >> 130 #endif /* (defined(__sparc__) && defined(__arch64__))*/ >> 131 >> 132 #ifndef __ASSEMBLY__ 21 133 22 #ifndef _ASM_PTRACE_H !! 134 #define TRACEREG_SZ sizeof(struct pt_regs) 23 #define _ASM_PTRACE_H !! 135 #define STACKFRAME_SZ sizeof(struct sparc_stackf) 24 136 25 #include <asm/registers.h> !! 137 #define TRACEREG32_SZ sizeof(struct pt_regs32) >> 138 #define STACKFRAME32_SZ sizeof(struct sparc_stackf32) 26 139 27 #define instruction_pointer(regs) pt_elr(regs) !! 140 #endif /* (!__ASSEMBLY__) */ 28 #define user_stack_pointer(regs) ((regs)->r29) !! 141 >> 142 #define UREG_G0 0 >> 143 #define UREG_G1 1 >> 144 #define UREG_G2 2 >> 145 #define UREG_G3 3 >> 146 #define UREG_G4 4 >> 147 #define UREG_G5 5 >> 148 #define UREG_G6 6 >> 149 #define UREG_G7 7 >> 150 #define UREG_I0 8 >> 151 #define UREG_I1 9 >> 152 #define UREG_I2 10 >> 153 #define UREG_I3 11 >> 154 #define UREG_I4 12 >> 155 #define UREG_I5 13 >> 156 #define UREG_I6 14 >> 157 #define UREG_I7 15 >> 158 #define UREG_FP UREG_I6 >> 159 #define UREG_RETPC UREG_I7 >> 160 >> 161 #if defined(__sparc__) && defined(__arch64__) >> 162 /* 64 bit sparc */ >> 163 >> 164 #ifndef __ASSEMBLY__ >> 165 >> 166 >> 167 #else /* __ASSEMBLY__ */ >> 168 /* For assembly code. */ >> 169 #define TRACEREG_SZ 0xa0 >> 170 #define STACKFRAME_SZ 0xc0 >> 171 >> 172 #define TRACEREG32_SZ 0x50 >> 173 #define STACKFRAME32_SZ 0x60 >> 174 #endif /* __ASSEMBLY__ */ >> 175 >> 176 #else /* (defined(__sparc__) && defined(__arch64__)) */ >> 177 >> 178 /* 32 bit sparc */ >> 179 >> 180 #ifndef __ASSEMBLY__ >> 181 >> 182 >> 183 #else /* (!__ASSEMBLY__) */ >> 184 /* For assembly code. */ >> 185 #define TRACEREG_SZ 0x50 >> 186 #define STACKFRAME_SZ 0x60 >> 187 #endif /* (!__ASSEMBLY__) */ >> 188 >> 189 #endif /* (defined(__sparc__) && defined(__arch64__)) */ >> 190 >> 191 >> 192 /* These are for pt_regs. */ >> 193 #define PT_V9_G0 0x00 >> 194 #define PT_V9_G1 0x08 >> 195 #define PT_V9_G2 0x10 >> 196 #define PT_V9_G3 0x18 >> 197 #define PT_V9_G4 0x20 >> 198 #define PT_V9_G5 0x28 >> 199 #define PT_V9_G6 0x30 >> 200 #define PT_V9_G7 0x38 >> 201 #define PT_V9_I0 0x40 >> 202 #define PT_V9_I1 0x48 >> 203 #define PT_V9_I2 0x50 >> 204 #define PT_V9_I3 0x58 >> 205 #define PT_V9_I4 0x60 >> 206 #define PT_V9_I5 0x68 >> 207 #define PT_V9_I6 0x70 >> 208 #define PT_V9_FP PT_V9_I6 >> 209 #define PT_V9_I7 0x78 >> 210 #define PT_V9_TSTATE 0x80 >> 211 #define PT_V9_TPC 0x88 >> 212 #define PT_V9_TNPC 0x90 >> 213 #define PT_V9_Y 0x98 >> 214 #define PT_V9_MAGIC 0x9c >> 215 #define PT_TSTATE PT_V9_TSTATE >> 216 #define PT_TPC PT_V9_TPC >> 217 #define PT_TNPC PT_V9_TNPC >> 218 >> 219 /* These for pt_regs32. */ >> 220 #define PT_PSR 0x0 >> 221 #define PT_PC 0x4 >> 222 #define PT_NPC 0x8 >> 223 #define PT_Y 0xc >> 224 #define PT_G0 0x10 >> 225 #define PT_WIM PT_G0 >> 226 #define PT_G1 0x14 >> 227 #define PT_G2 0x18 >> 228 #define PT_G3 0x1c >> 229 #define PT_G4 0x20 >> 230 #define PT_G5 0x24 >> 231 #define PT_G6 0x28 >> 232 #define PT_G7 0x2c >> 233 #define PT_I0 0x30 >> 234 #define PT_I1 0x34 >> 235 #define PT_I2 0x38 >> 236 #define PT_I3 0x3c >> 237 #define PT_I4 0x40 >> 238 #define PT_I5 0x44 >> 239 #define PT_I6 0x48 >> 240 #define PT_FP PT_I6 >> 241 #define PT_I7 0x4c >> 242 >> 243 /* Reg_window offsets */ >> 244 #define RW_V9_L0 0x00 >> 245 #define RW_V9_L1 0x08 >> 246 #define RW_V9_L2 0x10 >> 247 #define RW_V9_L3 0x18 >> 248 #define RW_V9_L4 0x20 >> 249 #define RW_V9_L5 0x28 >> 250 #define RW_V9_L6 0x30 >> 251 #define RW_V9_L7 0x38 >> 252 #define RW_V9_I0 0x40 >> 253 #define RW_V9_I1 0x48 >> 254 #define RW_V9_I2 0x50 >> 255 #define RW_V9_I3 0x58 >> 256 #define RW_V9_I4 0x60 >> 257 #define RW_V9_I5 0x68 >> 258 #define RW_V9_I6 0x70 >> 259 #define RW_V9_I7 0x78 >> 260 >> 261 #define RW_L0 0x00 >> 262 #define RW_L1 0x04 >> 263 #define RW_L2 0x08 >> 264 #define RW_L3 0x0c >> 265 #define RW_L4 0x10 >> 266 #define RW_L5 0x14 >> 267 #define RW_L6 0x18 >> 268 #define RW_L7 0x1c >> 269 #define RW_I0 0x20 >> 270 #define RW_I1 0x24 >> 271 #define RW_I2 0x28 >> 272 #define RW_I3 0x2c >> 273 #define RW_I4 0x30 >> 274 #define RW_I5 0x34 >> 275 #define RW_I6 0x38 >> 276 #define RW_I7 0x3c >> 277 >> 278 /* Stack_frame offsets */ >> 279 #define SF_V9_L0 0x00 >> 280 #define SF_V9_L1 0x08 >> 281 #define SF_V9_L2 0x10 >> 282 #define SF_V9_L3 0x18 >> 283 #define SF_V9_L4 0x20 >> 284 #define SF_V9_L5 0x28 >> 285 #define SF_V9_L6 0x30 >> 286 #define SF_V9_L7 0x38 >> 287 #define SF_V9_I0 0x40 >> 288 #define SF_V9_I1 0x48 >> 289 #define SF_V9_I2 0x50 >> 290 #define SF_V9_I3 0x58 >> 291 #define SF_V9_I4 0x60 >> 292 #define SF_V9_I5 0x68 >> 293 #define SF_V9_FP 0x70 >> 294 #define SF_V9_PC 0x78 >> 295 #define SF_V9_RETP 0x80 >> 296 #define SF_V9_XARG0 0x88 >> 297 #define SF_V9_XARG1 0x90 >> 298 #define SF_V9_XARG2 0x98 >> 299 #define SF_V9_XARG3 0xa0 >> 300 #define SF_V9_XARG4 0xa8 >> 301 #define SF_V9_XARG5 0xb0 >> 302 #define SF_V9_XXARG 0xb8 >> 303 >> 304 #define SF_L0 0x00 >> 305 #define SF_L1 0x04 >> 306 #define SF_L2 0x08 >> 307 #define SF_L3 0x0c >> 308 #define SF_L4 0x10 >> 309 #define SF_L5 0x14 >> 310 #define SF_L6 0x18 >> 311 #define SF_L7 0x1c >> 312 #define SF_I0 0x20 >> 313 #define SF_I1 0x24 >> 314 #define SF_I2 0x28 >> 315 #define SF_I3 0x2c >> 316 #define SF_I4 0x30 >> 317 #define SF_I5 0x34 >> 318 #define SF_FP 0x38 >> 319 #define SF_PC 0x3c >> 320 #define SF_RETP 0x40 >> 321 #define SF_XARG0 0x44 >> 322 #define SF_XARG1 0x48 >> 323 #define SF_XARG2 0x4c >> 324 #define SF_XARG3 0x50 >> 325 #define SF_XARG4 0x54 >> 326 #define SF_XARG5 0x58 >> 327 #define SF_XXARG 0x5c >> 328 >> 329 >> 330 /* Stuff for the ptrace system call */ >> 331 #define PTRACE_SPARC_DETACH 11 >> 332 #define PTRACE_GETREGS 12 >> 333 #define PTRACE_SETREGS 13 >> 334 #define PTRACE_GETFPREGS 14 >> 335 #define PTRACE_SETFPREGS 15 >> 336 #define PTRACE_READDATA 16 >> 337 #define PTRACE_WRITEDATA 17 >> 338 #define PTRACE_READTEXT 18 >> 339 #define PTRACE_WRITETEXT 19 >> 340 #define PTRACE_GETFPAREGS 20 >> 341 #define PTRACE_SETFPAREGS 21 >> 342 >> 343 /* There are for debugging 64-bit processes, either from a 32 or 64 bit >> 344 * parent. Thus their complements are for debugging 32-bit processes only. >> 345 */ 29 346 30 #define profile_pc(regs) instruction_pointer(r !! 347 #define PTRACE_GETREGS64 22 >> 348 #define PTRACE_SETREGS64 23 >> 349 /* PTRACE_SYSCALL is 24 */ >> 350 #define PTRACE_GETFPREGS64 25 >> 351 #define PTRACE_SETFPREGS64 26 31 352 32 #endif !! 353 #endif /* _UAPI__SPARC_PTRACE_H */ 33 354
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.