summaryrefslogtreecommitdiffstats
path: root/usr/klibc/arch/sparc/sigaction.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/klibc/arch/sparc/sigaction.c')
-rw-r--r--usr/klibc/arch/sparc/sigaction.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/usr/klibc/arch/sparc/sigaction.c b/usr/klibc/arch/sparc/sigaction.c
new file mode 100644
index 0000000..5c31a52
--- /dev/null
+++ b/usr/klibc/arch/sparc/sigaction.c
@@ -0,0 +1,21 @@
+/*
+ * sigaction.c
+ */
+
+#include <signal.h>
+#include <sys/syscall.h>
+
+__extern void __sigreturn(void);
+__extern int ____rt_sigaction(int, const struct sigaction *, struct sigaction *,
+ void (*)(void), size_t);
+
+int __rt_sigaction(int sig, const struct sigaction *act,
+ struct sigaction *oact, size_t size)
+{
+ void (*restorer)(void);
+
+ restorer = (act && act->sa_flags & SA_RESTORER)
+ ? (void (*)(void))((uintptr_t)act->sa_restorer - 8)
+ : NULL;
+ return ____rt_sigaction(sig, act, oact, restorer, size);
+}