1*4b169a6bSchristos /* 2*4b169a6bSchristos #progos: linux 3*4b169a6bSchristos */ 4*4b169a6bSchristos 5*4b169a6bSchristos #include <stdio.h> 6*4b169a6bSchristos #include <signal.h> 7*4b169a6bSchristos #include <stdlib.h> 8*4b169a6bSchristos 9*4b169a6bSchristos /* Like sig1.c, but using sigaction. */ 10*4b169a6bSchristos 11*4b169a6bSchristos void leave(int n,siginfo_t * info,void * x)12*4b169a6bSchristosleave (int n, siginfo_t *info, void *x) 13*4b169a6bSchristos { 14*4b169a6bSchristos abort (); 15*4b169a6bSchristos } 16*4b169a6bSchristos 17*4b169a6bSchristos int main(void)18*4b169a6bSchristosmain (void) 19*4b169a6bSchristos { 20*4b169a6bSchristos struct sigaction sa; 21*4b169a6bSchristos sa.sa_sigaction = leave; 22*4b169a6bSchristos sa.sa_flags = SA_RESTART | SA_SIGINFO; 23*4b169a6bSchristos sigemptyset (&sa.sa_mask); 24*4b169a6bSchristos 25*4b169a6bSchristos /* Check that the sigaction syscall (for signal) is interpreted, though 26*4b169a6bSchristos possibly ignored. */ 27*4b169a6bSchristos if (sigaction (SIGFPE, &sa, NULL) != 0) 28*4b169a6bSchristos abort (); 29*4b169a6bSchristos 30*4b169a6bSchristos printf ("pass\n"); 31*4b169a6bSchristos exit (0); 32*4b169a6bSchristos } 33