1*7ee966e9SAndrew Jones #ifndef _ASMARM64_PTRACE_H_ 2*7ee966e9SAndrew Jones #define _ASMARM64_PTRACE_H_ 3*7ee966e9SAndrew Jones /* 4*7ee966e9SAndrew Jones * Adapted from Linux kernel headers 5*7ee966e9SAndrew Jones * arch/arm64/include/asm/ptrace.h 6*7ee966e9SAndrew Jones * arch/arm64/include/uapi/asm/ptrace.h 7*7ee966e9SAndrew Jones */ 8*7ee966e9SAndrew Jones 9*7ee966e9SAndrew Jones /* Current Exception Level values, as contained in CurrentEL */ 10*7ee966e9SAndrew Jones #define CurrentEL_EL1 (1 << 2) 11*7ee966e9SAndrew Jones #define CurrentEL_EL2 (2 << 2) 12*7ee966e9SAndrew Jones 13*7ee966e9SAndrew Jones /* 14*7ee966e9SAndrew Jones * PSR bits 15*7ee966e9SAndrew Jones */ 16*7ee966e9SAndrew Jones #define PSR_MODE_EL0t 0x00000000 17*7ee966e9SAndrew Jones #define PSR_MODE_EL1t 0x00000004 18*7ee966e9SAndrew Jones #define PSR_MODE_EL1h 0x00000005 19*7ee966e9SAndrew Jones #define PSR_MODE_EL2t 0x00000008 20*7ee966e9SAndrew Jones #define PSR_MODE_EL2h 0x00000009 21*7ee966e9SAndrew Jones #define PSR_MODE_EL3t 0x0000000c 22*7ee966e9SAndrew Jones #define PSR_MODE_EL3h 0x0000000d 23*7ee966e9SAndrew Jones #define PSR_MODE_MASK 0x0000000f 24*7ee966e9SAndrew Jones 25*7ee966e9SAndrew Jones /* AArch32 CPSR bits */ 26*7ee966e9SAndrew Jones #define PSR_MODE32_BIT 0x00000010 27*7ee966e9SAndrew Jones 28*7ee966e9SAndrew Jones /* AArch64 SPSR bits */ 29*7ee966e9SAndrew Jones #define PSR_F_BIT 0x00000040 30*7ee966e9SAndrew Jones #define PSR_I_BIT 0x00000080 31*7ee966e9SAndrew Jones #define PSR_A_BIT 0x00000100 32*7ee966e9SAndrew Jones #define PSR_D_BIT 0x00000200 33*7ee966e9SAndrew Jones #define PSR_Q_BIT 0x08000000 34*7ee966e9SAndrew Jones #define PSR_V_BIT 0x10000000 35*7ee966e9SAndrew Jones #define PSR_C_BIT 0x20000000 36*7ee966e9SAndrew Jones #define PSR_Z_BIT 0x40000000 37*7ee966e9SAndrew Jones #define PSR_N_BIT 0x80000000 38*7ee966e9SAndrew Jones 39*7ee966e9SAndrew Jones /* 40*7ee966e9SAndrew Jones * Groups of PSR bits 41*7ee966e9SAndrew Jones */ 42*7ee966e9SAndrew Jones #define PSR_f 0xff000000 /* Flags */ 43*7ee966e9SAndrew Jones #define PSR_s 0x00ff0000 /* Status */ 44*7ee966e9SAndrew Jones #define PSR_x 0x0000ff00 /* Extension */ 45*7ee966e9SAndrew Jones #define PSR_c 0x000000ff /* Control */ 46*7ee966e9SAndrew Jones 47*7ee966e9SAndrew Jones #ifndef __ASSEMBLY__ 48*7ee966e9SAndrew Jones #include <libcflat.h> 49*7ee966e9SAndrew Jones 50*7ee966e9SAndrew Jones struct user_pt_regs { 51*7ee966e9SAndrew Jones u64 regs[31]; 52*7ee966e9SAndrew Jones u64 sp; 53*7ee966e9SAndrew Jones u64 pc; 54*7ee966e9SAndrew Jones u64 pstate; 55*7ee966e9SAndrew Jones }; 56*7ee966e9SAndrew Jones 57*7ee966e9SAndrew Jones struct user_fpsimd_state { 58*7ee966e9SAndrew Jones __uint128_t vregs[32]; 59*7ee966e9SAndrew Jones u32 fpsr; 60*7ee966e9SAndrew Jones u32 fpcr; 61*7ee966e9SAndrew Jones }; 62*7ee966e9SAndrew Jones 63*7ee966e9SAndrew Jones /* 64*7ee966e9SAndrew Jones * This struct defines the way the registers are stored on the stack during an 65*7ee966e9SAndrew Jones * exception. Note that sizeof(struct pt_regs) has to be a multiple of 16 (for 66*7ee966e9SAndrew Jones * stack alignment). struct user_pt_regs must form a prefix of struct pt_regs. 67*7ee966e9SAndrew Jones */ 68*7ee966e9SAndrew Jones struct pt_regs { 69*7ee966e9SAndrew Jones union { 70*7ee966e9SAndrew Jones struct user_pt_regs user_regs; 71*7ee966e9SAndrew Jones struct { 72*7ee966e9SAndrew Jones u64 regs[31]; 73*7ee966e9SAndrew Jones u64 sp; 74*7ee966e9SAndrew Jones u64 pc; 75*7ee966e9SAndrew Jones u64 pstate; 76*7ee966e9SAndrew Jones }; 77*7ee966e9SAndrew Jones }; 78*7ee966e9SAndrew Jones u64 orig_x0; 79*7ee966e9SAndrew Jones u64 syscallno; 80*7ee966e9SAndrew Jones }; 81*7ee966e9SAndrew Jones 82*7ee966e9SAndrew Jones #define user_mode(regs) \ 83*7ee966e9SAndrew Jones (((regs)->pstate & PSR_MODE_MASK) == PSR_MODE_EL0t) 84*7ee966e9SAndrew Jones 85*7ee966e9SAndrew Jones #define processor_mode(regs) \ 86*7ee966e9SAndrew Jones ((regs)->pstate & PSR_MODE_MASK) 87*7ee966e9SAndrew Jones 88*7ee966e9SAndrew Jones #define interrupts_enabled(regs) \ 89*7ee966e9SAndrew Jones (!((regs)->pstate & PSR_I_BIT)) 90*7ee966e9SAndrew Jones 91*7ee966e9SAndrew Jones #define fast_interrupts_enabled(regs) \ 92*7ee966e9SAndrew Jones (!((regs)->pstate & PSR_F_BIT)) 93*7ee966e9SAndrew Jones 94*7ee966e9SAndrew Jones #endif /* !__ASSEMBLY__ */ 95*7ee966e9SAndrew Jones #endif /* _ASMARM64_PTRACE_H_ */ 96