1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4882a593Smuzhiyun /* written by Philipp Rumpf, Copyright (C) 1999 SuSE GmbH Nuernberg 3*4882a593Smuzhiyun ** Copyright (C) 2000 Grant Grundler, Hewlett-Packard 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun #ifndef _UAPI_PARISC_PTRACE_H 6*4882a593Smuzhiyun #define _UAPI_PARISC_PTRACE_H 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/types.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* This struct defines the way the registers are stored on the 12*4882a593Smuzhiyun * stack during a system call. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * N.B. gdb/strace care about the size and offsets within this 15*4882a593Smuzhiyun * structure. If you change things, you may break object compatibility 16*4882a593Smuzhiyun * for those applications. 17*4882a593Smuzhiyun * 18*4882a593Smuzhiyun * Please do NOT use this structure for future programs, but use 19*4882a593Smuzhiyun * user_regs_struct (see below) instead. 20*4882a593Smuzhiyun * 21*4882a593Smuzhiyun * It can be accessed through PTRACE_PEEKUSR/PTRACE_POKEUSR only. 22*4882a593Smuzhiyun */ 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun struct pt_regs { 25*4882a593Smuzhiyun unsigned long gr[32]; /* PSW is in gr[0] */ 26*4882a593Smuzhiyun __u64 fr[32]; 27*4882a593Smuzhiyun unsigned long sr[ 8]; 28*4882a593Smuzhiyun unsigned long iasq[2]; 29*4882a593Smuzhiyun unsigned long iaoq[2]; 30*4882a593Smuzhiyun unsigned long cr27; 31*4882a593Smuzhiyun unsigned long pad0; /* available for other uses */ 32*4882a593Smuzhiyun unsigned long orig_r28; 33*4882a593Smuzhiyun unsigned long ksp; 34*4882a593Smuzhiyun unsigned long kpc; 35*4882a593Smuzhiyun unsigned long sar; /* CR11 */ 36*4882a593Smuzhiyun unsigned long iir; /* CR19 */ 37*4882a593Smuzhiyun unsigned long isr; /* CR20 */ 38*4882a593Smuzhiyun unsigned long ior; /* CR21 */ 39*4882a593Smuzhiyun unsigned long ipsw; /* CR22 */ 40*4882a593Smuzhiyun }; 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun /** 43*4882a593Smuzhiyun * struct user_regs_struct - User general purpose registers 44*4882a593Smuzhiyun * 45*4882a593Smuzhiyun * This is the user-visible general purpose register state structure 46*4882a593Smuzhiyun * which is used to define the elf_gregset_t. 47*4882a593Smuzhiyun * 48*4882a593Smuzhiyun * It can be accessed through PTRACE_GETREGSET with NT_PRSTATUS 49*4882a593Smuzhiyun * and through PTRACE_GETREGS. 50*4882a593Smuzhiyun */ 51*4882a593Smuzhiyun struct user_regs_struct { 52*4882a593Smuzhiyun unsigned long gr[32]; /* PSW is in gr[0] */ 53*4882a593Smuzhiyun unsigned long sr[8]; 54*4882a593Smuzhiyun unsigned long iaoq[2]; 55*4882a593Smuzhiyun unsigned long iasq[2]; 56*4882a593Smuzhiyun unsigned long sar; /* CR11 */ 57*4882a593Smuzhiyun unsigned long iir; /* CR19 */ 58*4882a593Smuzhiyun unsigned long isr; /* CR20 */ 59*4882a593Smuzhiyun unsigned long ior; /* CR21 */ 60*4882a593Smuzhiyun unsigned long ipsw; /* CR22 */ 61*4882a593Smuzhiyun unsigned long cr0; 62*4882a593Smuzhiyun unsigned long cr24, cr25, cr26, cr27, cr28, cr29, cr30, cr31; 63*4882a593Smuzhiyun unsigned long cr8, cr9, cr12, cr13, cr10, cr15; 64*4882a593Smuzhiyun unsigned long _pad[80-64]; /* pad to ELF_NGREG (80) */ 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /** 68*4882a593Smuzhiyun * struct user_fp_struct - User floating point registers 69*4882a593Smuzhiyun * 70*4882a593Smuzhiyun * This is the user-visible floating point register state structure. 71*4882a593Smuzhiyun * It uses the same layout and size as elf_fpregset_t. 72*4882a593Smuzhiyun * 73*4882a593Smuzhiyun * It can be accessed through PTRACE_GETREGSET with NT_PRFPREG 74*4882a593Smuzhiyun * and through PTRACE_GETFPREGS. 75*4882a593Smuzhiyun */ 76*4882a593Smuzhiyun struct user_fp_struct { 77*4882a593Smuzhiyun __u64 fr[32]; 78*4882a593Smuzhiyun }; 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun /* 82*4882a593Smuzhiyun * The numbers chosen here are somewhat arbitrary but absolutely MUST 83*4882a593Smuzhiyun * not overlap with any of the number assigned in <linux/ptrace.h>. 84*4882a593Smuzhiyun * 85*4882a593Smuzhiyun * These ones are taken from IA-64 on the assumption that theirs are 86*4882a593Smuzhiyun * the most correct (and we also want to support PTRACE_SINGLEBLOCK 87*4882a593Smuzhiyun * since we have taken branch traps too) 88*4882a593Smuzhiyun */ 89*4882a593Smuzhiyun #define PTRACE_SINGLEBLOCK 12 /* resume execution until next branch */ 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun #define PTRACE_GETREGS 18 92*4882a593Smuzhiyun #define PTRACE_SETREGS 19 93*4882a593Smuzhiyun #define PTRACE_GETFPREGS 14 94*4882a593Smuzhiyun #define PTRACE_SETFPREGS 15 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #endif /* _UAPI_PARISC_PTRACE_H */ 97