summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/s390/kernel_sigaction.h
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv/linux/s390/kernel_sigaction.h')
-rw-r--r--sysdeps/unix/sysv/linux/s390/kernel_sigaction.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/kernel_sigaction.h b/sysdeps/unix/sysv/linux/s390/kernel_sigaction.h
new file mode 100644
index 0000000000..7a6a2c4f29
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/s390/kernel_sigaction.h
@@ -0,0 +1,32 @@
+#include <bits/types/siginfo_t.h>
+
+#define SA_RESTORER 0x04000000
+
+/* This is the sigaction structure from the Linux 3.2 kernel. */
+struct kernel_sigaction
+{
+ union
+ {
+ __sighandler_t _sa_handler;
+ void (*_sa_sigaction)(int, siginfo_t *, void *);
+ } _u;
+#define k_sa_handler _u._sa_handler
+ /* The 'struct sigaction' definition in s390 kernel header
+ arch/s390/include/uapi/asm/signal.h is used for __NR_rt_sigaction
+ on 64 bits and for __NR_sigaction for 31 bits.
+
+ The expected layout for __NR_rt_sigaction for 31 bits is either
+ 'struct sigaction' from include/linux/signal_types.h or
+ 'struct compat_sigaction' from include/linux/compat.h.
+
+ So for __NR_rt_sigaction we can use the same layout for both s390x
+ and s390. */
+ unsigned long sa_flags;
+ void (*sa_restorer)(void);
+ sigset_t sa_mask;
+};
+
+#define SET_SA_RESTORER(kact, act) \
+ (kact)->sa_restorer = (act)->sa_restorer
+#define RESET_SA_RESTORER(act, kact) \
+ (act)->sa_restorer = (kact)->sa_restorer