1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <errno.h> 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h> 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <signal.h> 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdlib.h> 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstatic void 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownabend (int sig) 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown printf ("Abended on signal %d\n", sig); 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown exit (2); 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownmain (void) 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown struct sigaction sa; 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int i; 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown int rc; 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown for (i = 1; i <= 65; i++) { 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Skip signals 32 and 33, since these are used by LinuxThreads. Some 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // glibc versions do not invoke the sigaction system call for these 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // signals. 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // skip signals 63 and 64: some systems say "warning, ignored attempt 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // to catch 32 because it's used internally by Valgrind", others say 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // "invalid argument". 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (i == 32 || i == 33 || i == 63 || i == 64) { 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown continue; 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } // different systems 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown sa.sa_flags = 0; 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown sigemptyset( &sa.sa_mask ); 33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown sa.sa_handler = abend; 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr,"setting signal %d: ", i); 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rc = sigaction (i /*SIGKILL*/, &sa, NULL); 36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (rc) perror (""); 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown else fprintf(stderr,"Success\n"); 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr,"getting signal %d: ", i); 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown rc = sigaction (i /*SIGKILL*/, NULL, &sa); 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown if (rc) perror (""); 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown else fprintf(stderr,"Success\n"); 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown fprintf(stderr,"\n"); 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown return 0; 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 46