From: Arnaud Giersch Date: Wed, 12 Mar 2014 20:26:11 +0000 (+0100) Subject: Add test to check the stack overflow protection. X-Git-Tag: v3_11~215^2~3 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ef7fb2a4c76972d389d2a2cb116cd72db8fc373e Add test to check the stack overflow protection. --- diff --git a/buildtools/Cmake/AddTests.cmake b/buildtools/Cmake/AddTests.cmake index e53e83c54c..719dc51202 100644 --- a/buildtools/Cmake/AddTests.cmake +++ b/buildtools/Cmake/AddTests.cmake @@ -644,6 +644,14 @@ if(NOT enable_memcheck) ADD_TEST(scala-masterslave ${TESH_COMMAND} ${TESH_OPTION} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/scala --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/scala ${CMAKE_HOME_DIRECTORY}/examples/scala/masterslave/masterslave.tesh) endif() + ADD_TEST(stack-overflow-thread ${TESH_COMMAND} ${TESH_OPTION} --cfg contexts/factory:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/stack_overflow.tesh) + if(CONTEXT_UCONTEXT) + ADD_TEST(stack-overflow-ucontext ${TESH_COMMAND} ${TESH_OPTION} --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/stack_overflow.tesh) + endif() + if(HAVE_RAWCTX) + ADD_TEST(stack-overflow-raw ${TESH_COMMAND} ${TESH_OPTION} --cfg contexts/factory:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/stack_overflow.tesh) + endif() + # examples/msg/mc if(HAVE_MC) if(CONTEXT_UCONTEXT) diff --git a/teshsuite/simix/CMakeLists.txt b/teshsuite/simix/CMakeLists.txt index 4c789622b0..58e3f3ff3f 100644 --- a/teshsuite/simix/CMakeLists.txt +++ b/teshsuite/simix/CMakeLists.txt @@ -5,6 +5,9 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") add_executable(check_defaults check_defaults.c) target_link_libraries(check_defaults simgrid) +add_executable(stack_overflow stack_overflow.c) +target_link_libraries(stack_overflow simgrid) + set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/factory_raw.tesh @@ -19,6 +22,7 @@ set(xml_files set(teshsuite_src ${teshsuite_src} ${CMAKE_CURRENT_SOURCE_DIR}/check_defaults.c + ${CMAKE_CURRENT_SOURCE_DIR}/stack_overflow.c PARENT_SCOPE ) set(bin_files diff --git a/teshsuite/simix/stack_overflow.c b/teshsuite/simix/stack_overflow.c new file mode 100644 index 0000000000..0ae6ffadaa --- /dev/null +++ b/teshsuite/simix/stack_overflow.c @@ -0,0 +1,58 @@ +/* stack_overflow -- simple program generating a stack overflow */ + +/* Copyright (c) 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. */ + +#include "simgrid/platf.h" +#include "simgrid/simix.h" +#include "surf/surfxml_parse.h" +#include "xbt/log.h" + +XBT_LOG_NEW_DEFAULT_CATEGORY(test, "my log messages"); + +static unsigned collatz(unsigned c0, unsigned n) +{ + unsigned x; + if (n == 0) { + x = c0; + } else { + x = collatz(c0, n - 1); + if (x % 2 == 0) + x = x / 2; + else + x = 3 * x + 1; + } + return x; +} + +static int master(int argc, char *argv[]) +{ + XBT_INFO("Launching our nice bugged recursive function..."); + unsigned i = 1; + do { + i *= 2; + unsigned res = collatz(i, i); + XBT_VERB("collatz(%u, %u) returned %u", i, i, res); + } while (i <= 0x80000000u); + return 0; +} + +int main(int argc, char *argv[]) +{ + SIMIX_global_init(&argc, argv); + + if (argc != 2) { + printf("Usage: %s platform_and_deployment.xml\n", argv[0]); + exit(EXIT_FAILURE); + } + + SIMIX_function_register("master", master); + SIMIX_create_environment(argv[1]); + SIMIX_launch_application(argv[1]); + SIMIX_run(); + + return 0; +}