Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add test to check the stack overflow protection.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Wed, 12 Mar 2014 20:26:11 +0000 (21:26 +0100)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Mon, 17 Mar 2014 14:46:51 +0000 (15:46 +0100)
buildtools/Cmake/AddTests.cmake
teshsuite/simix/CMakeLists.txt
teshsuite/simix/stack_overflow.c [new file with mode: 0644]

index e53e83c..719dc51 100644 (file)
@@ -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(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)
   # examples/msg/mc
   if(HAVE_MC)
     if(CONTEXT_UCONTEXT)
index 4c78962..58e3f3f 100644 (file)
@@ -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(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
 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
 set(teshsuite_src
   ${teshsuite_src}
   ${CMAKE_CURRENT_SOURCE_DIR}/check_defaults.c
+  ${CMAKE_CURRENT_SOURCE_DIR}/stack_overflow.c
   PARENT_SCOPE
   )
 set(bin_files
   PARENT_SCOPE
   )
 set(bin_files
diff --git a/teshsuite/simix/stack_overflow.c b/teshsuite/simix/stack_overflow.c
new file mode 100644 (file)
index 0000000..0ae6ffa
--- /dev/null
@@ -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;
+}