7 #if defined(TEST_sigstack) || defined(TEST_sigaltstack)
12 #if defined(TEST_makecontext)
22 static volatile char *handler_addr = (char *)0xDEAD;
23 #if defined(TEST_sigstack) || defined(TEST_sigaltstack)
24 static volatile int handler_done = 0;
30 for (i = 0; i < 1024; i++)
32 handler_addr = (char *)&dummy;
37 #if defined(TEST_makecontext)
38 static ucontext_t uc_handler;
39 static ucontext_t uc_main;
45 for (i = 0; i < 1024; i++)
47 handler_addr = (char *)&dummy;
48 swapcontext(&uc_handler, &uc_main);
52 int main(int argc, char *argv[])
61 skbuf = (char *)malloc(sksize*2+2*sizeof(union alltypes));
64 for (i = 0; i < sksize*2+2*sizeof(union alltypes); i++)
66 skaddr = skbuf+sizeof(union alltypes);
67 #if defined(TEST_sigstack) || defined(TEST_sigaltstack)
70 #if defined(TEST_sigstack)
72 #elif defined(TEST_sigaltstack) && defined(HAVE_STACK_T)
75 struct sigaltstack ss;
77 #if defined(TEST_sigstack)
78 ss.ss_sp = (void *)(skaddr + sksize);
80 if (sigstack(&ss, NULL) < 0)
82 #elif defined(TEST_sigaltstack)
83 ss.ss_sp = (void *)(skaddr + sksize);
86 if (sigaltstack(&ss, NULL) < 0)
89 memset((void *)&sa, 0, sizeof(struct sigaction));
90 sa.sa_handler = handler;
91 sa.sa_flags = SA_ONSTACK;
92 sigemptyset(&sa.sa_mask);
93 sigaction(SIGUSR1, &sa, NULL);
94 kill(getpid(), SIGUSR1);
99 #if defined(TEST_makecontext)
101 if (getcontext(&uc_handler) != 0)
103 uc_handler.uc_link = NULL;
104 uc_handler.uc_stack.ss_sp = (void *)(skaddr + sksize);
105 uc_handler.uc_stack.ss_size = sksize;
106 uc_handler.uc_stack.ss_flags = 0;
107 makecontext(&uc_handler, handler, 0);
108 swapcontext(&uc_main, &uc_handler);
111 if (handler_addr == (char *)0xDEAD)
113 if (handler_addr < skaddr+sksize) {
114 /* stack was placed into lower area */
115 if (*(skaddr+sksize) != 'A')
116 sprintf(result, "(skaddr)+(sksize)-%d,(sksize)-%d",
117 sizeof(union alltypes), sizeof(union alltypes));
119 strcpy(result, "(skaddr)+(sksize),(sksize)");
122 /* stack was placed into higher area */
123 if (*(skaddr+sksize*2) != 'A')
124 sprintf(result, "(skaddr),(sksize)-%d", sizeof(union alltypes));
126 strcpy(result, "(skaddr),(sksize)");
128 if ((f = fopen("conftestval", "w")) == NULL)
130 fprintf(f, "%s\n", result);