POSIX says `sigaction::sa_flags` is `int`.

Bug: N/A
Test: builds
Change-Id: I8f682a6a075b0c27917d79414f013f928c75394d
diff --git a/libc/include/signal.h b/libc/include/signal.h
index ece2916..d9c9ee2 100644
--- a/libc/include/signal.h
+++ b/libc/include/signal.h
@@ -37,17 +37,13 @@
 #include <bits/timespec.h>
 #include <limits.h>
 
-#if defined(__LP64__) || defined(__mips__)
-/* For 64-bit (and mips), the kernel's struct sigaction doesn't match the POSIX one,
- * so we need to expose our own and translate behind the scenes. */
-#  define sigaction __kernel_sigaction
-#  include <linux/signal.h>
-#  undef sigaction
-#else
-/* For 32-bit, we're stuck with the definitions we already shipped,
+/* For 64-bit (and mips), the kernel's struct sigaction doesn't match the
+ * POSIX one, so we need to expose our own and translate behind the scenes.
+ * For 32-bit, we're stuck with the definitions we already shipped,
  * even though they contain a sigset_t that's too small. */
-#  include <linux/signal.h>
-#endif
+#define sigaction __kernel_sigaction
+#include <linux/signal.h>
+#undef sigaction
 
 #include <sys/ucontext.h>
 #define __BIONIC_HAVE_UCONTEXT_T
@@ -87,7 +83,7 @@
 #if defined(__LP64__)
 
 struct sigaction {
-  unsigned int sa_flags;
+  int sa_flags;
   union {
     sighandler_t sa_handler;
     void (*sa_sigaction)(int, struct siginfo*, void*);
@@ -99,7 +95,7 @@
 #elif defined(__mips__)
 
 struct sigaction {
-  unsigned int sa_flags;
+  int sa_flags;
   union {
     sighandler_t sa_handler;
     void (*sa_sigaction) (int, struct siginfo*, void*);
@@ -107,6 +103,18 @@
   sigset_t sa_mask;
 };
 
+#else
+
+struct sigaction {
+  union {
+    sighandler_t _sa_handler;
+    void (*_sa_sigaction)(int, struct siginfo*, void*);
+  } _u;
+  sigset_t sa_mask;
+  int sa_flags;
+  void (*sa_restorer)(void);
+};
+
 #endif
 
 int sigaction(int __signal, const struct sigaction* __new_action, struct sigaction* __old_action);