-/* This is the sigaction structure from the Linux 2.1.20 kernel. */
+#ifndef _KERNEL_SIGACTION_H
+# define _KERNEL_SIGACTION_H
-#define HAVE_SA_RESTORER
+#ifdef SA_RESTORER
+# define HAS_SA_RESTORER 1
+#endif
-struct old_kernel_sigaction {
- __sighandler_t k_sa_handler;
- unsigned long sa_mask;
- unsigned long sa_flags;
- void (*sa_restorer) (void);
+/* This is the sigaction structure from the Linux 3.2 kernel. */
+struct kernel_sigaction
+{
+ __sighandler_t k_sa_handler;
+ unsigned long sa_flags;
+#ifdef HAS_SA_RESTORER
+ void (*sa_restorer) (void);
+#endif
+ /* glibc sigset is larger than kernel expected one, however sigaction
+ passes the kernel expected size on rt_sigaction syscall. */
+ sigset_t sa_mask;
};
-/* This is the sigaction structure from the Linux 2.1.68 kernel. */
+#ifndef SET_SA_RESTORER
+# define SET_SA_RESTORER(kact, act)
+#endif
+#ifndef RESET_SA_RESTORER
+# define RESET_SA_RESTORER(act, kact)
+#endif
-struct kernel_sigaction {
- __sighandler_t k_sa_handler;
- unsigned long sa_flags;
- void (*sa_restorer) (void);
- sigset_t sa_mask;
-};
+#endif