From 1a124e61f3a0975975fe618be0f254246c92c63a Mon Sep 17 00:00:00 2001 From: Michalis Pappas Date: Mon, 24 Mar 2025 06:11:27 +0100 Subject: [PATCH] lib/posix-process/signals: Add libc wrappers for POSIX sigsetops Add libc wrappers for signal set operations. For more info see sigsetops(3). Signed-off-by: Michalis Pappas Reviewed-by: Ioan-Teodor Teugea Reviewed-by: Sergiu Moga Reviewed-by: Andrei Tatar Approved-by: Andrei Tatar GitHub-Closes: #1248 --- lib/posix-process/Makefile.uk | 1 + lib/posix-process/exportsyms.uk | 5 +++ lib/posix-process/signal/sigset.c | 56 +++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 lib/posix-process/signal/sigset.c diff --git a/lib/posix-process/Makefile.uk b/lib/posix-process/Makefile.uk index 8bcc64501..1d5b7e00d 100644 --- a/lib/posix-process/Makefile.uk +++ b/lib/posix-process/Makefile.uk @@ -19,6 +19,7 @@ LIBPOSIX_PROCESS_SRCS-y += $(LIBPOSIX_PROCESS_BASE)/process.c LIBPOSIX_PROCESS_SRCS-y += $(LIBPOSIX_PROCESS_BASE)/wait.c LIBPOSIX_PROCESS_SRCS-$(CONFIG_LIBPOSIX_PROCESS_SIGNAL) += $(LIBPOSIX_PROCESS_BASE)/signal/signal.c +LIBPOSIX_PROCESS_SRCS-$(CONFIG_LIBPOSIX_PROCESS_SIGNAL) += $(LIBPOSIX_PROCESS_BASE)/signal/sigset.c LIBPOSIX_PROCESS_SRCS-$(CONFIG_LIBPOSIX_PROCESS_SIGNAL) += $(LIBPOSIX_PROCESS_BASE)/arch/$(CONFIG_UK_ARCH)/ucontext.c LIBPOSIX_PROCESS_SRCS-$(CONFIG_LIBPOSIX_PROCESS_SIGNAL) += $(LIBPOSIX_PROCESS_BASE)/arch/$(CONFIG_UK_ARCH)/signal.S|arch LIBPOSIX_PROCESS_SRCS-$(CONFIG_LIBPOSIX_PROCESS_SIGNAL) += $(LIBPOSIX_PROCESS_BASE)/signal/deliver.c diff --git a/lib/posix-process/exportsyms.uk b/lib/posix-process/exportsyms.uk index f235a2983..56ec39f69 100644 --- a/lib/posix-process/exportsyms.uk +++ b/lib/posix-process/exportsyms.uk @@ -45,6 +45,11 @@ clone vfork kill pause +sigaddset sigaltstack +sigdelset +sigemptyset +sigfillset +sigismember sigprocmask tgkill diff --git a/lib/posix-process/signal/sigset.c b/lib/posix-process/signal/sigset.c new file mode 100644 index 000000000..f3b0463a6 --- /dev/null +++ b/lib/posix-process/signal/sigset.c @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ +/* Copyright (c) 2023, Unikraft GmbH and The Unikraft Authors. + * Licensed under the BSD-3-Clause License (the "License"). + * You may not use this file except in compliance with the License. + */ + +#include +#include + +#include /* unlikely */ + +#include "sigset.h" + +#if !HAVE_LIBC +int sigaddset(sigset_t *set, int signo) +{ + if (unlikely(signo <= 0 || signo >= NSIG)) { + errno = EINVAL; + return -1; + } + uk_sigaddset(set, signo); + return 0; +} + +int sigdelset(sigset_t *set, int signo) +{ + if (unlikely(signo <= 0 || signo >= NSIG)) { + errno = EINVAL; + return -1; + } + uk_sigdelset(set, signo); + return 0; +} + +int sigemptyset(sigset_t *set) +{ + uk_sigemptyset(set); + return 0; +} + +int sigfillset(sigset_t *set) +{ + uk_sigfillset(set); + return 0; +} + +int sigismember(const sigset_t *set, int signo) +{ + if (unlikely(signo <= 0 || signo >= NSIG)) { + errno = EINVAL; + return -1; + } + + return uk_sigismember(set, signo); +} +#endif /* !HAVE_LIBC */ -- 2.39.5