10dc076565f772bb1953209fb69ea150b494aaa40robbiew/* 20dc076565f772bb1953209fb69ea150b494aaa40robbiew 30dc076565f772bb1953209fb69ea150b494aaa40robbiew * Copyright (c) 2002-2003, Intel Corporation. All rights reserved. 40dc076565f772bb1953209fb69ea150b494aaa40robbiew * Created by: rusty.lynch REMOVE-THIS AT intel DOT com 50dc076565f772bb1953209fb69ea150b494aaa40robbiew * This file is licensed under the GPL license. For the full content 62c28215423293e443469a07ae7011135d058b671Garrett Cooper * of this license, see the COPYING file at the top level of this 70dc076565f772bb1953209fb69ea150b494aaa40robbiew * source tree. 80dc076565f772bb1953209fb69ea150b494aaa40robbiew 90dc076565f772bb1953209fb69ea150b494aaa40robbiew Test case for assertion #12 of the sigaction system call that verifies 100dc076565f772bb1953209fb69ea150b494aaa40robbiew signal-catching functions are executed on the alternate stack if the 110dc076565f772bb1953209fb69ea150b494aaa40robbiew SA_ONSTACK flag is set in the sigaction.sa_flags parameter to the 122c28215423293e443469a07ae7011135d058b671Garrett Cooper sigaction function call, and an alternate stack has been setup with 130dc076565f772bb1953209fb69ea150b494aaa40robbiew sigaltstack(). 140dc076565f772bb1953209fb69ea150b494aaa40robbiew 150dc076565f772bb1953209fb69ea150b494aaa40robbiew NOTE: This test case does not attempt to verify the proper operation 160dc076565f772bb1953209fb69ea150b494aaa40robbiew of sigaltstack. 170dc076565f772bb1953209fb69ea150b494aaa40robbiew*/ 180dc076565f772bb1953209fb69ea150b494aaa40robbiew 190dc076565f772bb1953209fb69ea150b494aaa40robbiew#define _XOPEN_SOURCE 600 200dc076565f772bb1953209fb69ea150b494aaa40robbiew 210dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <signal.h> 220dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdio.h> 230dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdlib.h> 240dc076565f772bb1953209fb69ea150b494aaa40robbiew#include "posixtest.h" 250dc076565f772bb1953209fb69ea150b494aaa40robbiew 260dc076565f772bb1953209fb69ea150b494aaa40robbiewstack_t alt_ss; 270dc076565f772bb1953209fb69ea150b494aaa40robbiew 280dc076565f772bb1953209fb69ea150b494aaa40robbiewvoid handler(int signo) 290dc076565f772bb1953209fb69ea150b494aaa40robbiew{ 300dc076565f772bb1953209fb69ea150b494aaa40robbiew stack_t ss; 310dc076565f772bb1953209fb69ea150b494aaa40robbiew 320dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Caught SIGABRT\n"); 330dc076565f772bb1953209fb69ea150b494aaa40robbiew 344e2bab8415bfd5ddd552220203ed22c93a4617e5Cyril Hrubis if (sigaltstack(NULL, &ss) == -1) { 350dc076565f772bb1953209fb69ea150b494aaa40robbiew perror("Unexpected error while attempting to setup test " 360dc076565f772bb1953209fb69ea150b494aaa40robbiew "pre-conditions"); 370dc076565f772bb1953209fb69ea150b494aaa40robbiew exit(-1); 380dc076565f772bb1953209fb69ea150b494aaa40robbiew } 392c28215423293e443469a07ae7011135d058b671Garrett Cooper 400dc076565f772bb1953209fb69ea150b494aaa40robbiew if (ss.ss_sp != alt_ss.ss_sp || ss.ss_size != alt_ss.ss_size) { 410dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Test FAILED\n"); 420dc076565f772bb1953209fb69ea150b494aaa40robbiew exit(-1); 430dc076565f772bb1953209fb69ea150b494aaa40robbiew } 440dc076565f772bb1953209fb69ea150b494aaa40robbiew} 450dc076565f772bb1953209fb69ea150b494aaa40robbiew 464ca2bbdcd3003f3c8df4e6129e9c7b2bd1514f87Cyril Hrubisint main(void) 470dc076565f772bb1953209fb69ea150b494aaa40robbiew{ 480dc076565f772bb1953209fb69ea150b494aaa40robbiew struct sigaction act; 492c28215423293e443469a07ae7011135d058b671Garrett Cooper 500dc076565f772bb1953209fb69ea150b494aaa40robbiew act.sa_handler = handler; 510dc076565f772bb1953209fb69ea150b494aaa40robbiew act.sa_flags = SA_ONSTACK; 520dc076565f772bb1953209fb69ea150b494aaa40robbiew sigemptyset(&act.sa_mask); 53354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (sigaction(SIGABRT, &act, 0) == -1) { 540dc076565f772bb1953209fb69ea150b494aaa40robbiew perror("Unexpected error while attempting to setup test " 550dc076565f772bb1953209fb69ea150b494aaa40robbiew "pre-conditions"); 560dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_UNRESOLVED; 570dc076565f772bb1953209fb69ea150b494aaa40robbiew } 580dc076565f772bb1953209fb69ea150b494aaa40robbiew 59d218f348c12b42a78fa0306d9a033bfa4f67238bCyril Hrubis if ((alt_ss.ss_sp = malloc(SIGSTKSZ)) == NULL) { 600dc076565f772bb1953209fb69ea150b494aaa40robbiew perror("Unexpected error while attempting to setup test " 610dc076565f772bb1953209fb69ea150b494aaa40robbiew "pre-conditions"); 620dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_UNRESOLVED; 630dc076565f772bb1953209fb69ea150b494aaa40robbiew } 640dc076565f772bb1953209fb69ea150b494aaa40robbiew alt_ss.ss_size = SIGSTKSZ; 650dc076565f772bb1953209fb69ea150b494aaa40robbiew alt_ss.ss_flags = 0; 662c28215423293e443469a07ae7011135d058b671Garrett Cooper 674e2bab8415bfd5ddd552220203ed22c93a4617e5Cyril Hrubis if (sigaltstack(&alt_ss, NULL) == -1) { 680dc076565f772bb1953209fb69ea150b494aaa40robbiew perror("Unexpected error while attempting to setup test " 690dc076565f772bb1953209fb69ea150b494aaa40robbiew "pre-conditions"); 700dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_UNRESOLVED; 710dc076565f772bb1953209fb69ea150b494aaa40robbiew } 720dc076565f772bb1953209fb69ea150b494aaa40robbiew 730dc076565f772bb1953209fb69ea150b494aaa40robbiew if (raise(SIGABRT) == -1) { 740dc076565f772bb1953209fb69ea150b494aaa40robbiew perror("Unexpected error while attempting to setup test " 750dc076565f772bb1953209fb69ea150b494aaa40robbiew "pre-conditions"); 760dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_UNRESOLVED; 770dc076565f772bb1953209fb69ea150b494aaa40robbiew } 780dc076565f772bb1953209fb69ea150b494aaa40robbiew 790dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Test PASSED\n"); 802c28215423293e443469a07ae7011135d058b671Garrett Cooper return PTS_PASS; 81ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 82