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 #13 of the sigaction system call that verifies 100dc076565f772bb1953209fb69ea150b494aaa40robbiew signal-catching functions are executed on the current stack if the 110dc076565f772bb1953209fb69ea150b494aaa40robbiew SA_ONSTACK flag is cleared in the sigaction.sa_flags parameter to the 120dc076565f772bb1953209fb69ea150b494aaa40robbiew sigaction function call. 130dc076565f772bb1953209fb69ea150b494aaa40robbiew 140dc076565f772bb1953209fb69ea150b494aaa40robbiew NOTE: This test case does not attempt to verify the proper operation 150dc076565f772bb1953209fb69ea150b494aaa40robbiew of sigaltstack. 160dc076565f772bb1953209fb69ea150b494aaa40robbiew*/ 170dc076565f772bb1953209fb69ea150b494aaa40robbiew 180dc076565f772bb1953209fb69ea150b494aaa40robbiew#define _XOPEN_SOURCE 600 190dc076565f772bb1953209fb69ea150b494aaa40robbiew 200dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <signal.h> 210dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdio.h> 220dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdlib.h> 230dc076565f772bb1953209fb69ea150b494aaa40robbiew#include "posixtest.h" 240dc076565f772bb1953209fb69ea150b494aaa40robbiew 250dc076565f772bb1953209fb69ea150b494aaa40robbiewstack_t current; 260dc076565f772bb1953209fb69ea150b494aaa40robbiew 270dc076565f772bb1953209fb69ea150b494aaa40robbiewvoid handler(int signo) 280dc076565f772bb1953209fb69ea150b494aaa40robbiew{ 290dc076565f772bb1953209fb69ea150b494aaa40robbiew stack_t oss; 300dc076565f772bb1953209fb69ea150b494aaa40robbiew 310dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Caught SIGVTALRM\n"); 320dc076565f772bb1953209fb69ea150b494aaa40robbiew 334e2bab8415bfd5ddd552220203ed22c93a4617e5Cyril Hrubis if (sigaltstack(NULL, &oss) == -1) { 340dc076565f772bb1953209fb69ea150b494aaa40robbiew perror("Unexpected error while attempting to setup test " 350dc076565f772bb1953209fb69ea150b494aaa40robbiew "pre-conditions"); 360dc076565f772bb1953209fb69ea150b494aaa40robbiew exit(-1); 370dc076565f772bb1953209fb69ea150b494aaa40robbiew } 382c28215423293e443469a07ae7011135d058b671Garrett Cooper 390dc076565f772bb1953209fb69ea150b494aaa40robbiew if (oss.ss_sp != current.ss_sp || oss.ss_size != current.ss_size) { 400dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Test FAILED\n"); 410dc076565f772bb1953209fb69ea150b494aaa40robbiew exit(-1); 420dc076565f772bb1953209fb69ea150b494aaa40robbiew } 430dc076565f772bb1953209fb69ea150b494aaa40robbiew} 440dc076565f772bb1953209fb69ea150b494aaa40robbiew 454ca2bbdcd3003f3c8df4e6129e9c7b2bd1514f87Cyril Hrubisint main(void) 460dc076565f772bb1953209fb69ea150b494aaa40robbiew{ 470dc076565f772bb1953209fb69ea150b494aaa40robbiew struct sigaction act; 482c28215423293e443469a07ae7011135d058b671Garrett Cooper 490dc076565f772bb1953209fb69ea150b494aaa40robbiew act.sa_handler = handler; 500dc076565f772bb1953209fb69ea150b494aaa40robbiew act.sa_flags = 0; 510dc076565f772bb1953209fb69ea150b494aaa40robbiew sigemptyset(&act.sa_mask); 52354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (sigaction(SIGVTALRM, &act, 0) == -1) { 530dc076565f772bb1953209fb69ea150b494aaa40robbiew perror("Unexpected error while attempting to setup test " 540dc076565f772bb1953209fb69ea150b494aaa40robbiew "pre-conditions"); 550dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_UNRESOLVED; 560dc076565f772bb1953209fb69ea150b494aaa40robbiew } 572c28215423293e443469a07ae7011135d058b671Garrett Cooper 584e2bab8415bfd5ddd552220203ed22c93a4617e5Cyril Hrubis if (sigaltstack(NULL, ¤t) == -1) { 590dc076565f772bb1953209fb69ea150b494aaa40robbiew perror("Unexpected error while attempting to setup test " 600dc076565f772bb1953209fb69ea150b494aaa40robbiew "pre-conditions"); 610dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_UNRESOLVED; 620dc076565f772bb1953209fb69ea150b494aaa40robbiew } 630dc076565f772bb1953209fb69ea150b494aaa40robbiew 640dc076565f772bb1953209fb69ea150b494aaa40robbiew if (raise(SIGVTALRM) == -1) { 650dc076565f772bb1953209fb69ea150b494aaa40robbiew perror("Unexpected error while attempting to setup test " 660dc076565f772bb1953209fb69ea150b494aaa40robbiew "pre-conditions"); 670dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_UNRESOLVED; 680dc076565f772bb1953209fb69ea150b494aaa40robbiew } 690dc076565f772bb1953209fb69ea150b494aaa40robbiew 700dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Test PASSED\n"); 712c28215423293e443469a07ae7011135d058b671Garrett Cooper return PTS_PASS; 72ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 73