Only have one copy of the kernel_sigset_t hack, and add more tests.

Change-Id: I377522fcba6fb4b5fd2754ab15b091014bd7c16f
diff --git a/libc/bionic/signalfd.cpp b/libc/bionic/signalfd.cpp
index 51fae83..b7e6474 100644
--- a/libc/bionic/signalfd.cpp
+++ b/libc/bionic/signalfd.cpp
@@ -28,27 +28,11 @@
 
 #include <sys/signalfd.h>
 
-/* Despite the fact that our kernel headers define sigset_t explicitly
- * as a 32-bit integer, the kernel system call really expects a 64-bit
- * bitmap for the signal set, or more exactly an array of two-32-bit
- * values (see $KERNEL/arch/$ARCH/include/asm/signal.h for details).
- *
- * Unfortunately, we cannot fix the sigset_t definition without breaking
- * the C library ABI, so perform a little runtime translation here.
- */
-typedef union {
-    sigset_t   bionic;
-    uint32_t   kernel[2];
-} kernel_sigset_t;
+#include <private/kernel_sigset_t.h>
 
-extern "C" int signalfd4(int fd, kernel_sigset_t *mask, size_t sizemask, int flags);
+extern "C" int signalfd4(int fd, kernel_sigset_t* mask, size_t sizemask, int flags);
 
-int signalfd(int fd, const sigset_t *mask, int flags)
-{
-    kernel_sigset_t in_set;
-    in_set.kernel[0] = in_set.kernel[1] = 0;
-
-    in_set.bionic = *mask;
-
-    return signalfd4(fd, &in_set, sizeof(in_set), flags);
+int signalfd(int fd, const sigset_t* mask, int flags) {
+  kernel_sigset_t in_set(mask);
+  return signalfd4(fd, &in_set, sizeof(in_set), flags);
 }