4 #if defined(TEST_sigstack) || defined(TEST_sigaltstack)
9 #if defined(TEST_makecontext)
19 static volatile char *handler_addr = (char *)0xDEAD;
20 #if defined(TEST_sigstack) || defined(TEST_sigaltstack)
21 static volatile int handler_done = 0;
27 for (i = 0; i < 1024; i++)
29 handler_addr = (char *)&dummy;
34 #if defined(TEST_makecontext)
35 static ucontext_t uc_handler;
36 static ucontext_t uc_main;
42 for (i = 0; i < 1024; i++)
44 handler_addr = (char *)&dummy;
45 swapcontext(&uc_handler, &uc_main);
49 int main(int argc, char *argv[])
58 skbuf = (char *)malloc(sksize*2+2*sizeof(union alltypes));
61 for (i = 0; i < sksize*2+2*sizeof(union alltypes); i++)
63 skaddr = skbuf+sizeof(union alltypes);
64 #if defined(TEST_sigstack) || defined(TEST_sigaltstack)
67 #if defined(TEST_sigstack)
69 #elif defined(TEST_sigaltstack) && defined(HAVE_STACK_T)
72 struct sigaltstack ss;
74 #if defined(TEST_sigstack)
75 ss.ss_sp = (void *)(skaddr + sksize);
77 if (sigstack(&ss, NULL) < 0)
79 #elif defined(TEST_sigaltstack)
80 ss.ss_sp = (void *)(skaddr + sksize);
83 if (sigaltstack(&ss, NULL) < 0)
86 memset((void *)&sa, 0, sizeof(struct sigaction));
87 sa.sa_handler = handler;
88 sa.sa_flags = SA_ONSTACK;
89 sigemptyset(&sa.sa_mask);
90 sigaction(SIGUSR1, &sa, NULL);
91 kill(getpid(), SIGUSR1);
96 #if defined(TEST_makecontext)
98 if (getcontext(&uc_handler) != 0)
100 uc_handler.uc_link = NULL;
101 uc_handler.uc_stack.ss_sp = (void *)(skaddr + sksize);
102 uc_handler.uc_stack.ss_size = sksize;
103 uc_handler.uc_stack.ss_flags = 0;
104 makecontext(&uc_handler, handler, 0);
105 swapcontext(&uc_main, &uc_handler);
108 if (handler_addr == (char *)0xDEAD)
110 if (handler_addr < skaddr+sksize) {
111 /* stack was placed into lower area */
112 if (*(skaddr+sksize) != 'A')
113 sprintf(result, "(skaddr)+(sksize)-%d,(sksize)-%d",
114 sizeof(union alltypes), sizeof(union alltypes));
116 strcpy(result, "(skaddr)+(sksize),(sksize)");
119 /* stack was placed into higher area */
120 if (*(skaddr+sksize*2) != 'A')
121 sprintf(result, "(skaddr),(sksize)-%d", sizeof(union alltypes));
123 strcpy(result, "(skaddr),(sksize)");
125 if ((f = fopen("conftestval", "w")) == NULL)
127 fprintf(f, "%s\n", result);