From: Martin Quinson Date: Mon, 7 Mar 2016 00:55:14 +0000 (+0100) Subject: [cmake] simplify the detection of the ucontext stack setup X-Git-Tag: v3_13~516 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/3bb9cf08837966699cf4ce036108dd52936b9f41 [cmake] simplify the detection of the ucontext stack setup --- diff --git a/.gitignore b/.gitignore index 7362d13454..5ea3ec481b 100644 --- a/.gitignore +++ b/.gitignore @@ -42,13 +42,10 @@ src/*_unit.c _*.c include/simgrid_config.h include/xbt/version.h -include/instr/tracing_config.h include/smpi/smpif.h -src/context_sysv_config.h src/internal_config.h src/smpi/smpicc src/smpi/smpirun -simgrid-*.tar.gz testprog ### Cmake files CPackConfig.cmake @@ -61,7 +58,6 @@ install_manifest.txt _CPack_Packages/ CMakeCache.txt DartConfiguration.tcl -simgrid.nsi TAGS Testing/ Makefile diff --git a/CMakeLists.txt b/CMakeLists.txt index a6594177fa..fa02918268 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -579,23 +579,18 @@ if(GIT_DATE) endif() #-------------------------------------------------------------------------------------------------- -set(makecontext_CPPFLAGS_2 "") if(HAVE_UCONTEXT_H) - set(makecontext_CPPFLAGS "-DTEST_makecontext") if(CMAKE_SYSTEM_NAME MATCHES "Darwin") - set(makecontext_CPPFLAGS_2 "-D_XOPEN_SOURCE=700") + set(makecontext_CPPFLAGS "${makecontext_CPPFLAGS} -D_XOPEN_SOURCE=700") endif() file(REMOVE ${CMAKE_BINARY_DIR}/conftestval) - if(CMAKE_CROSSCOMPILING) - set(RUN_makecontext_VAR "cross") - set(COMPILE_makecontext_VAR "cross") - else() + if(NOT CMAKE_CROSSCOMPILING) try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c - COMPILE_DEFINITIONS "${makecontext_CPPFLAGS} ${makecontext_CPPFLAGS_2}" + COMPILE_DEFINITIONS "${makecontext_CPPFLAGS}" ) endif() @@ -650,9 +645,6 @@ endif() ### File to create -configure_file("${CMAKE_HOME_DIRECTORY}/src/context_sysv_config.h.in" - "${CMAKE_BINARY_DIR}/src/context_sysv_config.h" @ONLY IMMEDIATE) - SET( CMAKEDEFINE "#cmakedefine" ) configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h" @ONLY IMMEDIATE) configure_file("${CMAKE_BINARY_DIR}/src/internal_config.h" "${CMAKE_BINARY_DIR}/src/internal_config.h" @ONLY IMMEDIATE) @@ -720,7 +712,6 @@ set(generated_headers_to_install ) set(generated_headers - ${CMAKE_CURRENT_BINARY_DIR}/src/context_sysv_config.h ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h ) diff --git a/src/context_sysv_config.h.in b/src/context_sysv_config.h.in deleted file mode 100644 index 6643fd972d..0000000000 --- a/src/context_sysv_config.h.in +++ /dev/null @@ -1,14 +0,0 @@ -/* Copyright (c) 2008, 2011, 2014. The SimGrid Team. - * All rights reserved. */ - -/* This program is free software; you can redistribute it and/or modify it - * under the terms of the license (GNU LGPL) which comes with this package. */ - -#ifndef _UCONTEXT_STACK_H -#define _UCONTEXT_STACK_H - -/* stack setup macros */ -@pth_skaddr_makecontext@ -@pth_sksize_makecontext@ - -#endif /* _UCONTEXT_STACK_H */ diff --git a/src/simix/UContext.cpp b/src/simix/UContext.cpp index 7cb720a125..f3ff9bb2b9 100644 --- a/src/simix/UContext.cpp +++ b/src/simix/UContext.cpp @@ -15,7 +15,6 @@ #include "src/simix/smx_private.h" #include "src/simix/smx_private.hpp" #include "src/internal_config.h" -#include "src/context_sysv_config.h" /* loads context system definitions */ #include "mc/mc.h" /** Many integers are needed to store a pointer diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index 4f190d97dd..295dcb71ca 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -703,8 +703,7 @@ set(headers_to_install ) set(source_of_generated_headers include/simgrid_config.h.in - include/smpi/mpif.h.in - src/context_sysv_config.h.in) + include/smpi/mpif.h.in) ### depend of some variables setted upper # -->HAVE_THREAD_CONTEXTS HAVE_UCONTEXT_CONTEXTS diff --git a/tools/cmake/src/internal_config.h.in b/tools/cmake/src/internal_config.h.in index 753c6e1f2c..3ba5aaf9d2 100644 --- a/tools/cmake/src/internal_config.h.in +++ b/tools/cmake/src/internal_config.h.in @@ -37,6 +37,10 @@ #cmakedefine PROCESSOR_x86_64 @PROCESSOR_x86_64@ #cmakedefine CMAKE_SYSTEM_PROCESSOR @CMAKE_SYSTEM_PROCESSOR@ +/* Variables for the ucontexts */ +@pth_skaddr_makecontext@ +@pth_sksize_makecontext@ + /* MC variables */ #cmakedefine HAVE_GETDTABLESIZE @HAVE_GETDTABLESIZE@ /* getdtablesize: get descriptor table size */ #cmakedefine HAVE_MMALLOC @HAVE_MMALLOC@ /* Did we compile mmalloc in? */ diff --git a/tools/cmake/test_prog/prog_stacksetup.c b/tools/cmake/test_prog/prog_stacksetup.c index 0ae3568858..46f0563d0e 100644 --- a/tools/cmake/test_prog/prog_stacksetup.c +++ b/tools/cmake/test_prog/prog_stacksetup.c @@ -1,25 +1,16 @@ -/* Copyright (c) 2010, 2014-2015. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2010, 2014-2016. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#if defined OSX +#ifdef __APPLE__ #define _XOPEN_SOURCE 700 #endif #include #include #include -#if defined(TEST_sigstack) || defined(TEST_sigaltstack) -#include -#include -#include -#endif - -#if defined(TEST_makecontext) #include -#endif union alltypes { long l; @@ -29,101 +20,46 @@ union alltypes { char *cp; }; 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; -} -#endif -#if defined(TEST_makecontext) 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++) + for (int 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)); + int sksize = 32768; + char *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++) + for (int 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; -#if defined(TEST_sigstack) - struct sigstack ss; -#elif defined(TEST_sigaltstack) && defined(HAVE_STACK_T) - stack_t ss; -#else - 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); -#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); -#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 */ ; - } -#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); - } -#endif + char *skaddr = skbuf + sizeof(union alltypes); + + 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 (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)); + sprintf(result, "(skaddr)+(sksize)-%d,(sksize)-%d", sizeof(union alltypes), sizeof(union alltypes)); else strcpy(result, "(skaddr)+(sksize),(sksize)"); } else {