1 /* 2 3 * Copyright (c) 2002-2003, Intel Corporation. All rights reserved. 4 * Created by: rusty.lynch REMOVE-THIS AT intel DOT com 5 * This file is licensed under the GPL license. For the full content 6 * of this license, see the COPYING file at the top level of this 7 * source tree. 8 9 Test case for assertion #12 of the sigaction system call that verifies 10 signal-catching functions are executed on the current stack if the 11 SA_ONSTACK flag is set in the sigaction.sa_flags parameter to the 12 sigaction function call, but a new stack has not be set by sigaltstack(). 13 14 NOTE: This test case does not attempt to verify the proper operation 15 of sigaltstack. 16 */ 17 18 #include <signal.h> 19 #include <stdio.h> 20 #include <stdlib.h> 21 #include "posixtest.h" 22 23 stack_t current; 24 handler(int signo LTP_ATTRIBUTE_UNUSED)25void handler(int signo LTP_ATTRIBUTE_UNUSED) 26 { 27 stack_t oss; 28 29 printf("Caught SIGFPE\n"); 30 31 if (sigaltstack(NULL, &oss) == -1) { 32 perror("Unexpected error while attempting to setup test " 33 "pre-conditions"); 34 exit(-1); 35 } 36 37 if (oss.ss_sp != current.ss_sp || oss.ss_size != current.ss_size) { 38 printf("Test FAILED\n"); 39 exit(-1); 40 } 41 } 42 main(void)43int main(void) 44 { 45 struct sigaction act; 46 47 act.sa_handler = handler; 48 act.sa_flags = SA_ONSTACK; 49 sigemptyset(&act.sa_mask); 50 if (sigaction(SIGFPE, &act, 0) == -1) { 51 perror("Unexpected error while attempting to setup test " 52 "pre-conditions"); 53 return PTS_UNRESOLVED; 54 } 55 56 if (sigaltstack(NULL, ¤t) == -1) { 57 perror("Unexpected error while attempting to setup test " 58 "pre-conditions"); 59 return PTS_UNRESOLVED; 60 } 61 62 if (raise(SIGFPE) == -1) { 63 perror("Unexpected error while attempting to setup test " 64 "pre-conditions"); 65 return PTS_UNRESOLVED; 66 } 67 68 printf("Test PASSED\n"); 69 return PTS_PASS; 70 } 71