17ee966e9SAndrew Jones #ifndef _ASMARM64_PTRACE_H_ 27ee966e9SAndrew Jones #define _ASMARM64_PTRACE_H_ 37ee966e9SAndrew Jones /* 47ee966e9SAndrew Jones * Adapted from Linux kernel headers 57ee966e9SAndrew Jones * arch/arm64/include/asm/ptrace.h 67ee966e9SAndrew Jones * arch/arm64/include/uapi/asm/ptrace.h 749f758b8SAndrew Jones * 849f758b8SAndrew Jones * Copyright (C) 2017, Red Hat Inc, Andrew Jones <drjones@redhat.com> 949f758b8SAndrew Jones * 1049f758b8SAndrew Jones * This work is licensed under the terms of the GNU GPL, version 2. 117ee966e9SAndrew Jones */ 127ee966e9SAndrew Jones 137ee966e9SAndrew Jones /* Current Exception Level values, as contained in CurrentEL */ 147ee966e9SAndrew Jones #define CurrentEL_EL1 (1 << 2) 157ee966e9SAndrew Jones #define CurrentEL_EL2 (2 << 2) 167ee966e9SAndrew Jones 177ee966e9SAndrew Jones /* 187ee966e9SAndrew Jones * PSR bits 197ee966e9SAndrew Jones */ 207ee966e9SAndrew Jones #define PSR_MODE_EL0t 0x00000000 217ee966e9SAndrew Jones #define PSR_MODE_EL1t 0x00000004 227ee966e9SAndrew Jones #define PSR_MODE_EL1h 0x00000005 237ee966e9SAndrew Jones #define PSR_MODE_EL2t 0x00000008 247ee966e9SAndrew Jones #define PSR_MODE_EL2h 0x00000009 257ee966e9SAndrew Jones #define PSR_MODE_EL3t 0x0000000c 267ee966e9SAndrew Jones #define PSR_MODE_EL3h 0x0000000d 277ee966e9SAndrew Jones #define PSR_MODE_MASK 0x0000000f 287ee966e9SAndrew Jones 297ee966e9SAndrew Jones /* AArch32 CPSR bits */ 307ee966e9SAndrew Jones #define PSR_MODE32_BIT 0x00000010 317ee966e9SAndrew Jones 327ee966e9SAndrew Jones /* AArch64 SPSR bits */ 337ee966e9SAndrew Jones #define PSR_F_BIT 0x00000040 347ee966e9SAndrew Jones #define PSR_I_BIT 0x00000080 357ee966e9SAndrew Jones #define PSR_A_BIT 0x00000100 367ee966e9SAndrew Jones #define PSR_D_BIT 0x00000200 377ee966e9SAndrew Jones #define PSR_Q_BIT 0x08000000 387ee966e9SAndrew Jones #define PSR_V_BIT 0x10000000 397ee966e9SAndrew Jones #define PSR_C_BIT 0x20000000 407ee966e9SAndrew Jones #define PSR_Z_BIT 0x40000000 417ee966e9SAndrew Jones #define PSR_N_BIT 0x80000000 427ee966e9SAndrew Jones 437ee966e9SAndrew Jones /* 447ee966e9SAndrew Jones * Groups of PSR bits 457ee966e9SAndrew Jones */ 467ee966e9SAndrew Jones #define PSR_f 0xff000000 /* Flags */ 477ee966e9SAndrew Jones #define PSR_s 0x00ff0000 /* Status */ 487ee966e9SAndrew Jones #define PSR_x 0x0000ff00 /* Extension */ 497ee966e9SAndrew Jones #define PSR_c 0x000000ff /* Control */ 507ee966e9SAndrew Jones 51*0cc3a351SSean Christopherson #ifndef __ASSEMBLER__ 527ee966e9SAndrew Jones #include <libcflat.h> 537ee966e9SAndrew Jones 547ee966e9SAndrew Jones struct user_pt_regs { 557ee966e9SAndrew Jones u64 regs[31]; 567ee966e9SAndrew Jones u64 sp; 577ee966e9SAndrew Jones u64 pc; 587ee966e9SAndrew Jones u64 pstate; 597ee966e9SAndrew Jones }; 607ee966e9SAndrew Jones 617ee966e9SAndrew Jones struct user_fpsimd_state { 627ee966e9SAndrew Jones __uint128_t vregs[32]; 637ee966e9SAndrew Jones u32 fpsr; 647ee966e9SAndrew Jones u32 fpcr; 657ee966e9SAndrew Jones }; 667ee966e9SAndrew Jones 677ee966e9SAndrew Jones /* 687ee966e9SAndrew Jones * This struct defines the way the registers are stored on the stack during an 697ee966e9SAndrew Jones * exception. Note that sizeof(struct pt_regs) has to be a multiple of 16 (for 707ee966e9SAndrew Jones * stack alignment). struct user_pt_regs must form a prefix of struct pt_regs. 717ee966e9SAndrew Jones */ 727ee966e9SAndrew Jones struct pt_regs { 737ee966e9SAndrew Jones union { 747ee966e9SAndrew Jones struct user_pt_regs user_regs; 757ee966e9SAndrew Jones struct { 767ee966e9SAndrew Jones u64 regs[31]; 777ee966e9SAndrew Jones u64 sp; 787ee966e9SAndrew Jones u64 pc; 797ee966e9SAndrew Jones u64 pstate; 807ee966e9SAndrew Jones }; 817ee966e9SAndrew Jones }; 827ee966e9SAndrew Jones u64 orig_x0; 837ee966e9SAndrew Jones u64 syscallno; 847ee966e9SAndrew Jones }; 857ee966e9SAndrew Jones 867ee966e9SAndrew Jones #define user_mode(regs) \ 877ee966e9SAndrew Jones (((regs)->pstate & PSR_MODE_MASK) == PSR_MODE_EL0t) 887ee966e9SAndrew Jones 897ee966e9SAndrew Jones #define processor_mode(regs) \ 907ee966e9SAndrew Jones ((regs)->pstate & PSR_MODE_MASK) 917ee966e9SAndrew Jones 927ee966e9SAndrew Jones #define interrupts_enabled(regs) \ 937ee966e9SAndrew Jones (!((regs)->pstate & PSR_I_BIT)) 947ee966e9SAndrew Jones 957ee966e9SAndrew Jones #define fast_interrupts_enabled(regs) \ 967ee966e9SAndrew Jones (!((regs)->pstate & PSR_F_BIT)) 977ee966e9SAndrew Jones 98*0cc3a351SSean Christopherson #endif /* !__ASSEMBLER__ */ 997ee966e9SAndrew Jones #endif /* _ASMARM64_PTRACE_H_ */ 100