1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linu !! 1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 /* !! 2 #ifndef _UAPI__SPARC_PTRACE_H 3 * Author: Hanlu Li <lihanlu@loongson.cn> !! 3 #define _UAPI__SPARC_PTRACE_H 4 * Huacai Chen <chenhuacai@loongson.cn !! 4 5 * !! 5 #if defined(__sparc__) && defined(__arch64__) 6 * Copyright (C) 2020-2022 Loongson Technology !! 6 /* 64 bit sparc */ >> 7 #include <asm/pstate.h> >> 8 >> 9 /* This struct defines the way the registers are stored on the >> 10 * stack during a system call and basically all traps. >> 11 */ >> 12 >> 13 /* This magic value must have the low 9 bits clear, >> 14 * as that is where we encode the %tt value, see below. 7 */ 15 */ 8 #ifndef _UAPI_ASM_PTRACE_H !! 16 #define PT_REGS_MAGIC 0x57ac6c00 9 #define _UAPI_ASM_PTRACE_H !! 17 >> 18 #ifndef __ASSEMBLY__ 10 19 11 #include <linux/types.h> 20 #include <linux/types.h> 12 21 13 #ifndef __KERNEL__ !! 22 struct pt_regs { 14 #include <stdint.h> !! 23 unsigned long u_regs[16]; /* globals and ins */ 15 #endif !! 24 unsigned long tstate; 16 !! 25 unsigned long tpc; 17 /* !! 26 unsigned long tnpc; 18 * For PTRACE_{POKE,PEEK}USR. 0 - 31 are GPRs, !! 27 unsigned int y; 19 * 32 is syscall's original ARG0, 33 is PC, 34 !! 28 20 */ !! 29 /* We encode a magic number, PT_REGS_MAGIC, along 21 #define GPR_BASE 0 !! 30 * with the %tt (trap type) register value at trap 22 #define GPR_NUM 32 !! 31 * entry time. The magic number allows us to identify 23 #define GPR_END (GPR_BASE + GPR_NUM - !! 32 * accurately a trap stack frame in the stack 24 #define ARG0 (GPR_END + 1) !! 33 * unwinder, and the %tt value allows us to test 25 #define PC (GPR_END + 2) !! 34 * things like "in a system call" etc. for an arbitray 26 #define BADVADDR (GPR_END + 3) !! 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 }; 27 42 28 #define NUM_FPU_REGS 32 !! 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 }; 29 50 30 struct user_pt_regs { !! 51 /* A V9 register window */ 31 /* Main processor registers. */ !! 52 struct reg_window { 32 unsigned long regs[32]; !! 53 unsigned long locals[8]; >> 54 unsigned long ins[8]; >> 55 }; 33 56 34 /* Original syscall arg0. */ !! 57 /* A 32-bit register window. */ 35 unsigned long orig_a0; !! 58 struct reg_window32 { >> 59 unsigned int locals[8]; >> 60 unsigned int ins[8]; >> 61 }; 36 62 37 /* Special CSR registers. */ !! 63 /* A V9 Sparc stack frame */ 38 unsigned long csr_era; !! 64 struct sparc_stackf { 39 unsigned long csr_badv; !! 65 unsigned long locals[8]; 40 unsigned long reserved[10]; !! 66 unsigned long ins[6]; 41 } __attribute__((aligned(8))); !! 67 struct sparc_stackf *fp; >> 68 unsigned long callers_pc; >> 69 char *structptr; >> 70 unsigned long xargs[6]; >> 71 unsigned long xxargs[1]; >> 72 }; 42 73 43 struct user_fp_state { !! 74 /* A 32-bit Sparc stack frame */ 44 uint64_t fpr[32]; !! 75 struct sparc_stackf32 { 45 uint64_t fcc; !! 76 unsigned int locals[8]; 46 uint32_t fcsr; !! 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]; 47 }; 83 }; 48 84 49 struct user_lsx_state { !! 85 struct sparc_trapf { 50 /* 32 registers, 128 bits width per re !! 86 unsigned long locals[8]; 51 uint64_t vregs[32*2]; !! 87 unsigned long ins[8]; >> 88 unsigned long _unused; >> 89 struct pt_regs *regs; 52 }; 90 }; >> 91 #endif /* (!__ASSEMBLY__) */ >> 92 #else >> 93 /* 32 bit sparc */ >> 94 >> 95 #include <asm/psr.h> 53 96 54 struct user_lasx_state { !! 97 /* This struct defines the way the registers are stored on the 55 /* 32 registers, 256 bits width per re !! 98 * stack during a system call and basically all traps. 56 uint64_t vregs[32*4]; !! 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 */ 57 }; 110 }; 58 111 59 struct user_lbt_state { !! 112 /* A 32-bit register window. */ 60 uint64_t scr[4]; !! 113 struct reg_window32 { 61 uint32_t eflags; !! 114 unsigned long locals[8]; 62 uint32_t ftop; !! 115 unsigned long ins[8]; 63 }; 116 }; 64 117 65 struct user_watch_state { !! 118 /* A Sparc stack frame */ 66 uint64_t dbg_info; !! 119 struct sparc_stackf { 67 struct { !! 120 unsigned long locals[8]; 68 uint64_t addr; !! 121 unsigned long ins[6]; 69 uint64_t mask; !! 122 struct sparc_stackf *fp; 70 uint32_t ctrl; !! 123 unsigned long callers_pc; 71 uint32_t pad; !! 124 char *structptr; 72 } dbg_regs[8]; !! 125 unsigned long xargs[6]; >> 126 unsigned long xxargs[1]; 73 }; 127 }; >> 128 #endif /* (!__ASSEMBLY__) */ >> 129 >> 130 #endif /* (defined(__sparc__) && defined(__arch64__))*/ >> 131 >> 132 #ifndef __ASSEMBLY__ >> 133 >> 134 #define TRACEREG_SZ sizeof(struct pt_regs) >> 135 #define STACKFRAME_SZ sizeof(struct sparc_stackf) >> 136 >> 137 #define TRACEREG32_SZ sizeof(struct pt_regs32) >> 138 #define STACKFRAME32_SZ sizeof(struct sparc_stackf32) >> 139 >> 140 #endif /* (!__ASSEMBLY__) */ >> 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 */ 74 346 75 #define PTRACE_SYSEMU 0x1f !! 347 #define PTRACE_GETREGS64 22 76 #define PTRACE_SYSEMU_SINGLESTEP 0x20 !! 348 #define PTRACE_SETREGS64 23 >> 349 /* PTRACE_SYSCALL is 24 */ >> 350 #define PTRACE_GETFPREGS64 25 >> 351 #define PTRACE_SETFPREGS64 26 77 352 78 #endif /* _UAPI_ASM_PTRACE_H */ !! 353 #endif /* _UAPI__SPARC_PTRACE_H */ 79 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.