X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7721f9d25945759e012f67181e69550a3a222eb0..e25b33db87858a582977608f0fc95534971f79e7:/buildtools/Cmake/test_prog/prog_stacksetup.c diff --git a/buildtools/Cmake/test_prog/prog_stacksetup.c b/buildtools/Cmake/test_prog/prog_stacksetup.c index 102645eed1..8039927e60 100644 --- a/buildtools/Cmake/test_prog/prog_stacksetup.c +++ b/buildtools/Cmake/test_prog/prog_stacksetup.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2010. The SimGrid Team. +/* Copyright (c) 2010, 2014. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -7,6 +7,12 @@ #if defined OSX #define _XOPEN_SOURCE #endif + +#ifdef _XBT_WIN32 +#include "xbt/win32_ucontext.h" +#include "win32_ucontext.c" +#endif + #include #include #include @@ -15,29 +21,35 @@ #include #include #endif + #if defined(TEST_makecontext) +#ifdef _XBT_WIN32 +#include "xbt/win32_ucontext.h" +#else #include +#endif + #endif union alltypes { - long l; - double d; - void *vp; - void (*fp)(void); - char *cp; + long l; + double d; + void *vp; + void (*fp) (void); + char *cp; }; -static volatile char *handler_addr = (char *)0xDEAD; +static volatile char *handler_addr = (char *) 0xDEAD; #if defined(TEST_sigstack) || defined(TEST_sigaltstack) static volatile int handler_done = 0; void handler(int sig) { - char garbage[1024]; - int i; - auto int dummy; - for (i = 0; i < 1024; i++) - garbage[i] = 'X'; - handler_addr = (char *)&dummy; - handler_done = 1; - return; + char garbage[1024]; + int i; + auto int dummy; + for (i = 0; i < 1024; i++) + garbage[i] = 'X'; + handler_addr = (char *) &dummy; + handler_done = 1; + return; } #endif #if defined(TEST_makecontext) @@ -45,96 +57,95 @@ static ucontext_t uc_handler; static ucontext_t uc_main; void handler(void) { - char garbage[1024]; - int i; - auto int dummy; - for (i = 0; i < 1024; i++) - garbage[i] = 'X'; - handler_addr = (char *)&dummy; - swapcontext(&uc_handler, &uc_main); - return; + char garbage[1024]; + int i; + auto int dummy; + for (i = 0; i < 1024; i++) + garbage[i] = 'X'; + handler_addr = (char *) &dummy; + swapcontext(&uc_handler, &uc_main); + return; } #endif int main(int argc, char *argv[]) { - FILE *f; - char *skaddr; - char *skbuf; - int sksize; - char result[1024]; - int i; - sksize = 32768; - skbuf = (char *)malloc(sksize*2+2*sizeof(union alltypes)); - if (skbuf == NULL) - exit(1); - for (i = 0; i < sksize*2+2*sizeof(union alltypes); i++) - skbuf[i] = 'A'; - skaddr = skbuf+sizeof(union alltypes); + FILE *f; + char *skaddr; + char *skbuf; + int sksize; + char result[1024]; + int i; + sksize = 32768; + skbuf = (char *) malloc(sksize * 2 + 2 * sizeof(union alltypes)); + if (skbuf == NULL) + exit(1); + for (i = 0; i < sksize * 2 + 2 * sizeof(union alltypes); i++) + skbuf[i] = 'A'; + skaddr = skbuf + sizeof(union alltypes); #if defined(TEST_sigstack) || defined(TEST_sigaltstack) - { - struct sigaction sa; + { + struct sigaction sa; #if defined(TEST_sigstack) - struct sigstack ss; + struct sigstack ss; #elif defined(TEST_sigaltstack) && defined(HAVE_STACK_T) - stack_t ss; + stack_t ss; #else - struct sigaltstack ss; + struct sigaltstack ss; #endif #if defined(TEST_sigstack) - ss.ss_sp = (void *)(skaddr + sksize); - ss.ss_onstack = 0; - if (sigstack(&ss, NULL) < 0) - exit(1); + ss.ss_sp = (void *) (skaddr + sksize); + ss.ss_onstack = 0; + if (sigstack(&ss, NULL) < 0) + exit(1); #elif defined(TEST_sigaltstack) - ss.ss_sp = (void *)(skaddr + sksize); - ss.ss_size = sksize; - ss.ss_flags = 0; - if (sigaltstack(&ss, NULL) < 0) - exit(1); + ss.ss_sp = (void *) (skaddr + sksize); + ss.ss_size = sksize; + ss.ss_flags = 0; + if (sigaltstack(&ss, NULL) < 0) + exit(1); #endif - memset((void *)&sa, 0, sizeof(struct sigaction)); - sa.sa_handler = handler; - sa.sa_flags = SA_ONSTACK; - sigemptyset(&sa.sa_mask); - sigaction(SIGUSR1, &sa, NULL); - kill(getpid(), SIGUSR1); - while (!handler_done) - /*nop*/; - } + memset((void *) &sa, 0, sizeof(struct sigaction)); + sa.sa_handler = handler; + sa.sa_flags = SA_ONSTACK; + sigemptyset(&sa.sa_mask); + sigaction(SIGUSR1, &sa, NULL); + kill(getpid(), SIGUSR1); + while (!handler_done) + /*nop */ ; + } #endif #if defined(TEST_makecontext) - { - if (getcontext(&uc_handler) != 0) - exit(1); - uc_handler.uc_link = NULL; - uc_handler.uc_stack.ss_sp = (void *)(skaddr + sksize); - uc_handler.uc_stack.ss_size = sksize; - uc_handler.uc_stack.ss_flags = 0; - makecontext(&uc_handler, handler, 0); - swapcontext(&uc_main, &uc_handler); - } + { + if (getcontext(&uc_handler) != 0) + exit(1); + uc_handler.uc_link = NULL; + uc_handler.uc_stack.ss_sp = (void *) (skaddr + sksize); + uc_handler.uc_stack.ss_size = sksize; + uc_handler.uc_stack.ss_flags = 0; + makecontext(&uc_handler, handler, 0); + swapcontext(&uc_main, &uc_handler); + } #endif - if (handler_addr == (char *)0xDEAD) - exit(1); - if (handler_addr < skaddr+sksize) { - /* stack was placed into lower area */ - if (*(skaddr+sksize) != 'A') - sprintf(result, "(skaddr)+(sksize)-%d,(sksize)-%d", - sizeof(union alltypes), sizeof(union alltypes)); - else - strcpy(result, "(skaddr)+(sksize),(sksize)"); - } - else { - /* stack was placed into higher area */ - if (*(skaddr+sksize*2) != 'A') - sprintf(result, "(skaddr),(sksize)-%d", sizeof(union alltypes)); - else - strcpy(result, "(skaddr),(sksize)"); - } - if ((f = fopen("conftestval", "w")) == NULL) - exit(1); - fprintf(f, "%s\n", result); - fclose(f); - exit(0); - return 1; + if (handler_addr == (char *) 0xDEAD) + exit(1); + if (handler_addr < skaddr + sksize) { + /* stack was placed into lower area */ + if (*(skaddr + sksize) != 'A') + sprintf(result, "(skaddr)+(sksize)-%d,(sksize)-%d", + sizeof(union alltypes), sizeof(union alltypes)); + else + strcpy(result, "(skaddr)+(sksize),(sksize)"); + } else { + /* stack was placed into higher area */ + if (*(skaddr + sksize * 2) != 'A') + sprintf(result, "(skaddr),(sksize)-%d", sizeof(union alltypes)); + else + strcpy(result, "(skaddr),(sksize)"); + } + if ((f = fopen("conftestval", "w")) == NULL) + exit(1); + fprintf(f, "%s\n", result); + fclose(f); + exit(0); + return 1; }