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_SSBS_BIT 0x00001000
50 #define PSR_PAN_BIT 0x00400000
51 #define PSR_UAO_BIT 0x00800000
52 #define PSR_DIT_BIT 0x01000000
53 #define PSR_V_BIT 0x10000000
54 #define PSR_C_BIT 0x20000000
55 #define PSR_Z_BIT 0x40000000
56 #define PSR_N_BIT 0x80000000
57
58
59
60
61 #define PSR_f 0xff000000
62 #define PSR_s 0x00ff0000
63 #define PSR_x 0x0000ff00
64 #define PSR_c 0x000000ff
65
66
67 #define PTRACE_SYSEMU 31
68 #define PTRACE_SYSEMU_SINGLESTEP 32
69
70 #ifndef __ASSEMBLY__
71
72
73
74
75 struct user_pt_regs {
76 __u64 regs[31];
77 __u64 sp;
78 __u64 pc;
79 __u64 pstate;
80 };
81
82 struct user_fpsimd_state {
83 __uint128_t vregs[32];
84 __u32 fpsr;
85 __u32 fpcr;
86 __u32 __reserved[2];
87 };
88
89 struct user_hwdebug_state {
90 __u32 dbg_info;
91 __u32 pad;
92 struct {
93 __u64 addr;
94 __u32 ctrl;
95 __u32 pad;
96 } dbg_regs[16];
97 };
98
99
100
101 struct user_sve_header {
102 __u32 size;
103 __u32 max_size;
104 __u16 vl;
105 __u16 max_vl;
106 __u16 flags;
107 __u16 __reserved;
108 };
109
110
111 #define SVE_PT_REGS_MASK (1 << 0)
112
113 #define SVE_PT_REGS_FPSIMD 0
114 #define SVE_PT_REGS_SVE SVE_PT_REGS_MASK
115
116
117
118
119
120 #define SVE_PT_VL_INHERIT ((1 << 17) >> 16)
121 #define SVE_PT_VL_ONEXEC ((1 << 18) >> 16)
122
123
124
125
126
127
128
129
130
131
132
133
134
135 #define SVE_PT_REGS_OFFSET \
136 ((sizeof(struct user_sve_header) + (__SVE_VQ_BYTES - 1)) \
137 / __SVE_VQ_BYTES * __SVE_VQ_BYTES)
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154 #define SVE_PT_FPSIMD_OFFSET SVE_PT_REGS_OFFSET
155
156 #define SVE_PT_FPSIMD_SIZE(vq, flags) (sizeof(struct user_fpsimd_state))
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187 #define SVE_PT_SVE_ZREG_SIZE(vq) __SVE_ZREG_SIZE(vq)
188 #define SVE_PT_SVE_PREG_SIZE(vq) __SVE_PREG_SIZE(vq)
189 #define SVE_PT_SVE_FFR_SIZE(vq) __SVE_FFR_SIZE(vq)
190 #define SVE_PT_SVE_FPSR_SIZE sizeof(__u32)
191 #define SVE_PT_SVE_FPCR_SIZE sizeof(__u32)
192
193 #define SVE_PT_SVE_OFFSET SVE_PT_REGS_OFFSET
194
195 #define SVE_PT_SVE_ZREGS_OFFSET \
196 (SVE_PT_REGS_OFFSET + __SVE_ZREGS_OFFSET)
197 #define SVE_PT_SVE_ZREG_OFFSET(vq, n) \
198 (SVE_PT_REGS_OFFSET + __SVE_ZREG_OFFSET(vq, n))
199 #define SVE_PT_SVE_ZREGS_SIZE(vq) \
200 (SVE_PT_SVE_ZREG_OFFSET(vq, __SVE_NUM_ZREGS) - SVE_PT_SVE_ZREGS_OFFSET)
201
202 #define SVE_PT_SVE_PREGS_OFFSET(vq) \
203 (SVE_PT_REGS_OFFSET + __SVE_PREGS_OFFSET(vq))
204 #define SVE_PT_SVE_PREG_OFFSET(vq, n) \
205 (SVE_PT_REGS_OFFSET + __SVE_PREG_OFFSET(vq, n))
206 #define SVE_PT_SVE_PREGS_SIZE(vq) \
207 (SVE_PT_SVE_PREG_OFFSET(vq, __SVE_NUM_PREGS) - \
208 SVE_PT_SVE_PREGS_OFFSET(vq))
209
210 #define SVE_PT_SVE_FFR_OFFSET(vq) \
211 (SVE_PT_REGS_OFFSET + __SVE_FFR_OFFSET(vq))
212
213 #define SVE_PT_SVE_FPSR_OFFSET(vq) \
214 ((SVE_PT_SVE_FFR_OFFSET(vq) + SVE_PT_SVE_FFR_SIZE(vq) + \
215 (__SVE_VQ_BYTES - 1)) \
216 / __SVE_VQ_BYTES * __SVE_VQ_BYTES)
217 #define SVE_PT_SVE_FPCR_OFFSET(vq) \
218 (SVE_PT_SVE_FPSR_OFFSET(vq) + SVE_PT_SVE_FPSR_SIZE)
219
220
221
222
223
224
225 #define SVE_PT_SVE_SIZE(vq, flags) \
226 ((SVE_PT_SVE_FPCR_OFFSET(vq) + SVE_PT_SVE_FPCR_SIZE \
227 - SVE_PT_SVE_OFFSET + (__SVE_VQ_BYTES - 1)) \
228 / __SVE_VQ_BYTES * __SVE_VQ_BYTES)
229
230 #define SVE_PT_SIZE(vq, flags) \
231 (((flags) & SVE_PT_REGS_MASK) == SVE_PT_REGS_SVE ? \
232 SVE_PT_SVE_OFFSET + SVE_PT_SVE_SIZE(vq, flags) \
233 : SVE_PT_FPSIMD_OFFSET + SVE_PT_FPSIMD_SIZE(vq, flags))
234
235
236
237 struct user_pac_mask {
238 __u64 data_mask;
239 __u64 insn_mask;
240 };
241
242
243
244 struct user_pac_address_keys {
245 __uint128_t apiakey;
246 __uint128_t apibkey;
247 __uint128_t apdakey;
248 __uint128_t apdbkey;
249 };
250
251 struct user_pac_generic_keys {
252 __uint128_t apgakey;
253 };
254
255 #endif
256
257 #endif