Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/sparc/include/uapi/asm/ptrace.h
26495 views
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
355