162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 262306a36Sopenharmony_ci#ifndef _UAPI__SPARC_PTRACE_H 362306a36Sopenharmony_ci#define _UAPI__SPARC_PTRACE_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#if defined(__sparc__) && defined(__arch64__) 662306a36Sopenharmony_ci/* 64 bit sparc */ 762306a36Sopenharmony_ci#include <asm/pstate.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci/* This struct defines the way the registers are stored on the 1062306a36Sopenharmony_ci * stack during a system call and basically all traps. 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* This magic value must have the low 9 bits clear, 1462306a36Sopenharmony_ci * as that is where we encode the %tt value, see below. 1562306a36Sopenharmony_ci */ 1662306a36Sopenharmony_ci#define PT_REGS_MAGIC 0x57ac6c00 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#include <linux/types.h> 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistruct pt_regs { 2362306a36Sopenharmony_ci unsigned long u_regs[16]; /* globals and ins */ 2462306a36Sopenharmony_ci unsigned long tstate; 2562306a36Sopenharmony_ci unsigned long tpc; 2662306a36Sopenharmony_ci unsigned long tnpc; 2762306a36Sopenharmony_ci unsigned int y; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci /* We encode a magic number, PT_REGS_MAGIC, along 3062306a36Sopenharmony_ci * with the %tt (trap type) register value at trap 3162306a36Sopenharmony_ci * entry time. The magic number allows us to identify 3262306a36Sopenharmony_ci * accurately a trap stack frame in the stack 3362306a36Sopenharmony_ci * unwinder, and the %tt value allows us to test 3462306a36Sopenharmony_ci * things like "in a system call" etc. for an arbitray 3562306a36Sopenharmony_ci * process. 3662306a36Sopenharmony_ci * 3762306a36Sopenharmony_ci * The PT_REGS_MAGIC is chosen such that it can be 3862306a36Sopenharmony_ci * loaded completely using just a sethi instruction. 3962306a36Sopenharmony_ci */ 4062306a36Sopenharmony_ci unsigned int magic; 4162306a36Sopenharmony_ci}; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistruct pt_regs32 { 4462306a36Sopenharmony_ci unsigned int psr; 4562306a36Sopenharmony_ci unsigned int pc; 4662306a36Sopenharmony_ci unsigned int npc; 4762306a36Sopenharmony_ci unsigned int y; 4862306a36Sopenharmony_ci unsigned int u_regs[16]; /* globals and ins */ 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci/* A V9 register window */ 5262306a36Sopenharmony_cistruct reg_window { 5362306a36Sopenharmony_ci unsigned long locals[8]; 5462306a36Sopenharmony_ci unsigned long ins[8]; 5562306a36Sopenharmony_ci}; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci/* A 32-bit register window. */ 5862306a36Sopenharmony_cistruct reg_window32 { 5962306a36Sopenharmony_ci unsigned int locals[8]; 6062306a36Sopenharmony_ci unsigned int ins[8]; 6162306a36Sopenharmony_ci}; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci/* A V9 Sparc stack frame */ 6462306a36Sopenharmony_cistruct sparc_stackf { 6562306a36Sopenharmony_ci unsigned long locals[8]; 6662306a36Sopenharmony_ci unsigned long ins[6]; 6762306a36Sopenharmony_ci struct sparc_stackf *fp; 6862306a36Sopenharmony_ci unsigned long callers_pc; 6962306a36Sopenharmony_ci char *structptr; 7062306a36Sopenharmony_ci unsigned long xargs[6]; 7162306a36Sopenharmony_ci unsigned long xxargs[1]; 7262306a36Sopenharmony_ci}; 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci/* A 32-bit Sparc stack frame */ 7562306a36Sopenharmony_cistruct sparc_stackf32 { 7662306a36Sopenharmony_ci unsigned int locals[8]; 7762306a36Sopenharmony_ci unsigned int ins[6]; 7862306a36Sopenharmony_ci unsigned int fp; 7962306a36Sopenharmony_ci unsigned int callers_pc; 8062306a36Sopenharmony_ci unsigned int structptr; 8162306a36Sopenharmony_ci unsigned int xargs[6]; 8262306a36Sopenharmony_ci unsigned int xxargs[1]; 8362306a36Sopenharmony_ci}; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_cistruct sparc_trapf { 8662306a36Sopenharmony_ci unsigned long locals[8]; 8762306a36Sopenharmony_ci unsigned long ins[8]; 8862306a36Sopenharmony_ci unsigned long _unused; 8962306a36Sopenharmony_ci struct pt_regs *regs; 9062306a36Sopenharmony_ci}; 9162306a36Sopenharmony_ci#endif /* (!__ASSEMBLY__) */ 9262306a36Sopenharmony_ci#else 9362306a36Sopenharmony_ci/* 32 bit sparc */ 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci#include <asm/psr.h> 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci/* This struct defines the way the registers are stored on the 9862306a36Sopenharmony_ci * stack during a system call and basically all traps. 9962306a36Sopenharmony_ci */ 10062306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci#include <linux/types.h> 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_cistruct pt_regs { 10562306a36Sopenharmony_ci unsigned long psr; 10662306a36Sopenharmony_ci unsigned long pc; 10762306a36Sopenharmony_ci unsigned long npc; 10862306a36Sopenharmony_ci unsigned long y; 10962306a36Sopenharmony_ci unsigned long u_regs[16]; /* globals and ins */ 11062306a36Sopenharmony_ci}; 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci/* A 32-bit register window. */ 11362306a36Sopenharmony_cistruct reg_window32 { 11462306a36Sopenharmony_ci unsigned long locals[8]; 11562306a36Sopenharmony_ci unsigned long ins[8]; 11662306a36Sopenharmony_ci}; 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci/* A Sparc stack frame */ 11962306a36Sopenharmony_cistruct sparc_stackf { 12062306a36Sopenharmony_ci unsigned long locals[8]; 12162306a36Sopenharmony_ci unsigned long ins[6]; 12262306a36Sopenharmony_ci struct sparc_stackf *fp; 12362306a36Sopenharmony_ci unsigned long callers_pc; 12462306a36Sopenharmony_ci char *structptr; 12562306a36Sopenharmony_ci unsigned long xargs[6]; 12662306a36Sopenharmony_ci unsigned long xxargs[1]; 12762306a36Sopenharmony_ci}; 12862306a36Sopenharmony_ci#endif /* (!__ASSEMBLY__) */ 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci#endif /* (defined(__sparc__) && defined(__arch64__))*/ 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_ci#define TRACEREG_SZ sizeof(struct pt_regs) 13562306a36Sopenharmony_ci#define STACKFRAME_SZ sizeof(struct sparc_stackf) 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ci#define TRACEREG32_SZ sizeof(struct pt_regs32) 13862306a36Sopenharmony_ci#define STACKFRAME32_SZ sizeof(struct sparc_stackf32) 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci#endif /* (!__ASSEMBLY__) */ 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci#define UREG_G0 0 14362306a36Sopenharmony_ci#define UREG_G1 1 14462306a36Sopenharmony_ci#define UREG_G2 2 14562306a36Sopenharmony_ci#define UREG_G3 3 14662306a36Sopenharmony_ci#define UREG_G4 4 14762306a36Sopenharmony_ci#define UREG_G5 5 14862306a36Sopenharmony_ci#define UREG_G6 6 14962306a36Sopenharmony_ci#define UREG_G7 7 15062306a36Sopenharmony_ci#define UREG_I0 8 15162306a36Sopenharmony_ci#define UREG_I1 9 15262306a36Sopenharmony_ci#define UREG_I2 10 15362306a36Sopenharmony_ci#define UREG_I3 11 15462306a36Sopenharmony_ci#define UREG_I4 12 15562306a36Sopenharmony_ci#define UREG_I5 13 15662306a36Sopenharmony_ci#define UREG_I6 14 15762306a36Sopenharmony_ci#define UREG_I7 15 15862306a36Sopenharmony_ci#define UREG_FP UREG_I6 15962306a36Sopenharmony_ci#define UREG_RETPC UREG_I7 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci#if defined(__sparc__) && defined(__arch64__) 16262306a36Sopenharmony_ci/* 64 bit sparc */ 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci 16762306a36Sopenharmony_ci#else /* __ASSEMBLY__ */ 16862306a36Sopenharmony_ci/* For assembly code. */ 16962306a36Sopenharmony_ci#define TRACEREG_SZ 0xa0 17062306a36Sopenharmony_ci#define STACKFRAME_SZ 0xc0 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci#define TRACEREG32_SZ 0x50 17362306a36Sopenharmony_ci#define STACKFRAME32_SZ 0x60 17462306a36Sopenharmony_ci#endif /* __ASSEMBLY__ */ 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci#else /* (defined(__sparc__) && defined(__arch64__)) */ 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci/* 32 bit sparc */ 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci#else /* (!__ASSEMBLY__) */ 18462306a36Sopenharmony_ci/* For assembly code. */ 18562306a36Sopenharmony_ci#define TRACEREG_SZ 0x50 18662306a36Sopenharmony_ci#define STACKFRAME_SZ 0x60 18762306a36Sopenharmony_ci#endif /* (!__ASSEMBLY__) */ 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci#endif /* (defined(__sparc__) && defined(__arch64__)) */ 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci/* These are for pt_regs. */ 19362306a36Sopenharmony_ci#define PT_V9_G0 0x00 19462306a36Sopenharmony_ci#define PT_V9_G1 0x08 19562306a36Sopenharmony_ci#define PT_V9_G2 0x10 19662306a36Sopenharmony_ci#define PT_V9_G3 0x18 19762306a36Sopenharmony_ci#define PT_V9_G4 0x20 19862306a36Sopenharmony_ci#define PT_V9_G5 0x28 19962306a36Sopenharmony_ci#define PT_V9_G6 0x30 20062306a36Sopenharmony_ci#define PT_V9_G7 0x38 20162306a36Sopenharmony_ci#define PT_V9_I0 0x40 20262306a36Sopenharmony_ci#define PT_V9_I1 0x48 20362306a36Sopenharmony_ci#define PT_V9_I2 0x50 20462306a36Sopenharmony_ci#define PT_V9_I3 0x58 20562306a36Sopenharmony_ci#define PT_V9_I4 0x60 20662306a36Sopenharmony_ci#define PT_V9_I5 0x68 20762306a36Sopenharmony_ci#define PT_V9_I6 0x70 20862306a36Sopenharmony_ci#define PT_V9_FP PT_V9_I6 20962306a36Sopenharmony_ci#define PT_V9_I7 0x78 21062306a36Sopenharmony_ci#define PT_V9_TSTATE 0x80 21162306a36Sopenharmony_ci#define PT_V9_TPC 0x88 21262306a36Sopenharmony_ci#define PT_V9_TNPC 0x90 21362306a36Sopenharmony_ci#define PT_V9_Y 0x98 21462306a36Sopenharmony_ci#define PT_V9_MAGIC 0x9c 21562306a36Sopenharmony_ci#define PT_TSTATE PT_V9_TSTATE 21662306a36Sopenharmony_ci#define PT_TPC PT_V9_TPC 21762306a36Sopenharmony_ci#define PT_TNPC PT_V9_TNPC 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci/* These for pt_regs32. */ 22062306a36Sopenharmony_ci#define PT_PSR 0x0 22162306a36Sopenharmony_ci#define PT_PC 0x4 22262306a36Sopenharmony_ci#define PT_NPC 0x8 22362306a36Sopenharmony_ci#define PT_Y 0xc 22462306a36Sopenharmony_ci#define PT_G0 0x10 22562306a36Sopenharmony_ci#define PT_WIM PT_G0 22662306a36Sopenharmony_ci#define PT_G1 0x14 22762306a36Sopenharmony_ci#define PT_G2 0x18 22862306a36Sopenharmony_ci#define PT_G3 0x1c 22962306a36Sopenharmony_ci#define PT_G4 0x20 23062306a36Sopenharmony_ci#define PT_G5 0x24 23162306a36Sopenharmony_ci#define PT_G6 0x28 23262306a36Sopenharmony_ci#define PT_G7 0x2c 23362306a36Sopenharmony_ci#define PT_I0 0x30 23462306a36Sopenharmony_ci#define PT_I1 0x34 23562306a36Sopenharmony_ci#define PT_I2 0x38 23662306a36Sopenharmony_ci#define PT_I3 0x3c 23762306a36Sopenharmony_ci#define PT_I4 0x40 23862306a36Sopenharmony_ci#define PT_I5 0x44 23962306a36Sopenharmony_ci#define PT_I6 0x48 24062306a36Sopenharmony_ci#define PT_FP PT_I6 24162306a36Sopenharmony_ci#define PT_I7 0x4c 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_ci/* Reg_window offsets */ 24462306a36Sopenharmony_ci#define RW_V9_L0 0x00 24562306a36Sopenharmony_ci#define RW_V9_L1 0x08 24662306a36Sopenharmony_ci#define RW_V9_L2 0x10 24762306a36Sopenharmony_ci#define RW_V9_L3 0x18 24862306a36Sopenharmony_ci#define RW_V9_L4 0x20 24962306a36Sopenharmony_ci#define RW_V9_L5 0x28 25062306a36Sopenharmony_ci#define RW_V9_L6 0x30 25162306a36Sopenharmony_ci#define RW_V9_L7 0x38 25262306a36Sopenharmony_ci#define RW_V9_I0 0x40 25362306a36Sopenharmony_ci#define RW_V9_I1 0x48 25462306a36Sopenharmony_ci#define RW_V9_I2 0x50 25562306a36Sopenharmony_ci#define RW_V9_I3 0x58 25662306a36Sopenharmony_ci#define RW_V9_I4 0x60 25762306a36Sopenharmony_ci#define RW_V9_I5 0x68 25862306a36Sopenharmony_ci#define RW_V9_I6 0x70 25962306a36Sopenharmony_ci#define RW_V9_I7 0x78 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci#define RW_L0 0x00 26262306a36Sopenharmony_ci#define RW_L1 0x04 26362306a36Sopenharmony_ci#define RW_L2 0x08 26462306a36Sopenharmony_ci#define RW_L3 0x0c 26562306a36Sopenharmony_ci#define RW_L4 0x10 26662306a36Sopenharmony_ci#define RW_L5 0x14 26762306a36Sopenharmony_ci#define RW_L6 0x18 26862306a36Sopenharmony_ci#define RW_L7 0x1c 26962306a36Sopenharmony_ci#define RW_I0 0x20 27062306a36Sopenharmony_ci#define RW_I1 0x24 27162306a36Sopenharmony_ci#define RW_I2 0x28 27262306a36Sopenharmony_ci#define RW_I3 0x2c 27362306a36Sopenharmony_ci#define RW_I4 0x30 27462306a36Sopenharmony_ci#define RW_I5 0x34 27562306a36Sopenharmony_ci#define RW_I6 0x38 27662306a36Sopenharmony_ci#define RW_I7 0x3c 27762306a36Sopenharmony_ci 27862306a36Sopenharmony_ci/* Stack_frame offsets */ 27962306a36Sopenharmony_ci#define SF_V9_L0 0x00 28062306a36Sopenharmony_ci#define SF_V9_L1 0x08 28162306a36Sopenharmony_ci#define SF_V9_L2 0x10 28262306a36Sopenharmony_ci#define SF_V9_L3 0x18 28362306a36Sopenharmony_ci#define SF_V9_L4 0x20 28462306a36Sopenharmony_ci#define SF_V9_L5 0x28 28562306a36Sopenharmony_ci#define SF_V9_L6 0x30 28662306a36Sopenharmony_ci#define SF_V9_L7 0x38 28762306a36Sopenharmony_ci#define SF_V9_I0 0x40 28862306a36Sopenharmony_ci#define SF_V9_I1 0x48 28962306a36Sopenharmony_ci#define SF_V9_I2 0x50 29062306a36Sopenharmony_ci#define SF_V9_I3 0x58 29162306a36Sopenharmony_ci#define SF_V9_I4 0x60 29262306a36Sopenharmony_ci#define SF_V9_I5 0x68 29362306a36Sopenharmony_ci#define SF_V9_FP 0x70 29462306a36Sopenharmony_ci#define SF_V9_PC 0x78 29562306a36Sopenharmony_ci#define SF_V9_RETP 0x80 29662306a36Sopenharmony_ci#define SF_V9_XARG0 0x88 29762306a36Sopenharmony_ci#define SF_V9_XARG1 0x90 29862306a36Sopenharmony_ci#define SF_V9_XARG2 0x98 29962306a36Sopenharmony_ci#define SF_V9_XARG3 0xa0 30062306a36Sopenharmony_ci#define SF_V9_XARG4 0xa8 30162306a36Sopenharmony_ci#define SF_V9_XARG5 0xb0 30262306a36Sopenharmony_ci#define SF_V9_XXARG 0xb8 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci#define SF_L0 0x00 30562306a36Sopenharmony_ci#define SF_L1 0x04 30662306a36Sopenharmony_ci#define SF_L2 0x08 30762306a36Sopenharmony_ci#define SF_L3 0x0c 30862306a36Sopenharmony_ci#define SF_L4 0x10 30962306a36Sopenharmony_ci#define SF_L5 0x14 31062306a36Sopenharmony_ci#define SF_L6 0x18 31162306a36Sopenharmony_ci#define SF_L7 0x1c 31262306a36Sopenharmony_ci#define SF_I0 0x20 31362306a36Sopenharmony_ci#define SF_I1 0x24 31462306a36Sopenharmony_ci#define SF_I2 0x28 31562306a36Sopenharmony_ci#define SF_I3 0x2c 31662306a36Sopenharmony_ci#define SF_I4 0x30 31762306a36Sopenharmony_ci#define SF_I5 0x34 31862306a36Sopenharmony_ci#define SF_FP 0x38 31962306a36Sopenharmony_ci#define SF_PC 0x3c 32062306a36Sopenharmony_ci#define SF_RETP 0x40 32162306a36Sopenharmony_ci#define SF_XARG0 0x44 32262306a36Sopenharmony_ci#define SF_XARG1 0x48 32362306a36Sopenharmony_ci#define SF_XARG2 0x4c 32462306a36Sopenharmony_ci#define SF_XARG3 0x50 32562306a36Sopenharmony_ci#define SF_XARG4 0x54 32662306a36Sopenharmony_ci#define SF_XARG5 0x58 32762306a36Sopenharmony_ci#define SF_XXARG 0x5c 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ci/* Stuff for the ptrace system call */ 33162306a36Sopenharmony_ci#define PTRACE_SPARC_DETACH 11 33262306a36Sopenharmony_ci#define PTRACE_GETREGS 12 33362306a36Sopenharmony_ci#define PTRACE_SETREGS 13 33462306a36Sopenharmony_ci#define PTRACE_GETFPREGS 14 33562306a36Sopenharmony_ci#define PTRACE_SETFPREGS 15 33662306a36Sopenharmony_ci#define PTRACE_READDATA 16 33762306a36Sopenharmony_ci#define PTRACE_WRITEDATA 17 33862306a36Sopenharmony_ci#define PTRACE_READTEXT 18 33962306a36Sopenharmony_ci#define PTRACE_WRITETEXT 19 34062306a36Sopenharmony_ci#define PTRACE_GETFPAREGS 20 34162306a36Sopenharmony_ci#define PTRACE_SETFPAREGS 21 34262306a36Sopenharmony_ci 34362306a36Sopenharmony_ci/* There are for debugging 64-bit processes, either from a 32 or 64 bit 34462306a36Sopenharmony_ci * parent. Thus their complements are for debugging 32-bit processes only. 34562306a36Sopenharmony_ci */ 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci#define PTRACE_GETREGS64 22 34862306a36Sopenharmony_ci#define PTRACE_SETREGS64 23 34962306a36Sopenharmony_ci/* PTRACE_SYSCALL is 24 */ 35062306a36Sopenharmony_ci#define PTRACE_GETFPREGS64 25 35162306a36Sopenharmony_ci#define PTRACE_SETFPREGS64 26 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ci#endif /* _UAPI__SPARC_PTRACE_H */ 354