Merge 1447 "Fix call to rt_sigaction"

> Fix call to rt_sigaction
> 
> Despite the fact that many places imply that sigaction and rt_sigaction
> are essentially the same, rt_sigaction's signature is actually
> different-- it takes the size of the kernel's sigset_t as an extra argument.
> 
> BUG=473973
> 

TBR=cjhopman@chromium.org

Review URL: https://breakpad.appspot.com/5784002

Cr-Mirrored-From: https://chromium.googlesource.com/breakpad/breakpad
Cr-Mirrored-Commit: 80fd81452d0331467a0e5910e57294622cfb2f5e
diff --git a/client/linux/handler/exception_handler.cc b/client/linux/handler/exception_handler.cc
index 3ddbe66..6a8849d 100644
--- a/client/linux/handler/exception_handler.cc
+++ b/client/linux/handler/exception_handler.cc
@@ -195,12 +195,12 @@
   // to SIG_DFL is ignored. In that case, an infinite loop is entered as the
   // signal is repeatedly sent to breakpad's signal handler.
   // To work around this, directly call the system's sigaction.
-  struct sigaction sa;
+  struct kernel_sigaction sa;
   memset(&sa, 0, sizeof(sa));
-  sigemptyset(&sa.sa_mask);
-  sa.sa_handler = SIG_DFL;
+  sys_sigemptyset(&sa.sa_mask);
+  sa.sa_handler_ = SIG_DFL;
   sa.sa_flags = SA_RESTART;
-  syscall(__NR_rt_sigaction, sig, &sa, NULL);
+  sys_rt_sigaction(sig, &sa, NULL, sizeof(kernel_sigset_t));
 #else
   signal(sig, SIG_DFL);
 #endif