0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef _UAPI__ASM_PTRACE_H
0021 #define _UAPI__ASM_PTRACE_H
0022
0023 #include <linux/types.h>
0024
0025 #include <asm/hwcap.h>
0026 #include <asm/sve_context.h>
0027
0028
0029
0030
0031
0032 #define PSR_MODE_EL0t 0x00000000
0033 #define PSR_MODE_EL1t 0x00000004
0034 #define PSR_MODE_EL1h 0x00000005
0035 #define PSR_MODE_EL2t 0x00000008
0036 #define PSR_MODE_EL2h 0x00000009
0037 #define PSR_MODE_EL3t 0x0000000c
0038 #define PSR_MODE_EL3h 0x0000000d
0039 #define PSR_MODE_MASK 0x0000000f
0040
0041
0042 #define PSR_MODE32_BIT 0x00000010
0043
0044
0045 #define PSR_F_BIT 0x00000040
0046 #define PSR_I_BIT 0x00000080
0047 #define PSR_A_BIT 0x00000100
0048 #define PSR_D_BIT 0x00000200
0049 #define PSR_BTYPE_MASK 0x00000c00
0050 #define PSR_SSBS_BIT 0x00001000
0051 #define PSR_PAN_BIT 0x00400000
0052 #define PSR_UAO_BIT 0x00800000
0053 #define PSR_DIT_BIT 0x01000000
0054 #define PSR_TCO_BIT 0x02000000
0055 #define PSR_V_BIT 0x10000000
0056 #define PSR_C_BIT 0x20000000
0057 #define PSR_Z_BIT 0x40000000
0058 #define PSR_N_BIT 0x80000000
0059
0060 #define PSR_BTYPE_SHIFT 10
0061
0062
0063
0064
0065 #define PSR_f 0xff000000
0066 #define PSR_s 0x00ff0000
0067 #define PSR_x 0x0000ff00
0068 #define PSR_c 0x000000ff
0069
0070
0071 #define PSR_BTYPE_NONE (0b00 << PSR_BTYPE_SHIFT)
0072 #define PSR_BTYPE_JC (0b01 << PSR_BTYPE_SHIFT)
0073 #define PSR_BTYPE_C (0b10 << PSR_BTYPE_SHIFT)
0074 #define PSR_BTYPE_J (0b11 << PSR_BTYPE_SHIFT)
0075
0076
0077 #define PTRACE_SYSEMU 31
0078 #define PTRACE_SYSEMU_SINGLESTEP 32
0079
0080 #define PTRACE_PEEKMTETAGS 33
0081 #define PTRACE_POKEMTETAGS 34
0082
0083 #ifndef __ASSEMBLY__
0084
0085
0086
0087
0088 struct user_pt_regs {
0089 __u64 regs[31];
0090 __u64 sp;
0091 __u64 pc;
0092 __u64 pstate;
0093 };
0094
0095 struct user_fpsimd_state {
0096 __uint128_t vregs[32];
0097 __u32 fpsr;
0098 __u32 fpcr;
0099 __u32 __reserved[2];
0100 };
0101
0102 struct user_hwdebug_state {
0103 __u32 dbg_info;
0104 __u32 pad;
0105 struct {
0106 __u64 addr;
0107 __u32 ctrl;
0108 __u32 pad;
0109 } dbg_regs[16];
0110 };
0111
0112
0113
0114 struct user_sve_header {
0115 __u32 size;
0116 __u32 max_size;
0117 __u16 vl;
0118 __u16 max_vl;
0119 __u16 flags;
0120 __u16 __reserved;
0121 };
0122
0123
0124 #define SVE_PT_REGS_MASK (1 << 0)
0125
0126 #define SVE_PT_REGS_FPSIMD 0
0127 #define SVE_PT_REGS_SVE SVE_PT_REGS_MASK
0128
0129
0130
0131
0132
0133 #define SVE_PT_VL_INHERIT ((1 << 17) >> 16)
0134 #define SVE_PT_VL_ONEXEC ((1 << 18) >> 16)
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148 #define SVE_PT_REGS_OFFSET \
0149 ((sizeof(struct user_sve_header) + (__SVE_VQ_BYTES - 1)) \
0150 / __SVE_VQ_BYTES * __SVE_VQ_BYTES)
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167 #define SVE_PT_FPSIMD_OFFSET SVE_PT_REGS_OFFSET
0168
0169 #define SVE_PT_FPSIMD_SIZE(vq, flags) (sizeof(struct user_fpsimd_state))
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200 #define SVE_PT_SVE_ZREG_SIZE(vq) __SVE_ZREG_SIZE(vq)
0201 #define SVE_PT_SVE_PREG_SIZE(vq) __SVE_PREG_SIZE(vq)
0202 #define SVE_PT_SVE_FFR_SIZE(vq) __SVE_FFR_SIZE(vq)
0203 #define SVE_PT_SVE_FPSR_SIZE sizeof(__u32)
0204 #define SVE_PT_SVE_FPCR_SIZE sizeof(__u32)
0205
0206 #define SVE_PT_SVE_OFFSET SVE_PT_REGS_OFFSET
0207
0208 #define SVE_PT_SVE_ZREGS_OFFSET \
0209 (SVE_PT_REGS_OFFSET + __SVE_ZREGS_OFFSET)
0210 #define SVE_PT_SVE_ZREG_OFFSET(vq, n) \
0211 (SVE_PT_REGS_OFFSET + __SVE_ZREG_OFFSET(vq, n))
0212 #define SVE_PT_SVE_ZREGS_SIZE(vq) \
0213 (SVE_PT_SVE_ZREG_OFFSET(vq, __SVE_NUM_ZREGS) - SVE_PT_SVE_ZREGS_OFFSET)
0214
0215 #define SVE_PT_SVE_PREGS_OFFSET(vq) \
0216 (SVE_PT_REGS_OFFSET + __SVE_PREGS_OFFSET(vq))
0217 #define SVE_PT_SVE_PREG_OFFSET(vq, n) \
0218 (SVE_PT_REGS_OFFSET + __SVE_PREG_OFFSET(vq, n))
0219 #define SVE_PT_SVE_PREGS_SIZE(vq) \
0220 (SVE_PT_SVE_PREG_OFFSET(vq, __SVE_NUM_PREGS) - \
0221 SVE_PT_SVE_PREGS_OFFSET(vq))
0222
0223
0224 #define SVE_PT_SVE_FFR_OFFSET(vq) \
0225 (SVE_PT_REGS_OFFSET + __SVE_FFR_OFFSET(vq))
0226
0227 #define SVE_PT_SVE_FPSR_OFFSET(vq) \
0228 ((SVE_PT_SVE_FFR_OFFSET(vq) + SVE_PT_SVE_FFR_SIZE(vq) + \
0229 (__SVE_VQ_BYTES - 1)) \
0230 / __SVE_VQ_BYTES * __SVE_VQ_BYTES)
0231 #define SVE_PT_SVE_FPCR_OFFSET(vq) \
0232 (SVE_PT_SVE_FPSR_OFFSET(vq) + SVE_PT_SVE_FPSR_SIZE)
0233
0234
0235
0236
0237
0238
0239 #define SVE_PT_SVE_SIZE(vq, flags) \
0240 ((SVE_PT_SVE_FPCR_OFFSET(vq) + SVE_PT_SVE_FPCR_SIZE \
0241 - SVE_PT_SVE_OFFSET + (__SVE_VQ_BYTES - 1)) \
0242 / __SVE_VQ_BYTES * __SVE_VQ_BYTES)
0243
0244 #define SVE_PT_SIZE(vq, flags) \
0245 (((flags) & SVE_PT_REGS_MASK) == SVE_PT_REGS_SVE ? \
0246 SVE_PT_SVE_OFFSET + SVE_PT_SVE_SIZE(vq, flags) \
0247 : ((((flags) & SVE_PT_REGS_MASK) == SVE_PT_REGS_FPSIMD ? \
0248 SVE_PT_FPSIMD_OFFSET + SVE_PT_FPSIMD_SIZE(vq, flags) \
0249 : SVE_PT_REGS_OFFSET)))
0250
0251
0252
0253 struct user_pac_mask {
0254 __u64 data_mask;
0255 __u64 insn_mask;
0256 };
0257
0258
0259
0260 struct user_pac_address_keys {
0261 __uint128_t apiakey;
0262 __uint128_t apibkey;
0263 __uint128_t apdakey;
0264 __uint128_t apdbkey;
0265 };
0266
0267 struct user_pac_generic_keys {
0268 __uint128_t apgakey;
0269 };
0270
0271
0272
0273 struct user_za_header {
0274 __u32 size;
0275 __u32 max_size;
0276 __u16 vl;
0277 __u16 max_vl;
0278 __u16 flags;
0279 __u16 __reserved;
0280 };
0281
0282
0283
0284
0285
0286 #define ZA_PT_VL_INHERIT ((1 << 17) >> 16)
0287 #define ZA_PT_VL_ONEXEC ((1 << 18) >> 16)
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301 #define ZA_PT_ZA_OFFSET \
0302 ((sizeof(struct user_za_header) + (__SVE_VQ_BYTES - 1)) \
0303 / __SVE_VQ_BYTES * __SVE_VQ_BYTES)
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319 #define ZA_PT_ZAV_OFFSET(vq, n) \
0320 (ZA_PT_ZA_OFFSET + ((vq * __SVE_VQ_BYTES) * n))
0321
0322 #define ZA_PT_ZA_SIZE(vq) ((vq * __SVE_VQ_BYTES) * (vq * __SVE_VQ_BYTES))
0323
0324 #define ZA_PT_SIZE(vq) \
0325 (ZA_PT_ZA_OFFSET + ZA_PT_ZA_SIZE(vq))
0326
0327 #endif
0328
0329 #endif