From: Martin Quinson Date: Fri, 12 Feb 2016 21:02:46 +0000 (+0100) Subject: try to fix the stack growth direction on non-amd64 X-Git-Tag: v3_13~848^2~2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ce8b16ee0f1aa0c7cae442128269f619e979d2d0 try to fix the stack growth direction on non-amd64 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index da56fb80eb..34badcaaeb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -738,11 +738,12 @@ endif() ### check for stackgrowth if (NOT CMAKE_CROSSCOMPILING) - try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR + try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c RUN_OUTPUT_VARIABLE stack - ) + COPY_FILE test_stackgrowth + ) endif() if("${stack}" STREQUAL "down") set(PTH_STACKGROWTH "-1") diff --git a/tools/cmake/test_prog/prog_stackgrowth.c b/tools/cmake/test_prog/prog_stackgrowth.c index f005341f04..d75dde534e 100644 --- a/tools/cmake/test_prog/prog_stackgrowth.c +++ b/tools/cmake/test_prog/prog_stackgrowth.c @@ -10,12 +10,20 @@ static int iterate = 10; static int growsdown(int *x) { - int y; - y = (x > &y); + int y = (x > &y); + if (--iterate > 0) y = growsdown(&y); - if (y != (x > &y)) + + /* The stack sometimes changes at the 0th level. + * Original version did fail in this case, but I changed this around SimGrid 3.13 because of https://bugs.debian.org/814272 + * Every arch failed on that day :( + */ + if (iterate != 0 && y != (x > &y)) { + fprintf(stderr, "The stack changed its direction! (Iteration: %d. It was growing %s; &y=%p; &prevY=%p)\n", + (10-iterate), y?"down":"up", &y, x); exit(1); + } return y; } @@ -23,6 +31,6 @@ int main(int argc, char *argv[]) { int x; printf("%s", growsdown(&x) ? "down" : "up"); - exit(0); - return 1; + + return 0; }