xref: /OK3568_Linux_fs/kernel/arch/parisc/include/uapi/asm/ptrace.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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