From 5dcb9c01dc2ff54b9a67d4109dff1621eac3db7e Mon Sep 17 00:00:00 2001 From: Lubos Dolezel Date: Wed, 26 Feb 2020 17:16:44 +0100 Subject: [PATCH] Implement sys_sigpending --- src/kernel/emulation/linux/CMakeLists.txt | 1 + .../emulation/linux/signal/sigpending.c | 22 +++++++++++++++++++ .../emulation/linux/signal/sigpending.h | 8 +++++++ src/kernel/emulation/linux/syscalls.c | 2 ++ 4 files changed, 33 insertions(+) create mode 100644 src/kernel/emulation/linux/signal/sigpending.c create mode 100644 src/kernel/emulation/linux/signal/sigpending.h diff --git a/src/kernel/emulation/linux/CMakeLists.txt b/src/kernel/emulation/linux/CMakeLists.txt index 8efd41e4a..896fc93a6 100644 --- a/src/kernel/emulation/linux/CMakeLists.txt +++ b/src/kernel/emulation/linux/CMakeLists.txt @@ -147,6 +147,7 @@ set(emulation_sources signal/sigprocmask.c signal/sig_restorer.S signal/sigsuspend.c + signal/sigpending.c signal/sigexc.c signal/sigwait.c misc/ptrace.c diff --git a/src/kernel/emulation/linux/signal/sigpending.c b/src/kernel/emulation/linux/signal/sigpending.c new file mode 100644 index 000000000..0f9bcd38c --- /dev/null +++ b/src/kernel/emulation/linux/signal/sigpending.c @@ -0,0 +1,22 @@ +#include "sigpending.h" +#include "../base.h" +#include "../errno.h" +#include "duct_signals.h" +#include +#include + +long sys_sigpending(sigset_t set) +{ + linux_sigset_t set_linux; + int ret; + + sigset_bsd_to_linux(&set, &set_linux); + + ret = LINUX_SYSCALL(__NR_rt_sigpending, &set_linux, 8); + + if (ret < 0) + ret = errno_linux_to_bsd(ret); + + return ret; +} + diff --git a/src/kernel/emulation/linux/signal/sigpending.h b/src/kernel/emulation/linux/signal/sigpending.h new file mode 100644 index 000000000..733a55667 --- /dev/null +++ b/src/kernel/emulation/linux/signal/sigpending.h @@ -0,0 +1,8 @@ +#ifndef LINUX_SIGPENDING_H +#define LINUX_SIGPENDING_H +#include "duct_signals.h" + +long sys_sigpending(sigset_t set); + +#endif + diff --git a/src/kernel/emulation/linux/syscalls.c b/src/kernel/emulation/linux/syscalls.c index 8f727163f..3f08323dc 100644 --- a/src/kernel/emulation/linux/syscalls.c +++ b/src/kernel/emulation/linux/syscalls.c @@ -94,6 +94,7 @@ #include "signal/sigreturn.h" #include "signal/sigprocmask.h" #include "signal/sigsuspend.h" +#include "signal/sigpending.h" #include "signal/sigwait.h" #include "process/vfork.h" #include "process/wait4.h" @@ -244,6 +245,7 @@ void* __bsd_syscall_table[600] = { [48] = sys_sigprocmask, [49] = sys_getlogin, [50] = sys_setlogin, + [52] = sys_sigpending, [53] = sys_sigaltstack, [54] = sys_ioctl, [55] = sys_reboot, -- 2.51.2