1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef _UAPI__ASM_PTRACE_H
21#define _UAPI__ASM_PTRACE_H
22
23#include <linux/types.h>
24
25#include <asm/hwcap.h>
26#include <asm/sve_context.h>
27
28
29
30
31
32#define PSR_MODE_EL0t 0x00000000
33#define PSR_MODE_EL1t 0x00000004
34#define PSR_MODE_EL1h 0x00000005
35#define PSR_MODE_EL2t 0x00000008
36#define PSR_MODE_EL2h 0x00000009
37#define PSR_MODE_EL3t 0x0000000c
38#define PSR_MODE_EL3h 0x0000000d
39#define PSR_MODE_MASK 0x0000000f
40
41
42#define PSR_MODE32_BIT 0x00000010
43
44
45#define PSR_F_BIT 0x00000040
46#define PSR_I_BIT 0x00000080
47#define PSR_A_BIT 0x00000100
48#define PSR_D_BIT 0x00000200
49#define PSR_BTYPE_MASK 0x00000c00
50#define PSR_SSBS_BIT 0x00001000
51#define PSR_PAN_BIT 0x00400000
52#define PSR_UAO_BIT 0x00800000
53#define PSR_DIT_BIT 0x01000000
54#define PSR_TCO_BIT 0x02000000
55#define PSR_V_BIT 0x10000000
56#define PSR_C_BIT 0x20000000
57#define PSR_Z_BIT 0x40000000
58#define PSR_N_BIT 0x80000000
59
60#define PSR_BTYPE_SHIFT 10
61
62
63
64
65#define PSR_f 0xff000000
66#define PSR_s 0x00ff0000
67#define PSR_x 0x0000ff00
68#define PSR_c 0x000000ff
69
70
71#define PSR_BTYPE_NONE (0b00 << PSR_BTYPE_SHIFT)
72#define PSR_BTYPE_JC (0b01 << PSR_BTYPE_SHIFT)
73#define PSR_BTYPE_C (0b10 << PSR_BTYPE_SHIFT)
74#define PSR_BTYPE_J (0b11 << PSR_BTYPE_SHIFT)
75
76
77#define PTRACE_SYSEMU 31
78#define PTRACE_SYSEMU_SINGLESTEP 32
79
80#define PTRACE_PEEKMTETAGS 33
81#define PTRACE_POKEMTETAGS 34
82
83#ifndef __ASSEMBLY__
84
85
86
87
88struct user_pt_regs {
89 __u64 regs[31];
90 __u64 sp;
91 __u64 pc;
92 __u64 pstate;
93};
94
95struct user_fpsimd_state {
96 __uint128_t vregs[32];
97 __u32 fpsr;
98 __u32 fpcr;
99 __u32 __reserved[2];
100};
101
102struct user_hwdebug_state {
103 __u32 dbg_info;
104 __u32 pad;
105 struct {
106 __u64 addr;
107 __u32 ctrl;
108 __u32 pad;
109 } dbg_regs[16];
110};
111
112
113
114struct user_sve_header {
115 __u32 size;
116 __u32 max_size;
117 __u16 vl;
118 __u16 max_vl;
119 __u16 flags;
120 __u16 __reserved;
121};
122
123
124#define SVE_PT_REGS_MASK (1 << 0)
125
126#define SVE_PT_REGS_FPSIMD 0
127#define SVE_PT_REGS_SVE SVE_PT_REGS_MASK
128
129
130
131
132
133#define SVE_PT_VL_INHERIT ((1 << 17) >> 16)
134#define SVE_PT_VL_ONEXEC ((1 << 18) >> 16)
135
136
137
138
139
140
141
142
143
144
145
146
147
148#define SVE_PT_REGS_OFFSET \
149 ((sizeof(struct user_sve_header) + (__SVE_VQ_BYTES - 1)) \
150 / __SVE_VQ_BYTES * __SVE_VQ_BYTES)
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167#define SVE_PT_FPSIMD_OFFSET SVE_PT_REGS_OFFSET
168
169#define SVE_PT_FPSIMD_SIZE(vq, flags) (sizeof(struct user_fpsimd_state))
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200#define SVE_PT_SVE_ZREG_SIZE(vq) __SVE_ZREG_SIZE(vq)
201#define SVE_PT_SVE_PREG_SIZE(vq) __SVE_PREG_SIZE(vq)
202#define SVE_PT_SVE_FFR_SIZE(vq) __SVE_FFR_SIZE(vq)
203#define SVE_PT_SVE_FPSR_SIZE sizeof(__u32)
204#define SVE_PT_SVE_FPCR_SIZE sizeof(__u32)
205
206#define SVE_PT_SVE_OFFSET SVE_PT_REGS_OFFSET
207
208#define SVE_PT_SVE_ZREGS_OFFSET \
209 (SVE_PT_REGS_OFFSET + __SVE_ZREGS_OFFSET)
210#define SVE_PT_SVE_ZREG_OFFSET(vq, n) \
211 (SVE_PT_REGS_OFFSET + __SVE_ZREG_OFFSET(vq, n))
212#define SVE_PT_SVE_ZREGS_SIZE(vq) \
213 (SVE_PT_SVE_ZREG_OFFSET(vq, __SVE_NUM_ZREGS) - SVE_PT_SVE_ZREGS_OFFSET)
214
215#define SVE_PT_SVE_PREGS_OFFSET(vq) \
216 (SVE_PT_REGS_OFFSET + __SVE_PREGS_OFFSET(vq))
217#define SVE_PT_SVE_PREG_OFFSET(vq, n) \
218 (SVE_PT_REGS_OFFSET + __SVE_PREG_OFFSET(vq, n))
219#define SVE_PT_SVE_PREGS_SIZE(vq) \
220 (SVE_PT_SVE_PREG_OFFSET(vq, __SVE_NUM_PREGS) - \
221 SVE_PT_SVE_PREGS_OFFSET(vq))
222
223#define SVE_PT_SVE_FFR_OFFSET(vq) \
224 (SVE_PT_REGS_OFFSET + __SVE_FFR_OFFSET(vq))
225
226#define SVE_PT_SVE_FPSR_OFFSET(vq) \
227 ((SVE_PT_SVE_FFR_OFFSET(vq) + SVE_PT_SVE_FFR_SIZE(vq) + \
228 (__SVE_VQ_BYTES - 1)) \
229 / __SVE_VQ_BYTES * __SVE_VQ_BYTES)
230#define SVE_PT_SVE_FPCR_OFFSET(vq) \
231 (SVE_PT_SVE_FPSR_OFFSET(vq) + SVE_PT_SVE_FPSR_SIZE)
232
233
234
235
236
237
238#define SVE_PT_SVE_SIZE(vq, flags) \
239 ((SVE_PT_SVE_FPCR_OFFSET(vq) + SVE_PT_SVE_FPCR_SIZE \
240 - SVE_PT_SVE_OFFSET + (__SVE_VQ_BYTES - 1)) \
241 / __SVE_VQ_BYTES * __SVE_VQ_BYTES)
242
243#define SVE_PT_SIZE(vq, flags) \
244 (((flags) & SVE_PT_REGS_MASK) == SVE_PT_REGS_SVE ? \
245 SVE_PT_SVE_OFFSET + SVE_PT_SVE_SIZE(vq, flags) \
246 : SVE_PT_FPSIMD_OFFSET + SVE_PT_FPSIMD_SIZE(vq, flags))
247
248
249
250struct user_pac_mask {
251 __u64 data_mask;
252 __u64 insn_mask;
253};
254
255
256
257struct user_pac_address_keys {
258 __uint128_t apiakey;
259 __uint128_t apibkey;
260 __uint128_t apdakey;
261 __uint128_t apdbkey;
262};
263
264struct user_pac_generic_keys {
265 __uint128_t apgakey;
266};
267
268#endif
269
270#endif
271