xref: /openbmc/linux/arch/sparc/include/uapi/asm/ptrace.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2  #ifndef _UAPI__SPARC_PTRACE_H
3  #define _UAPI__SPARC_PTRACE_H
4  
5  #if defined(__sparc__) && defined(__arch64__)
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.
15   */
16  #define PT_REGS_MAGIC 0x57ac6c00
17  
18  #ifndef __ASSEMBLY__
19  
20  #include <linux/types.h>
21  
22  struct pt_regs {
23  	unsigned long u_regs[16]; /* globals and ins */
24  	unsigned long tstate;
25  	unsigned long tpc;
26  	unsigned long tnpc;
27  	unsigned int y;
28  
29  	/* We encode a magic number, PT_REGS_MAGIC, along
30  	 * with the %tt (trap type) register value at trap
31  	 * entry time.  The magic number allows us to identify
32  	 * accurately a trap stack frame in the stack
33  	 * unwinder, and the %tt value allows us to test
34  	 * things like "in a system call" etc. for an arbitray
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  };
42  
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  };
50  
51  /* A V9 register window */
52  struct reg_window {
53  	unsigned long locals[8];
54  	unsigned long ins[8];
55  };
56  
57  /* A 32-bit register window. */
58  struct reg_window32 {
59  	unsigned int locals[8];
60  	unsigned int ins[8];
61  };
62  
63  /* A V9 Sparc stack frame */
64  struct sparc_stackf {
65  	unsigned long locals[8];
66          unsigned long ins[6];
67  	struct sparc_stackf *fp;
68  	unsigned long callers_pc;
69  	char *structptr;
70  	unsigned long xargs[6];
71  	unsigned long xxargs[1];
72  };
73  
74  /* A 32-bit Sparc stack frame */
75  struct sparc_stackf32 {
76  	unsigned int locals[8];
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];
83  };
84  
85  struct sparc_trapf {
86  	unsigned long locals[8];
87  	unsigned long ins[8];
88  	unsigned long _unused;
89  	struct pt_regs *regs;
90  };
91  #endif /* (!__ASSEMBLY__) */
92  #else
93  /* 32 bit sparc */
94  
95  #include <asm/psr.h>
96  
97  /* This struct defines the way the registers are stored on the
98   * stack during a system call and basically all traps.
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 */
110  };
111  
112  /* A 32-bit register window. */
113  struct reg_window32 {
114  	unsigned long locals[8];
115  	unsigned long ins[8];
116  };
117  
118  /* A Sparc stack frame */
119  struct sparc_stackf {
120  	unsigned long locals[8];
121          unsigned long ins[6];
122  	struct sparc_stackf *fp;
123  	unsigned long callers_pc;
124  	char *structptr;
125  	unsigned long xargs[6];
126  	unsigned long xxargs[1];
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   */
346  
347  #define PTRACE_GETREGS64	  22
348  #define PTRACE_SETREGS64	  23
349  /* PTRACE_SYSCALL is 24 */
350  #define PTRACE_GETFPREGS64	  25
351  #define PTRACE_SETFPREGS64	  26
352  
353  #endif /* _UAPI__SPARC_PTRACE_H */
354