121f24617SDmitry Chagin /*- 221f24617SDmitry Chagin * Copyright (c) 1994-1996 Søren Schmidt 321f24617SDmitry Chagin * Copyright (c) 2018 Turing Robotic Industries Inc. 4c56480a8SDmitry Chagin * Copyright (c) 2022 Dmitry Chagin <dchagin@FreeBSD.org> 521f24617SDmitry Chagin * 621f24617SDmitry Chagin * Redistribution and use in source and binary forms, with or without 721f24617SDmitry Chagin * modification, are permitted provided that the following conditions 821f24617SDmitry Chagin * are met: 921f24617SDmitry Chagin * 1. Redistributions of source code must retain the above copyright 1021f24617SDmitry Chagin * notice, this list of conditions and the following disclaimer. 1121f24617SDmitry Chagin * 2. Redistributions in binary form must reproduce the above copyright 1221f24617SDmitry Chagin * notice, this list of conditions and the following disclaimer in the 1321f24617SDmitry Chagin * documentation and/or other materials provided with the distribution. 1421f24617SDmitry Chagin * 1521f24617SDmitry Chagin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1621f24617SDmitry Chagin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1721f24617SDmitry Chagin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1821f24617SDmitry Chagin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1921f24617SDmitry Chagin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2021f24617SDmitry Chagin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2121f24617SDmitry Chagin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2221f24617SDmitry Chagin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2321f24617SDmitry Chagin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2421f24617SDmitry Chagin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2521f24617SDmitry Chagin * SUCH DAMAGE. 2621f24617SDmitry Chagin */ 27c56480a8SDmitry Chagin 2821f24617SDmitry Chagin #ifndef _ARM64_LINUX_SIGFRAME_H_ 2921f24617SDmitry Chagin #define _ARM64_LINUX_SIGFRAME_H_ 3021f24617SDmitry Chagin 31c56480a8SDmitry Chagin struct _l_aarch64_ctx { 32c56480a8SDmitry Chagin uint32_t magic; 33c56480a8SDmitry Chagin uint32_t size; 34c56480a8SDmitry Chagin }; 35c56480a8SDmitry Chagin 36c56480a8SDmitry Chagin #define L_FPSIMD_MAGIC 0x46508001 37c56480a8SDmitry Chagin #define L_ESR_MAGIC 0x45535201 38c56480a8SDmitry Chagin 39c56480a8SDmitry Chagin struct l_fpsimd_context { 40c56480a8SDmitry Chagin struct _l_aarch64_ctx head; 41c56480a8SDmitry Chagin uint32_t fpsr; 42c56480a8SDmitry Chagin uint32_t fpcr; 43c56480a8SDmitry Chagin __uint128_t vregs[32]; 44c56480a8SDmitry Chagin }; 45c56480a8SDmitry Chagin 46c56480a8SDmitry Chagin struct l_esr_context { 47c56480a8SDmitry Chagin struct _l_aarch64_ctx head; 48c56480a8SDmitry Chagin uint64_t esr; 49c56480a8SDmitry Chagin }; 50c56480a8SDmitry Chagin 51c56480a8SDmitry Chagin struct l_sigcontext { 52c56480a8SDmitry Chagin uint64_t fault_address; 53c56480a8SDmitry Chagin uint64_t regs[31]; 54c56480a8SDmitry Chagin uint64_t sp; 55c56480a8SDmitry Chagin uint64_t pc; 56c56480a8SDmitry Chagin uint64_t pstate; 57c56480a8SDmitry Chagin uint8_t __reserved[4096] __attribute__((__aligned__(16))); 58c56480a8SDmitry Chagin }; 59c56480a8SDmitry Chagin 60c56480a8SDmitry Chagin struct l_ucontext { 61c56480a8SDmitry Chagin unsigned long uc_flags; 62c56480a8SDmitry Chagin struct l_ucontext *uc_link; 63c56480a8SDmitry Chagin l_stack_t uc_stack; 64c56480a8SDmitry Chagin l_sigset_t uc_sigmask; 65c56480a8SDmitry Chagin uint8_t __glibc_hole[1024 / 8 - sizeof(l_sigset_t)]; 66c56480a8SDmitry Chagin struct l_sigcontext uc_sc; 67c56480a8SDmitry Chagin }; 68c56480a8SDmitry Chagin 69c56480a8SDmitry Chagin struct l_rt_sigframe { 70c56480a8SDmitry Chagin l_siginfo_t sf_si; 71c56480a8SDmitry Chagin struct l_ucontext sf_uc; 72c56480a8SDmitry Chagin } __attribute__((__aligned__(16))); 73c56480a8SDmitry Chagin 7421f24617SDmitry Chagin struct l_sigframe { 75c56480a8SDmitry Chagin struct l_rt_sigframe sf; 76c56480a8SDmitry Chagin /* frame_record */ 77c56480a8SDmitry Chagin uint64_t fp; 78c56480a8SDmitry Chagin uint64_t lr; 7921f24617SDmitry Chagin }; 8021f24617SDmitry Chagin 81*390c9ea0SDmitry Chagin #define LINUX_MINSIGSTKSZ roundup(sizeof(struct l_sigframe), 16) 82*390c9ea0SDmitry Chagin 8321f24617SDmitry Chagin #endif /* _ARM64_LINUX_SIGFRAME_H_ */ 84