/* Derived from the test case in http://sourceware.org/bugzilla/show_bug.cgi?id=838. */ #include #include #include #include #include #include #include #include "../test-skeleton.h" #ifdef __ARCH_USE_MMU__ static void sig_handler (int signum) { pid_t child = fork (); if (child == 0) exit (0); TEMP_FAILURE_RETRY (waitpid (child, NULL, 0)); } static int do_test (void) { pid_t parent = getpid (); struct sigaction action = { .sa_handler = sig_handler }; sigemptyset (&action.sa_mask); malloc (sizeof (int)); if (sigaction (SIGALRM, &action, NULL) != 0) { puts ("sigaction failed"); return 1; } /* Create a child that sends the signal to be caught. */ pid_t child = fork (); if (child == 0) { if (kill (parent, SIGALRM) == -1) perror ("kill"); exit (0); } TEMP_FAILURE_RETRY (waitpid (child, NULL, 0)); return 0; } #else static int do_test (void) { printf("Skipping test on non-mmu host!\n"); return EXIT_SUCCESS; } #endif #define TEST_FUNCTION do_test () #include "../test-skeleton.c"