aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/s390/include/uapi/asm/signal.h23
1 files changed, 16 insertions, 7 deletions
diff --git a/arch/s390/include/uapi/asm/signal.h b/arch/s390/include/uapi/asm/signal.h
index c57f9d28d894..9a14a611ed82 100644
--- a/arch/s390/include/uapi/asm/signal.h
+++ b/arch/s390/include/uapi/asm/signal.h
@@ -97,22 +97,31 @@ typedef unsigned long sigset_t;
97#include <asm-generic/signal-defs.h> 97#include <asm-generic/signal-defs.h>
98 98
99#ifndef __KERNEL__ 99#ifndef __KERNEL__
100/* Here we must cater to libcs that poke about in kernel headers. */
101 100
101/*
102 * There are two system calls in regard to sigaction, sys_rt_sigaction
103 * and sys_sigaction. Internally the kernel uses the struct old_sigaction
104 * for the older sys_sigaction system call, and the kernel version of the
105 * struct sigaction for the newer sys_rt_sigaction.
106 *
107 * The uapi definition for struct sigaction has made a strange distinction
108 * between 31-bit and 64-bit in the past. For 64-bit the uapi structure
109 * looks like the kernel struct sigaction, but for 31-bit it used to
110 * look like the kernel struct old_sigaction. That practically made the
111 * structure unusable for either system call. To get around this problem
112 * the glibc always had its own definitions for the sigaction structures.
113 *
114 * The current struct sigaction uapi definition below is suitable for the
115 * sys_rt_sigaction system call only.
116 */
102struct sigaction { 117struct sigaction {
103 union { 118 union {
104 __sighandler_t _sa_handler; 119 __sighandler_t _sa_handler;
105 void (*_sa_sigaction)(int, struct siginfo *, void *); 120 void (*_sa_sigaction)(int, struct siginfo *, void *);
106 } _u; 121 } _u;
107#ifndef __s390x__ /* lovely */
108 sigset_t sa_mask;
109 unsigned long sa_flags;
110 void (*sa_restorer)(void);
111#else /* __s390x__ */
112 unsigned long sa_flags; 122 unsigned long sa_flags;
113 void (*sa_restorer)(void); 123 void (*sa_restorer)(void);
114 sigset_t sa_mask; 124 sigset_t sa_mask;
115#endif /* __s390x__ */
116}; 125};
117 126
118#define sa_handler _u._sa_handler 127#define sa_handler _u._sa_handler