1aa3a2428SWarner Losh /* 2aa3a2428SWarner Losh * FreeBSD has a common ucontext definition for all architectures. 3aa3a2428SWarner Losh * 4aa3a2428SWarner Losh * Copyright 2021 Warner Losh <imp@bsdimp.com> 5aa3a2428SWarner Losh * 6aa3a2428SWarner Losh * SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause 7aa3a2428SWarner Losh */ 8aa3a2428SWarner Losh #ifndef TARGET_OS_UCONTEXT_H 9aa3a2428SWarner Losh #define TARGET_OS_UCONTEXT_H 10aa3a2428SWarner Losh 11aa3a2428SWarner Losh /* 12aa3a2428SWarner Losh * Defines the common bits for all of FreeBSD's architectures. Has to be 13aa3a2428SWarner Losh * included AFTER the MD target_mcontext_t is defined, however, so can't 14aa3a2428SWarner Losh * be in the grab-bag that is target_os_signal.h. 15aa3a2428SWarner Losh */ 16aa3a2428SWarner Losh 17aa3a2428SWarner Losh /* See FreeBSD's sys/ucontext.h */ 18aa3a2428SWarner Losh #define TARGET_MC_GET_CLEAR_RET 0x0001 19aa3a2428SWarner Losh 20aa3a2428SWarner Losh /* FreeBSD's sys/_ucontext.h structures */ 21aa3a2428SWarner Losh typedef struct target_ucontext { 22aa3a2428SWarner Losh target_sigset_t uc_sigmask; 23aa3a2428SWarner Losh target_mcontext_t uc_mcontext; 24aa3a2428SWarner Losh abi_ulong uc_link; 25aa3a2428SWarner Losh target_stack_t uc_stack; 26aa3a2428SWarner Losh int32_t uc_flags; 27aa3a2428SWarner Losh int32_t __spare__[4]; 28aa3a2428SWarner Losh } target_ucontext_t; 29aa3a2428SWarner Losh 30aa3a2428SWarner Losh #ifdef TARGET_MCONTEXT_SIZE 31aa3a2428SWarner Losh G_STATIC_ASSERT(TARGET_MCONTEXT_SIZE == sizeof(target_mcontext_t)); 32aa3a2428SWarner Losh G_STATIC_ASSERT(TARGET_UCONTEXT_SIZE == sizeof(target_ucontext_t)); 33aa3a2428SWarner Losh #endif /* TARGET_MCONTEXT_SIZE */ 34aa3a2428SWarner Losh 35*108fffe5SWarner Losh struct target_sigframe; 36*108fffe5SWarner Losh 37*108fffe5SWarner Losh abi_long set_sigtramp_args(CPUArchState *env, int sig, 38*108fffe5SWarner Losh struct target_sigframe *frame, 39*108fffe5SWarner Losh abi_ulong frame_addr, 40*108fffe5SWarner Losh struct target_sigaction *ka); 41*108fffe5SWarner Losh abi_long get_mcontext(CPUArchState *regs, target_mcontext_t *mcp, int flags); 42*108fffe5SWarner Losh abi_long set_mcontext(CPUArchState *regs, target_mcontext_t *mcp, int srflag); 43*108fffe5SWarner Losh abi_long get_ucontext_sigreturn(CPUArchState *regs, abi_ulong target_sf, 44*108fffe5SWarner Losh abi_ulong *target_uc); 45*108fffe5SWarner Losh 46aa3a2428SWarner Losh #endif /* TARGET_OS_UCONTEXT_H */ 47