From aa3a2428308fe6831ce4b2f9d28ff8572b74f6c4 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Fri, 29 Oct 2021 08:39:01 -0600 Subject: bsd-user/freebsd: Create common target_os_ucontext.h file FreeBSD has a MI ucontext structure that contains the MD mcontext machine state and other things that are machine independent. Create an include file for all the ucontext stuff. It needs to be included in the arch specific files after target_mcontext is defined. This is largely copied from sys/_ucontext.h with the comments about layout removed because we don't support ancient FreeBSD binaries. Signed-off-by: Warner Losh Reviewed-by: Richard Henderson --- bsd-user/freebsd/target_os_ucontext.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 bsd-user/freebsd/target_os_ucontext.h (limited to 'bsd-user/freebsd/target_os_ucontext.h') diff --git a/bsd-user/freebsd/target_os_ucontext.h b/bsd-user/freebsd/target_os_ucontext.h new file mode 100644 index 0000000000..1d0c3c4e65 --- /dev/null +++ b/bsd-user/freebsd/target_os_ucontext.h @@ -0,0 +1,35 @@ +/* + * FreeBSD has a common ucontext definition for all architectures. + * + * Copyright 2021 Warner Losh + * + * SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause + */ +#ifndef TARGET_OS_UCONTEXT_H +#define TARGET_OS_UCONTEXT_H + +/* + * Defines the common bits for all of FreeBSD's architectures. Has to be + * included AFTER the MD target_mcontext_t is defined, however, so can't + * be in the grab-bag that is target_os_signal.h. + */ + +/* See FreeBSD's sys/ucontext.h */ +#define TARGET_MC_GET_CLEAR_RET 0x0001 + +/* FreeBSD's sys/_ucontext.h structures */ +typedef struct target_ucontext { + target_sigset_t uc_sigmask; + target_mcontext_t uc_mcontext; + abi_ulong uc_link; + target_stack_t uc_stack; + int32_t uc_flags; + int32_t __spare__[4]; +} target_ucontext_t; + +#ifdef TARGET_MCONTEXT_SIZE +G_STATIC_ASSERT(TARGET_MCONTEXT_SIZE == sizeof(target_mcontext_t)); +G_STATIC_ASSERT(TARGET_UCONTEXT_SIZE == sizeof(target_ucontext_t)); +#endif /* TARGET_MCONTEXT_SIZE */ + +#endif /* TARGET_OS_UCONTEXT_H */ -- cgit 1.4.1 From 108fffe53601d46c38efd44d4094bbb211cb73e3 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Fri, 5 Nov 2021 10:55:35 -0600 Subject: bsd-user/target_os_signal.h: Move signal prototypes to target_os_ucontext.h Switch to the CPUArchState typedef and move target-provided prototypes to target_os_ucontext.h. Signed-off-by: Warner Losh Reviewed-by: Richard Henderson --- bsd-user/freebsd/target_os_ucontext.h | 11 +++++++++++ bsd-user/i386/target_arch_signal.h | 9 --------- bsd-user/x86_64/target_arch_signal.h | 9 --------- 3 files changed, 11 insertions(+), 18 deletions(-) (limited to 'bsd-user/freebsd/target_os_ucontext.h') diff --git a/bsd-user/freebsd/target_os_ucontext.h b/bsd-user/freebsd/target_os_ucontext.h index 1d0c3c4e65..dd61aec7cc 100644 --- a/bsd-user/freebsd/target_os_ucontext.h +++ b/bsd-user/freebsd/target_os_ucontext.h @@ -32,4 +32,15 @@ G_STATIC_ASSERT(TARGET_MCONTEXT_SIZE == sizeof(target_mcontext_t)); G_STATIC_ASSERT(TARGET_UCONTEXT_SIZE == sizeof(target_ucontext_t)); #endif /* TARGET_MCONTEXT_SIZE */ +struct target_sigframe; + +abi_long set_sigtramp_args(CPUArchState *env, int sig, + struct target_sigframe *frame, + abi_ulong frame_addr, + struct target_sigaction *ka); +abi_long get_mcontext(CPUArchState *regs, target_mcontext_t *mcp, int flags); +abi_long set_mcontext(CPUArchState *regs, target_mcontext_t *mcp, int srflag); +abi_long get_ucontext_sigreturn(CPUArchState *regs, abi_ulong target_sf, + abi_ulong *target_uc); + #endif /* TARGET_OS_UCONTEXT_H */ diff --git a/bsd-user/i386/target_arch_signal.h b/bsd-user/i386/target_arch_signal.h index 982c7035c7..279dadc22c 100644 --- a/bsd-user/i386/target_arch_signal.h +++ b/bsd-user/i386/target_arch_signal.h @@ -88,13 +88,4 @@ struct target_sigframe { uint32_t __spare__[2]; }; -abi_long set_sigtramp_args(CPUX86State *env, int sig, - struct target_sigframe *frame, - abi_ulong frame_addr, - struct target_sigaction *ka); -abi_long get_mcontext(CPUX86State *regs, target_mcontext_t *mcp, int flags); -abi_long set_mcontext(CPUX86State *regs, target_mcontext_t *mcp, int srflag); -abi_long get_ucontext_sigreturn(CPUX86State *regs, abi_ulong target_sf, - abi_ulong *target_uc); - #endif /* TARGET_ARCH_SIGNAL_H */ diff --git a/bsd-user/x86_64/target_arch_signal.h b/bsd-user/x86_64/target_arch_signal.h index b39b70466e..b4a0ebf2bd 100644 --- a/bsd-user/x86_64/target_arch_signal.h +++ b/bsd-user/x86_64/target_arch_signal.h @@ -96,13 +96,4 @@ struct target_sigframe { uint32_t __spare__[2]; }; -abi_long set_sigtramp_args(CPUX86State *env, int sig, - struct target_sigframe *frame, - abi_ulong frame_addr, - struct target_sigaction *ka); -abi_long get_mcontext(CPUX86State *regs, target_mcontext_t *mcp, int flags); -abi_long set_mcontext(CPUX86State *regs, target_mcontext_t *mcp, int srflag); -abi_long get_ucontext_sigreturn(CPUX86State *regs, abi_ulong target_sf, - abi_ulong *target_uc); - #endif /* !TARGET_ARCH_SIGNAL_H_ */ -- cgit 1.4.1 From ca4fc704a40b5ad36a7ced03331224293888fafb Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Thu, 4 Nov 2021 17:21:48 -0600 Subject: bsd-user/freebsd/target_os_ucontext.h: Require TARGET_*CONTEXT_SIZE Now that all architecutres define TARGET_[MU]CONTEXT_SIZE, enforce requiring them and always check the sizeof target_{u,m}context_t sizes. Signed-off-by: Warner Losh Reviewed-by: Richard Henderson --- bsd-user/freebsd/target_os_ucontext.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'bsd-user/freebsd/target_os_ucontext.h') diff --git a/bsd-user/freebsd/target_os_ucontext.h b/bsd-user/freebsd/target_os_ucontext.h index dd61aec7cc..41b28b2c15 100644 --- a/bsd-user/freebsd/target_os_ucontext.h +++ b/bsd-user/freebsd/target_os_ucontext.h @@ -27,10 +27,8 @@ typedef struct target_ucontext { int32_t __spare__[4]; } target_ucontext_t; -#ifdef TARGET_MCONTEXT_SIZE G_STATIC_ASSERT(TARGET_MCONTEXT_SIZE == sizeof(target_mcontext_t)); G_STATIC_ASSERT(TARGET_UCONTEXT_SIZE == sizeof(target_ucontext_t)); -#endif /* TARGET_MCONTEXT_SIZE */ struct target_sigframe; -- cgit 1.4.1