Index: sys/arm64/linux/linux_machdep.c =================================================================== --- sys/arm64/linux/linux_machdep.c +++ sys/arm64/linux/linux_machdep.c @@ -37,6 +37,7 @@ #include #include #include +#include #include @@ -124,13 +125,25 @@ return (linux_madvise_common(td, PTROUT(uap->addr), uap->len, uap->behav)); } -/* LINUXTODO: implement arm64 linux_rt_sigsuspend */ int linux_rt_sigsuspend(struct thread *td, struct linux_rt_sigsuspend_args *uap) { + l_sigset_t lmask; + sigset_t sigmask; + int error; - LIN_SDT_PROBE0(machdep, linux_rt_sigsuspend, todo); - return (EDOOFUS); + LINUX_CTR2(rt_sigsuspend, "%p, %ld", + uap->newset, uap->sigsetsize); + + if (uap->sigsetsize != sizeof(l_sigset_t)) + return (EINVAL); + + error = copyin(uap->newset, &lmask, sizeof(l_sigset_t)); + if (error) + return (error); + + linux_to_bsd_sigset(&lmask, &sigmask); + return (kern_sigsuspend(td, sigmask)); } /* LINUXTODO: implement arm64 linux_sigaltstack */