From: Pierre Veyre Date: Wed, 19 Mar 2014 14:52:07 +0000 (+0100) Subject: Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid X-Git-Tag: v3_11~213 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/73662a7c0b0d1e462f2b99322183295be3a24a5a?hp=18ba8a3fabab08a493038a2e11e5df5b4b6de4f0 Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid --- diff --git a/ChangeLog b/ChangeLog index 2351083839..5abdda77c9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -31,10 +31,13 @@ SimGrid (3.11) NOT RELEASED; urgency=low - creation of a VM on a PM - migration of a VM from a PM to another PM - Simcalls: - * Simcalls are now generated by a python script - - generate files include by simgrid - - check that all the functions exists and propose prototypes + SIMIX: + * Protect context stacks against stack overflow. The number of protected memory + pages allocated on the top of each stack (1 by default) can be configured + with the new command line option --cfg=contexts/guard_size:. + * Simcalls are now generated by a python script that + - generates files included by SimGrid + - checks that all the functions exist, and proposes prototypes * Clean simcalls - remove sem_destroy, file_set_data, comm_destroy, vm_set_state, host_set_data, host_get_data @@ -70,7 +73,7 @@ SimGrid (3.11) NOT RELEASED; urgency=low * Supernovae build mode is definitively removed. It was used to improve inlining and inter-module optimizations. It is nowadays superseded by link-time optimizations commonly available in compilers. - * Update ns3 find lib. NS3 bindings should work again now. + * Update ns-3 find lib. Bindings for ns-3 should work again now. * Add boost dependency for surf++ -- $date Da SimGrid team @@ -295,7 +298,7 @@ SimGrid (3.8) stable; urgency=low * New option "enable_mallocators" to disable mallocators, for debugging purpose ("on" by default). - Simix: + SIMIX: * Bug fixes around the resource failures: don't let the processes survive the host they are running onto. * Add an interface to auto-restart processes when the host in which they are diff --git a/buildtools/Cmake/AddTests.cmake b/buildtools/Cmake/AddTests.cmake index 719dc51202..33ecd81c38 100644 --- a/buildtools/Cmake/AddTests.cmake +++ b/buildtools/Cmake/AddTests.cmake @@ -649,7 +649,7 @@ if(NOT enable_memcheck) 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) + 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 @@ -668,6 +668,23 @@ if(NOT enable_memcheck) endif() endif() + ### + ### Declare that we know that some tests are broken + ### + if(release) + if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + # These tests are known to fail on Mac OS X (the expected error message is + # not shown). + set_tests_properties(stack-overflow-thread PROPERTIES WILL_FAIL true) + if(CONTEXT_UCONTEXT) + set_tests_properties(stack-overflow-ucontext PROPERTIES WILL_FAIL true) + endif() + if(HAVE_RAWCTX) + set_tests_properties(stack-overflow-raw PROPERTIES WILL_FAIL true) + endif() + endif() + endif() + endif() ADD_TEST(tesh-simdag-full-links01 ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms/two_clusters.xml FULL_LINK) diff --git a/buildtools/Cmake/CompleteInFiles.cmake b/buildtools/Cmake/CompleteInFiles.cmake index 04a2a3ef9a..1085ffd7ad 100644 --- a/buildtools/Cmake/CompleteInFiles.cmake +++ b/buildtools/Cmake/CompleteInFiles.cmake @@ -107,6 +107,8 @@ else() endif() # Checks for header libraries functions. +CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_DLOPEN_IN_LIBDL) +CHECK_LIBRARY_EXISTS(execinfo backtrace "" HAVE_BACKTRACE_IN_LIBEXECINFO) CHECK_LIBRARY_EXISTS(pthread pthread_create "" pthread) CHECK_LIBRARY_EXISTS(pthread sem_init "" HAVE_SEM_INIT_LIB) CHECK_LIBRARY_EXISTS(pthread sem_open "" HAVE_SEM_OPEN_LIB) @@ -249,7 +251,10 @@ CHECK_TYPE_SIZE(void* SIZEOF_VOIDP) ### Check for GNU dynamic linker CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H) if (HAVE_DLFCN_H) - execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_gnu_dynlinker.c -ldl -o test_gnu_ld + if(HAVE_DLOPEN_IN_LIBDL) + set(DL_LIBRARY "-ldl") + endif(HAVE_DLOPEN_IN_LIBDL) + execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_gnu_dynlinker.c ${DL_LIBRARY} -o test_gnu_ld WORKING_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE HAVE_GNU_LD_compil ) diff --git a/buildtools/Cmake/MakeLib.cmake b/buildtools/Cmake/MakeLib.cmake index 1e2113774d..bbf9eab654 100644 --- a/buildtools/Cmake/MakeLib.cmake +++ b/buildtools/Cmake/MakeLib.cmake @@ -20,7 +20,16 @@ add_dependencies(simgrid maintainer_files) # Compute the dependencies of SimGrid ##################################### -set(SIMGRID_DEP "-lm -lstdc++") +set(SIMGRID_DEP "-lm") + +if(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" + AND NOT ${CMAKE_SYSTEM_VERSION} VERSION_LESS 10.0 + AND ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + # FreeBSD from 10.0 provide a internal C++ stack (unused by gcc) + set(SIMGRID_DEP "${SIMGRID_DEP} -lc++") +else() + set(SIMGRID_DEP "${SIMGRID_DEP} -lstdc++") +endif() if(pthread) if(${CONTEXT_THREADS}) @@ -87,7 +96,7 @@ if(HAVE_MC) endif() if(MMALLOC_WANT_OVERRIDE_LEGACY AND HAVE_GNU_LD) - SET(SIMGRID_DEP "${SIMGRID_DEP} -ldl") + SET(SIMGRID_DEP "${SIMGRID_DEP} ${DL_LIBRARY}") endif() if(HAVE_NS3) @@ -104,6 +113,10 @@ if(HAVE_POSIX_GETTIME) SET(SIMGRID_DEP "${SIMGRID_DEP} -lrt") endif() +if(HAVE_BACKTRACE_IN_LIBEXECINFO) + SET(SIMGRID_DEP "${SIMGRID_DEP} -lexecinfo") +endif(HAVE_BACKTRACE_IN_LIBEXECINFO) + # Compute the dependencies of SMPI ################################## if(enable_smpi AND APPLE) diff --git a/src/smpi/smpi_f77.c b/src/smpi/smpi_f77.c index 7c3e483a03..aa9af8c26e 100644 --- a/src/smpi/smpi_f77.c +++ b/src/smpi/smpi_f77.c @@ -23,29 +23,24 @@ static int running_processes = 0; /* Bindings for MPI special values */ union u_smpi_common { struct s_smpi_common { - integer mpi_in_place; - integer mpi_bottom; - integer mpi_status_ignore; - integer mpi_statuses_ignore; - } f90; /* with gftortran */ - struct s_smpi_common *f77; /* with f2c */ -} smpi_; + integer _MPI_IN_PLACE; + integer _MPI_BOTTOM; + integer _MPI_STATUS_IGNORE; + integer _MPI_STATUSES_IGNORE; + } *f77; /* with f2c, remains NULL with gfortran */ + struct s_smpi_common f90; /* with gftortran */ +} smpi_ = { NULL }; /* Convert between Fortran and C */ -static XBT_INLINE void *f2c_addr(void *addr, void *cval, void *chk1, void *chk2) -{ - return (addr == chk1 || addr == chk2) ? cval : addr; -} -#define F2C_ADDR(addr, cval, fval) \ - f2c_addr(addr, cval, &smpi_.f90.fval, &smpi_.f77[smpi_current_rank].fval) -#define F2C_BOTTOM(addr) \ - F2C_ADDR(addr, MPI_BOTTOM, mpi_bottom) -#define F2C_IN_PLACE(addr) \ - F2C_ADDR(addr, MPI_IN_PLACE, mpi_in_place) -#define F2C_STATUS_IGNORE(addr) \ - F2C_ADDR(addr, MPI_STATUS_IGNORE, mpi_status_ignore) -#define F2C_STATUSES_IGNORE(addr) \ - F2C_ADDR(addr, MPI_STATUSES_IGNORE, mpi_statuses_ignore) +#define F2C_ADDR(addr, val) \ + (((void *)(addr) == (void *)(smpi_.f77 \ + ? &smpi_.f77[smpi_current_rank]._ ## val \ + : &smpi_.f90._ ## val)) \ + ? (val) : (void *)(addr)) +#define F2C_BOTTOM(addr) F2C_ADDR(addr, MPI_BOTTOM) +#define F2C_IN_PLACE(addr) F2C_ADDR(addr, MPI_IN_PLACE) +#define F2C_STATUS_IGNORE(addr) F2C_ADDR(addr, MPI_STATUS_IGNORE) +#define F2C_STATUSES_IGNORE(addr) F2C_ADDR(addr, MPI_STATUSES_IGNORE) #define KEY_SIZE (sizeof(int) * 2 + 1) diff --git a/src/smpi/smpirun.in b/src/smpi/smpirun.in index 9ba0724359..90c0d1e4ce 100755 --- a/src/smpi/smpirun.in +++ b/src/smpi/smpirun.in @@ -426,10 +426,6 @@ fi ${EXEC} ${TRACEOPTIONS} ${SIMOPTS} ${PLATFORMTMP} ${APPLICATIONTMP} status=$? -if [ ${status} = 139 ]; then echo "ERROR: A segmentation fault was triggered. -A common cause in SimGrid may be the use of a too small stack size for the simulated processes (default 8192 KiB). -Please see contexts/stack_size parameter , or http://simgrid.org/simgrid/latest/doc/options.html#options_virt_stacksize "; fi - if [ -z "${KEEP}" ] ; then if [ -z "${PLATFORM}" ]; then rm ${PLATFORMTMP} diff --git a/src/xbt/mmalloc/mm_legacy.c b/src/xbt/mmalloc/mm_legacy.c index 7984ad0bfe..0073245ad5 100644 --- a/src/xbt/mmalloc/mm_legacy.c +++ b/src/xbt/mmalloc/mm_legacy.c @@ -7,6 +7,7 @@ /* Redefine the classical malloc/free/realloc functions so that they fit well in the mmalloc framework */ #include "mmprivate.h" +#include "xbt_modinter.h" #include "internal_config.h" #include diff --git a/src/xbt/mmalloc/mmorecore.c b/src/xbt/mmalloc/mmorecore.c index 2182cc4add..014b8b81c2 100644 --- a/src/xbt/mmalloc/mmorecore.c +++ b/src/xbt/mmalloc/mmorecore.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "mmprivate.h" diff --git a/teshsuite/smpi/allreduce_coll_large.tesh b/teshsuite/smpi/allreduce_coll_large.tesh index ec96371807..e13e40c43a 100644 --- a/teshsuite/smpi/allreduce_coll_large.tesh +++ b/teshsuite/smpi/allreduce_coll_large.tesh @@ -4,7 +4,7 @@ ! timeout 20 p Test allreduce -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./allreduce_coll 300000 --log=smpi_kernel.thres:warning +$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./allreduce_coll 30000 --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter diff --git a/tools/tesh/background.tesh b/tools/tesh/background.tesh index 359d2a5446..1029d89c3a 100644 --- a/tools/tesh/background.tesh +++ b/tools/tesh/background.tesh @@ -43,7 +43,7 @@ $ cd temp_testdir_background < } $ mkfile delayed_cat.c -$ gcc -Wall -o delayed_cat delayed_cat.c +$ cc -Wall -o delayed_cat delayed_cat.c & ./delayed_cat > TOTO diff --git a/tools/tesh/bg-set-signal.tesh b/tools/tesh/bg-set-signal.tesh index 3efe2c359d..ff9c3d5401 100644 --- a/tools/tesh/bg-set-signal.tesh +++ b/tools/tesh/bg-set-signal.tesh @@ -13,7 +13,7 @@ $ cd temp_testdir-bg-set-signal < } $ mkfile segfault.c -$ gcc -o segfault segfault.c +$ cc -o segfault segfault.c ! expect signal SIGSEGV & ./segfault $ sleep 1 diff --git a/tools/tesh/catch-return.tesh b/tools/tesh/catch-return.tesh index ea794f1bbb..f9d21a29fc 100644 --- a/tools/tesh/catch-return.tesh +++ b/tools/tesh/catch-return.tesh @@ -12,7 +12,7 @@ $ cd temp_testdir-catch-return < } $ mkfile return1.c -$ gcc -o return1 return1.c +$ cc -o return1 return1.c ! expect return 41 < $ ./return1 diff --git a/tools/tesh/catch-signal.tesh b/tools/tesh/catch-signal.tesh index 5c7b45f05e..64d37e8a20 100644 --- a/tools/tesh/catch-signal.tesh +++ b/tools/tesh/catch-signal.tesh @@ -13,7 +13,7 @@ $ cd temp_testdir-catch-signal < } $ mkfile segfault.c -$ gcc -o segfault segfault.c +$ cc -o segfault segfault.c ! expect return 15 < $ ./segfault diff --git a/tools/tesh/set-return.tesh b/tools/tesh/set-return.tesh index ff0dd17760..679234de34 100644 --- a/tools/tesh/set-return.tesh +++ b/tools/tesh/set-return.tesh @@ -12,7 +12,7 @@ $ cd temp_testdir-set-return < } $ mkfile return1.c -$ gcc -o return1 return1.c +$ cc -o return1 return1.c ! expect return 1 $ ./return1 diff --git a/tools/tesh/set-signal.tesh b/tools/tesh/set-signal.tesh index 43f105e06e..314b7f0fe8 100644 --- a/tools/tesh/set-signal.tesh +++ b/tools/tesh/set-signal.tesh @@ -13,7 +13,7 @@ $ cd temp_testdir-set-signal < } $ mkfile segfault.c -$ gcc -o segfault segfault.c +$ cc -o segfault segfault.c ! expect signal SIGSEGV $ ./segfault $ cd .. diff --git a/tools/tesh/setenv.tesh b/tools/tesh/setenv.tesh index 72d5566d33..632fd8bb44 100644 --- a/tools/tesh/setenv.tesh +++ b/tools/tesh/setenv.tesh @@ -21,7 +21,7 @@ $ cd temp_testdir-setenv < } $ mkfile getenv.c -$ gcc -o getenv getenv.c -g +$ cc -o getenv getenv.c -g ! setenv tesh_test_toto=blah $ ./getenv