1 /* 2 * Copyright (C) 2012 ARM Ltd. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 as 6 * published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 #ifndef _UAPI__ASM_SIGCONTEXT_H 17 #define _UAPI__ASM_SIGCONTEXT_H 18 19 #include <linux/types.h> 20 21 /* 22 * Signal context structure - contains all info to do with the state 23 * before the signal handler was invoked. 24 */ 25 struct sigcontext { 26 __u64 fault_address; 27 /* AArch64 registers */ 28 __u64 regs[31]; 29 __u64 sp; 30 __u64 pc; 31 __u64 pstate; 32 /* 4K reserved for FP/SIMD state and future expansion */ 33 __u8 __reserved[4096] __attribute__((__aligned__(16))); 34 }; 35 36 /* 37 * Header to be used at the beginning of structures extending the user 38 * context. Such structures must be placed after the rt_sigframe on the stack 39 * and be 16-byte aligned. The last structure must be a dummy one with the 40 * magic and size set to 0. 41 */ 42 struct _aarch64_ctx { 43 __u32 magic; 44 __u32 size; 45 }; 46 47 #define FPSIMD_MAGIC 0x46508001 48 49 struct fpsimd_context { 50 struct _aarch64_ctx head; 51 __u32 fpsr; 52 __u32 fpcr; 53 __uint128_t vregs[32]; 54 }; 55 56 /* ESR_EL1 context */ 57 #define ESR_MAGIC 0x45535201 58 59 struct esr_context { 60 struct _aarch64_ctx head; 61 __u64 esr; 62 }; 63 64 #endif /* _UAPI__ASM_SIGCONTEXT_H */ 65