1f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifndef __SPARC_PTRACE_H 2f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define __SPARC_PTRACE_H 3f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 4f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#if defined(__sparc__) && defined(__arch64__) 5f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* 64 bit sparc */ 6f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#include <asm/pstate.h> 7f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 8f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* This struct defines the way the registers are stored on the 9f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * stack during a system call and basically all traps. 10f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg */ 11f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 12f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* This magic value must have the low 9 bits clear, 13f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * as that is where we encode the %tt value, see below. 14f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg */ 15f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_REGS_MAGIC 0x57ac6c00 16f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 17f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifndef __ASSEMBLY__ 18f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 19f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#include <linux/types.h> 20f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 21f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct pt_regs { 22f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long u_regs[16]; /* globals and ins */ 23f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long tstate; 24f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long tpc; 25f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long tnpc; 26f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int y; 27f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 28f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg /* We encode a magic number, PT_REGS_MAGIC, along 29f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * with the %tt (trap type) register value at trap 30f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * entry time. The magic number allows us to identify 31f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * accurately a trap stack frame in the stack 32f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * unwinder, and the %tt value allows us to test 33f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * things like "in a system call" etc. for an arbitray 34f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * process. 35f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * 3625985edcedea6396277003854657b5f3cb31a628Lucas De Marchi * The PT_REGS_MAGIC is chosen such that it can be 37f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * loaded completely using just a sethi instruction. 38f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg */ 39f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int magic; 40f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 41f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 42f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct pt_regs32 { 43f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int psr; 44f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int pc; 45f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int npc; 46f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int y; 47f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int u_regs[16]; /* globals and ins */ 48f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 49f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 50f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* A V9 register window */ 51f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct reg_window { 52f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long locals[8]; 53f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long ins[8]; 54f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 55f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 56f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* A 32-bit register window. */ 57f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct reg_window32 { 58f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int locals[8]; 59f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int ins[8]; 60f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 61f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 62f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* A V9 Sparc stack frame */ 63f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct sparc_stackf { 64f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long locals[8]; 65f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long ins[6]; 66f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg struct sparc_stackf *fp; 67f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long callers_pc; 68f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg char *structptr; 69f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long xargs[6]; 70f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long xxargs[1]; 71f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 72f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 73f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* A 32-bit Sparc stack frame */ 74f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct sparc_stackf32 { 75f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int locals[8]; 76f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int ins[6]; 77f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int fp; 78f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int callers_pc; 79f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int structptr; 80f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int xargs[6]; 81f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned int xxargs[1]; 82f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 83f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 84f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct sparc_trapf { 85f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long locals[8]; 86f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long ins[8]; 87f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long _unused; 88f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg struct pt_regs *regs; 89f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 90f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* (!__ASSEMBLY__) */ 91f5e706ad886b6a5eb59637830110b09ccebf01c5Sam Ravnborg#else 92f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* 32 bit sparc */ 93f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 94f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#include <asm/psr.h> 95f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 96f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* This struct defines the way the registers are stored on the 97f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * stack during a system call and basically all traps. 98f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg */ 99f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifndef __ASSEMBLY__ 100f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 101d550bbd40c0e10aefa05103dadbe0ae42e683707David Howells#include <linux/types.h> 102d550bbd40c0e10aefa05103dadbe0ae42e683707David Howells 103f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct pt_regs { 104f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long psr; 105f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long pc; 106f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long npc; 107f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long y; 108f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long u_regs[16]; /* globals and ins */ 109f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 110f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 111f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* A 32-bit register window. */ 112f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct reg_window32 { 113f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long locals[8]; 114f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long ins[8]; 115f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 116f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 117f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* A Sparc stack frame */ 118f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct sparc_stackf { 119f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long locals[8]; 120f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long ins[6]; 121f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg struct sparc_stackf *fp; 122f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long callers_pc; 123f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg char *structptr; 124f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long xargs[6]; 125f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long xxargs[1]; 126f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 127f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* (!__ASSEMBLY__) */ 128f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 129f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* (defined(__sparc__) && defined(__arch64__))*/ 130f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 131f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifndef __ASSEMBLY__ 132f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 133f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define TRACEREG_SZ sizeof(struct pt_regs) 134f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define STACKFRAME_SZ sizeof(struct sparc_stackf) 135f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 136f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define TRACEREG32_SZ sizeof(struct pt_regs32) 137f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define STACKFRAME32_SZ sizeof(struct sparc_stackf32) 138f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 139f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* (!__ASSEMBLY__) */ 140f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 141f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_G0 0 142f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_G1 1 143f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_G2 2 144f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_G3 3 145f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_G4 4 146f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_G5 5 147f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_G6 6 148f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_G7 7 149f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_I0 8 150f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_I1 9 151f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_I2 10 152f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_I3 11 153f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_I4 12 154f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_I5 13 155f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_I6 14 156f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_I7 15 157f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_FP UREG_I6 158f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define UREG_RETPC UREG_I7 159f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 160f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#if defined(__sparc__) && defined(__arch64__) 161f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* 64 bit sparc */ 162f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 163f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifndef __ASSEMBLY__ 164f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 165f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifdef __KERNEL__ 166f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 167f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#include <linux/threads.h> 1687f55ba9c4ca9e365637e8ddee1884aea47cb20c6Stephen Rothwell#include <asm/switch_to.h> 169f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 170f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstatic inline int pt_regs_trap_type(struct pt_regs *regs) 171f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg{ 172f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg return regs->magic & 0x1ff; 173f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg} 174f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 175f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstatic inline bool pt_regs_is_syscall(struct pt_regs *regs) 176f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg{ 177f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg return (regs->tstate & TSTATE_SYSCALL); 178f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg} 179f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 180f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstatic inline bool pt_regs_clear_syscall(struct pt_regs *regs) 181f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg{ 182f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg return (regs->tstate &= ~TSTATE_SYSCALL); 183f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg} 184f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 185f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define arch_ptrace_stop_needed(exit_code, info) \ 186f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg({ flush_user_windows(); \ 187f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg get_thread_wsaved() != 0; \ 188f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}) 189f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 190f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define arch_ptrace_stop(exit_code, info) \ 191f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg synchronize_user_stack() 192f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 193f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstruct global_reg_snapshot { 194f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long tstate; 195f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long tpc; 196f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long tnpc; 197f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long o7; 198f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long i7; 199f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long rpc; 200f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg struct thread_info *thread; 201f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg unsigned long pad1; 202f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}; 203f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgextern struct global_reg_snapshot global_reg_snapshot[NR_CPUS]; 204f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 205f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define force_successful_syscall_return() \ 206f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgdo { current_thread_info()->syscall_noerror = 1; \ 207f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg} while (0) 208f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define user_mode(regs) (!((regs)->tstate & TSTATE_PRIV)) 209f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define instruction_pointer(regs) ((regs)->tpc) 21033d8881af5584fb7994f6b3d17fc11dcaf07b3b2Jason Wessel#define instruction_pointer_set(regs, val) ((regs)->tpc = (val)) 211f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define user_stack_pointer(regs) ((regs)->u_regs[UREG_FP]) 212d7e7528bcd456f5c36ad4a202ccfb43c5aa98bc4Eric Parisstatic inline int is_syscall_success(struct pt_regs *regs) 213d7e7528bcd456f5c36ad4a202ccfb43c5aa98bc4Eric Paris{ 214d7e7528bcd456f5c36ad4a202ccfb43c5aa98bc4Eric Paris return !(regs->tstate & (TSTATE_XCARRY | TSTATE_ICARRY)); 215d7e7528bcd456f5c36ad4a202ccfb43c5aa98bc4Eric Paris} 216d7e7528bcd456f5c36ad4a202ccfb43c5aa98bc4Eric Paris 217d7e7528bcd456f5c36ad4a202ccfb43c5aa98bc4Eric Parisstatic inline long regs_return_value(struct pt_regs *regs) 218d7e7528bcd456f5c36ad4a202ccfb43c5aa98bc4Eric Paris{ 219d7e7528bcd456f5c36ad4a202ccfb43c5aa98bc4Eric Paris return regs->u_regs[UREG_I0]; 220d7e7528bcd456f5c36ad4a202ccfb43c5aa98bc4Eric Paris} 221f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifdef CONFIG_SMP 222f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgextern unsigned long profile_pc(struct pt_regs *); 223f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#else 224f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define profile_pc(regs) instruction_pointer(regs) 2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 226f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* (__KERNEL__) */ 227f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 228f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#else /* __ASSEMBLY__ */ 229f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* For assembly code. */ 230f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define TRACEREG_SZ 0xa0 231f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define STACKFRAME_SZ 0xc0 232f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 233f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define TRACEREG32_SZ 0x50 234f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define STACKFRAME32_SZ 0x60 235f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* __ASSEMBLY__ */ 236f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 237f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#else /* (defined(__sparc__) && defined(__arch64__)) */ 238f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 239f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* 32 bit sparc */ 240f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 241f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifndef __ASSEMBLY__ 242f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 243f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifdef __KERNEL__ 244bde4d8b205bc3ccdf7f5a841bfbfa9896b44b1ceSam Ravnborg#include <asm/switch_to.h> 245f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 246f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstatic inline bool pt_regs_is_syscall(struct pt_regs *regs) 247f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg{ 248f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg return (regs->psr & PSR_SYSCALL); 249f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg} 250f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 251f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgstatic inline bool pt_regs_clear_syscall(struct pt_regs *regs) 252f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg{ 253f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg return (regs->psr &= ~PSR_SYSCALL); 254f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg} 255f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 256f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define arch_ptrace_stop_needed(exit_code, info) \ 257f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg({ flush_user_windows(); \ 258f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg current_thread_info()->w_saved != 0; \ 259f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg}) 260f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 261f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define arch_ptrace_stop(exit_code, info) \ 262f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg synchronize_user_stack() 263f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 264f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define user_mode(regs) (!((regs)->psr & PSR_PS)) 265f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define instruction_pointer(regs) ((regs)->pc) 266f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define user_stack_pointer(regs) ((regs)->u_regs[UREG_FP]) 267f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborgunsigned long profile_pc(struct pt_regs *); 268f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* (__KERNEL__) */ 269f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 270f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#else /* (!__ASSEMBLY__) */ 271f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* For assembly code. */ 272f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define TRACEREG_SZ 0x50 273f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define STACKFRAME_SZ 0x60 274f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* (!__ASSEMBLY__) */ 275f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 276f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* (defined(__sparc__) && defined(__arch64__)) */ 277f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 278f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifdef __KERNEL__ 279f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define STACK_BIAS 2047 2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 281f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 282f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* These are for pt_regs. */ 283f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_G0 0x00 284f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_G1 0x08 285f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_G2 0x10 286f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_G3 0x18 287f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_G4 0x20 288f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_G5 0x28 289f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_G6 0x30 290f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_G7 0x38 291f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_I0 0x40 292f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_I1 0x48 293f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_I2 0x50 294f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_I3 0x58 295f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_I4 0x60 296f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_I5 0x68 297f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_I6 0x70 298f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_FP PT_V9_I6 299f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_I7 0x78 300f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_TSTATE 0x80 301f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_TPC 0x88 302f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_TNPC 0x90 303f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_Y 0x98 304f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_V9_MAGIC 0x9c 305f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_TSTATE PT_V9_TSTATE 306f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_TPC PT_V9_TPC 307f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_TNPC PT_V9_TNPC 308f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 309f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* These for pt_regs32. */ 310f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_PSR 0x0 311f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_PC 0x4 312f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_NPC 0x8 313f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_Y 0xc 314f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_G0 0x10 315f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_WIM PT_G0 316f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_G1 0x14 317f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_G2 0x18 318f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_G3 0x1c 319f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_G4 0x20 320f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_G5 0x24 321f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_G6 0x28 322f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_G7 0x2c 323f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_I0 0x30 324f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_I1 0x34 325f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_I2 0x38 326f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_I3 0x3c 327f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_I4 0x40 328f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_I5 0x44 329f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_I6 0x48 330f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_FP PT_I6 331f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PT_I7 0x4c 332f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 333f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* Reg_window offsets */ 334f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_L0 0x00 335f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_L1 0x08 336f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_L2 0x10 337f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_L3 0x18 338f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_L4 0x20 339f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_L5 0x28 340f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_L6 0x30 341f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_L7 0x38 342f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_I0 0x40 343f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_I1 0x48 344f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_I2 0x50 345f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_I3 0x58 346f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_I4 0x60 347f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_I5 0x68 348f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_I6 0x70 349f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_V9_I7 0x78 350f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 351f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_L0 0x00 352f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_L1 0x04 353f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_L2 0x08 354f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_L3 0x0c 355f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_L4 0x10 356f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_L5 0x14 357f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_L6 0x18 358f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_L7 0x1c 359f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_I0 0x20 360f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_I1 0x24 361f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_I2 0x28 362f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_I3 0x2c 363f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_I4 0x30 364f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_I5 0x34 365f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_I6 0x38 366f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define RW_I7 0x3c 367f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 368f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* Stack_frame offsets */ 369f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_L0 0x00 370f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_L1 0x08 371f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_L2 0x10 372f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_L3 0x18 373f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_L4 0x20 374f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_L5 0x28 375f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_L6 0x30 376f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_L7 0x38 377f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_I0 0x40 378f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_I1 0x48 379f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_I2 0x50 380f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_I3 0x58 381f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_I4 0x60 382f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_I5 0x68 383f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_FP 0x70 384f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_PC 0x78 385f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_RETP 0x80 386f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_XARG0 0x88 387f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_XARG1 0x90 388f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_XARG2 0x98 389f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_XARG3 0xa0 390f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_XARG4 0xa8 391f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_XARG5 0xb0 392f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_V9_XXARG 0xb8 393f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 394f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_L0 0x00 395f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_L1 0x04 396f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_L2 0x08 397f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_L3 0x0c 398f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_L4 0x10 399f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_L5 0x14 400f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_L6 0x18 401f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_L7 0x1c 402f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_I0 0x20 403f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_I1 0x24 404f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_I2 0x28 405f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_I3 0x2c 406f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_I4 0x30 407f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_I5 0x34 408f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_FP 0x38 409f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_PC 0x3c 410f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_RETP 0x40 411f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_XARG0 0x44 412f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_XARG1 0x48 413f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_XARG2 0x4c 414f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_XARG3 0x50 415f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_XARG4 0x54 416f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_XARG5 0x58 417f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define SF_XXARG 0x5c 418f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 419f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#ifdef __KERNEL__ 420f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 421f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* global_reg_snapshot offsets */ 422f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define GR_SNAP_TSTATE 0x00 423f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define GR_SNAP_TPC 0x08 424f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define GR_SNAP_TNPC 0x10 425f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define GR_SNAP_O7 0x18 426f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define GR_SNAP_I7 0x20 427f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define GR_SNAP_RPC 0x28 428f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define GR_SNAP_THREAD 0x30 429f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define GR_SNAP_PAD1 0x38 430f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 431f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* __KERNEL__ */ 432f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 433f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* Stuff for the ptrace system call */ 434f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_SPARC_DETACH 11 435f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_GETREGS 12 436f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_SETREGS 13 437f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_GETFPREGS 14 438f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_SETFPREGS 15 439f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_READDATA 16 440f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_WRITEDATA 17 441f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_READTEXT 18 442f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_WRITETEXT 19 443f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_GETFPAREGS 20 444f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_SETFPAREGS 21 445f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 446f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* There are for debugging 64-bit processes, either from a 32 or 64 bit 447f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg * parent. Thus their complements are for debugging 32-bit processes only. 448f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg */ 449f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 450f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_GETREGS64 22 451f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_SETREGS64 23 452f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg/* PTRACE_SYSCALL is 24 */ 453f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_GETFPREGS64 25 454f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#define PTRACE_SETFPREGS64 26 455f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg 456f3ec38d5135ca4bff0132c0782da6da4663ae0e5Sam Ravnborg#endif /* !(__SPARC_PTRACE_H) */ 457