result = __syscall_sigaction (sig, act ? &k_sigact : 0, oact ? &k_osigact : 0);
result = INLINE_SYSCALL (sigaction, 3, sig, act ? &k_sigact : 0, oact ? &k_osigact : 0);
__sigaction (sig, act, oact)     int sig;     const struct sigaction *act;     struct sigaction *oact;{  struct old_kernel_sigaction k_sigact, k_osigact;  int result;  /* First try the RT signals.  */  if (!__libc_missing_rt_sigs)    {      struct kernel_sigaction kact, koact;      int saved_errno = errno;      if (act)	{	  kact.k_sa_handler = act->sa_handler;	  memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));	  kact.sa_flags = act->sa_flags;#ifdef HAVE_SA_RESTORER	  kact.sa_restorer = act->sa_restorer;#endif	}      /* XXX The size argument hopefully will have to be changed to the	 real size of the user-level sigset_t.  */      result = __syscall_rt_sigaction (sig, act ? &kact : 0,				       oact ? &koact : 0, _NSIG / 8);      if (result >= 0 || errno != ENOSYS)	{	  if (oact && result >= 0)	    {	      oact->sa_handler = koact.k_sa_handler;	      memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));	      oact->sa_flags = koact.sa_flags;#ifdef HAVE_SA_RESTORER	      oact->sa_restorer = koact.sa_restorer;#endif	    }	  return result;	}      __set_errno (saved_errno);      __libc_missing_rt_sigs = 1;    }  if (act)    {      k_sigact.k_sa_handler = act->sa_handler;      k_sigact.sa_mask = act->sa_mask.__val[0];      k_sigact.sa_flags = act->sa_flags;#ifdef HAVE_SA_RESTORER      k_sigact.sa_restorer = act->sa_restorer;#endif    }  result = __syscall_sigaction (sig, act ? &k_sigact : 0,			       oact ? &k_osigact : 0);  if (oact && result >= 0)    {      oact->sa_handler = k_osigact.k_sa_handler;      oact->sa_mask.__val[0] = k_osigact.sa_mask;      oact->sa_flags = k_osigact.sa_flags;#ifdef HAVE_SA_RESTORER      oact->sa_restorer = k_osigact.sa_restorer;#endif    }  return result;}