]> xenbits.xensource.com Git - unikraft/unikraft.git/commitdiff
lib/posix-process/signals: Add libc wrappers for POSIX sigsetops
authorMichalis Pappas <michalis@unikraft.io>
Mon, 24 Mar 2025 05:11:27 +0000 (06:11 +0100)
committerUnikraft Bot <monkey@unikraft.io>
Wed, 26 Mar 2025 08:05:34 +0000 (08:05 +0000)
Add libc wrappers for signal set operations. For more info
see sigsetops(3).

Signed-off-by: Michalis Pappas <michalis@unikraft.io>
Reviewed-by: Ioan-Teodor Teugea <ioan_teodor.teugea@stud.acs.upb.ro>
Reviewed-by: Sergiu Moga <sergiu@unikraft.io>
Reviewed-by: Andrei Tatar <andrei@unikraft.io>
Approved-by: Andrei Tatar <andrei@unikraft.io>
GitHub-Closes: #1248

lib/posix-process/Makefile.uk
lib/posix-process/exportsyms.uk
lib/posix-process/signal/sigset.c [new file with mode: 0644]

index 8bcc645015bbaebf1cda3f6af3c3f5f047d10abd..1d5b7e00d2c0b694d02fbc9a05539d244fb005b8 100644 (file)
@@ -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
index f235a298312e26985158f5682940dfd9d64ec000..56ec39f6953b8700d36f11b6f292e12a7752ce72 100644 (file)
@@ -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 (file)
index 0000000..f3b0463
--- /dev/null
@@ -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 <errno.h>
+#include <signal.h>
+
+#include <uk/arch/lcpu.h> /* 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 */