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 G_STATIC_ASSERT(TARGET_MCONTEXT_SIZE == sizeof(target_mcontext_t)); 31aa3a2428SWarner Losh G_STATIC_ASSERT(TARGET_UCONTEXT_SIZE == sizeof(target_ucontext_t)); 32aa3a2428SWarner Losh 33108fffe5SWarner Losh struct target_sigframe; 34108fffe5SWarner Losh 35108fffe5SWarner Losh abi_long set_sigtramp_args(CPUArchState *env, int sig, 36108fffe5SWarner Losh struct target_sigframe *frame, 37108fffe5SWarner Losh abi_ulong frame_addr, 38108fffe5SWarner Losh struct target_sigaction *ka); 39*1103d59cSWarner Losh abi_long get_mcontext(CPUArchState *env, target_mcontext_t *mcp, int flags); 40*1103d59cSWarner Losh abi_long set_mcontext(CPUArchState *env, target_mcontext_t *mcp, int srflag); 41*1103d59cSWarner Losh abi_long get_ucontext_sigreturn(CPUArchState *env, abi_ulong target_sf, 42108fffe5SWarner Losh abi_ulong *target_uc); 43108fffe5SWarner Losh 44aa3a2428SWarner Losh #endif /* TARGET_OS_UCONTEXT_H */ 45