Commit c0117c7628 for qemu.org
commit c0117c76285712ef8d135efae9991f821d602051
Author: Warner Losh <imp@bsdimp.com>
Date: Wed May 27 21:26:37 2026 -0600
bsd-user: Implement sigfastblock
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Signed-off-by: Warner Losh <imp@bsdimp.com>
diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c
index e87924fbb5..b5178f298e 100644
--- a/bsd-user/freebsd/os-syscall.c
+++ b/bsd-user/freebsd/os-syscall.c
@@ -97,6 +97,7 @@ safe_syscall3(ssize_t, sendmsg, int, s, const struct msghdr *, msg, int, flags);
safe_syscall1(int, thr_suspend, struct timespec *, timeout);
safe_syscall5(int, _umtx_op, void *, obj, int, op, unsigned long, val, void *,
uaddr, void *, uaddr2);
+safe_syscall2(int, sigfastblock, int, cmd, void *, ptr);
/* used in os-time */
safe_syscall2(int, nanosleep, const struct timespec *, rqtp, struct timespec *,
@@ -1175,6 +1176,10 @@ static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1,
ret = do_freebsd__umtx_op(arg1, arg2, arg3, arg4, arg5);
break;
+ case TARGET_FREEBSD_NR_sigfastblock: /* internal */
+ ret = do_freebsd_sigfastblock(arg1, arg2);
+ break;
+
/*
* ioctl(2)
*/
diff --git a/bsd-user/freebsd/os-thread.h b/bsd-user/freebsd/os-thread.h
index 6552c60337..dfb22e7cc2 100644
--- a/bsd-user/freebsd/os-thread.h
+++ b/bsd-user/freebsd/os-thread.h
@@ -17,6 +17,7 @@
int safe_thr_suspend(struct timespec *timeout);
int safe__umtx_op(void *, int, unsigned long, void *, void *);
+int safe_sigfastblock(int, void *);
#if HOST_BIG_ENDIAN == TARGET_BIG_ENDIAN && \
(TARGET_ABI_BITS == HOST_LONG_BITS || defined(UMTX_OP__32BIT))
@@ -593,4 +594,14 @@ static inline abi_long do_freebsd__umtx_op(abi_ulong obj, int op, abi_ulong val,
return ret;
}
+static inline abi_long do_freebsd_sigfastblock(abi_long cmd, abi_long ptr)
+{
+ void *hostptr = g2h_untagged(ptr);
+
+ if (hostptr == NULL) {
+ return -TARGET_EFAULT;
+ }
+ return get_errno(safe_sigfastblock(cmd, hostptr));
+}
+
#endif /* FREEBSD_OS_THREAD_H */