1 /* 2 * This header was generated from the Linux kernel headers by update_headers.py, 3 * to provide necessary information from kernel to userspace, such as constants, 4 * structures, and macros, and thus, contains no copyrightable information. 5 */ 6 #ifndef __ASM_PTRACE_H 7 #define __ASM_PTRACE_H 8 #include <linux/types.h> 9 #include <asm/hwcap.h> 10 #include <asm/sigcontext.h> 11 #define PSR_MODE_EL0t 0x00000000 12 #define PSR_MODE_EL1t 0x00000004 13 #define PSR_MODE_EL1h 0x00000005 14 #define PSR_MODE_EL2t 0x00000008 15 #define PSR_MODE_EL2h 0x00000009 16 #define PSR_MODE_EL3t 0x0000000c 17 #define PSR_MODE_EL3h 0x0000000d 18 #define PSR_MODE_MASK 0x0000000f 19 #define PSR_MODE32_BIT 0x00000010 20 #define PSR_F_BIT 0x00000040 21 #define PSR_I_BIT 0x00000080 22 #define PSR_A_BIT 0x00000100 23 #define PSR_D_BIT 0x00000200 24 #define PSR_SSBS_BIT 0x00001000 25 #define PSR_PAN_BIT 0x00400000 26 #define PSR_UAO_BIT 0x00800000 27 #define PSR_DIT_BIT 0x01000000 28 #define PSR_V_BIT 0x10000000 29 #define PSR_C_BIT 0x20000000 30 #define PSR_Z_BIT 0x40000000 31 #define PSR_N_BIT 0x80000000 32 #define PSR_f 0xff000000 33 #define PSR_s 0x00ff0000 34 #define PSR_x 0x0000ff00 35 #define PSR_c 0x000000ff 36 #ifndef __ASSEMBLY__ 37 struct user_pt_regs { 38 __u64 regs[31]; 39 __u64 sp; 40 __u64 pc; 41 __u64 pstate; 42 }; 43 struct user_fpsimd_state { 44 __uint128_t vregs[32]; 45 __u32 fpsr; 46 __u32 fpcr; 47 __u32 __reserved[2]; 48 }; 49 struct user_hwdebug_state { 50 __u32 dbg_info; 51 __u32 pad; 52 struct { 53 __u64 addr; 54 __u32 ctrl; 55 __u32 pad; 56 } dbg_regs[16]; 57 }; 58 struct user_sve_header { 59 __u32 size; 60 __u32 max_size; 61 __u16 vl; 62 __u16 max_vl; 63 __u16 flags; 64 __u16 __reserved; 65 }; 66 #define SVE_PT_REGS_MASK (1 << 0) 67 #define SVE_PT_REGS_FPSIMD 0 68 #define SVE_PT_REGS_SVE SVE_PT_REGS_MASK 69 #define SVE_PT_VL_INHERIT ((1 << 17) >> 16) 70 #define SVE_PT_VL_ONEXEC ((1 << 18) >> 16) 71 #define SVE_PT_REGS_OFFSET \ 72 ((sizeof(struct user_sve_header) + (SVE_VQ_BYTES - 1)) \ 73 / SVE_VQ_BYTES * SVE_VQ_BYTES) 74 #define SVE_PT_FPSIMD_OFFSET SVE_PT_REGS_OFFSET 75 #define SVE_PT_FPSIMD_SIZE(vq, flags) (sizeof(struct user_fpsimd_state)) 76 #define SVE_PT_SVE_ZREG_SIZE(vq) SVE_SIG_ZREG_SIZE(vq) 77 #define SVE_PT_SVE_PREG_SIZE(vq) SVE_SIG_PREG_SIZE(vq) 78 #define SVE_PT_SVE_FFR_SIZE(vq) SVE_SIG_FFR_SIZE(vq) 79 #define SVE_PT_SVE_FPSR_SIZE sizeof(__u32) 80 #define SVE_PT_SVE_FPCR_SIZE sizeof(__u32) 81 #define __SVE_SIG_TO_PT(offset) \ 82 ((offset) - SVE_SIG_REGS_OFFSET + SVE_PT_REGS_OFFSET) 83 #define SVE_PT_SVE_OFFSET SVE_PT_REGS_OFFSET 84 #define SVE_PT_SVE_ZREGS_OFFSET \ 85 __SVE_SIG_TO_PT(SVE_SIG_ZREGS_OFFSET) 86 #define SVE_PT_SVE_ZREG_OFFSET(vq, n) \ 87 __SVE_SIG_TO_PT(SVE_SIG_ZREG_OFFSET(vq, n)) 88 #define SVE_PT_SVE_ZREGS_SIZE(vq) \ 89 (SVE_PT_SVE_ZREG_OFFSET(vq, SVE_NUM_ZREGS) - SVE_PT_SVE_ZREGS_OFFSET) 90 #define SVE_PT_SVE_PREGS_OFFSET(vq) \ 91 __SVE_SIG_TO_PT(SVE_SIG_PREGS_OFFSET(vq)) 92 #define SVE_PT_SVE_PREG_OFFSET(vq, n) \ 93 __SVE_SIG_TO_PT(SVE_SIG_PREG_OFFSET(vq, n)) 94 #define SVE_PT_SVE_PREGS_SIZE(vq) \ 95 (SVE_PT_SVE_PREG_OFFSET(vq, SVE_NUM_PREGS) - \ 96 SVE_PT_SVE_PREGS_OFFSET(vq)) 97 #define SVE_PT_SVE_FFR_OFFSET(vq) \ 98 __SVE_SIG_TO_PT(SVE_SIG_FFR_OFFSET(vq)) 99 #define SVE_PT_SVE_FPSR_OFFSET(vq) \ 100 ((SVE_PT_SVE_FFR_OFFSET(vq) + SVE_PT_SVE_FFR_SIZE(vq) + \ 101 (SVE_VQ_BYTES - 1)) \ 102 / SVE_VQ_BYTES * SVE_VQ_BYTES) 103 #define SVE_PT_SVE_FPCR_OFFSET(vq) \ 104 (SVE_PT_SVE_FPSR_OFFSET(vq) + SVE_PT_SVE_FPSR_SIZE) 105 #define SVE_PT_SVE_SIZE(vq, flags) \ 106 ((SVE_PT_SVE_FPCR_OFFSET(vq) + SVE_PT_SVE_FPCR_SIZE \ 107 - SVE_PT_SVE_OFFSET + (SVE_VQ_BYTES - 1)) \ 108 / SVE_VQ_BYTES * SVE_VQ_BYTES) 109 #define SVE_PT_SIZE(vq, flags) \ 110 (((flags) & SVE_PT_REGS_MASK) == SVE_PT_REGS_SVE ? \ 111 SVE_PT_SVE_OFFSET + SVE_PT_SVE_SIZE(vq, flags) \ 112 : SVE_PT_FPSIMD_OFFSET + SVE_PT_FPSIMD_SIZE(vq, flags)) 113 #endif 114 #endif 115