- 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:<value>.
+ * 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
* 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 <simgrid-devel@lists.gforge.inria.fr>
* 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
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
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)
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)
### 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
)
# 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})
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)
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)
/* 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)
${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}
/* 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 <math.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/mman.h>
+#include <sys/wait.h>
#include "mmprivate.h"
! 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
< }
$ mkfile delayed_cat.c
-$ gcc -Wall -o delayed_cat delayed_cat.c
+$ cc -Wall -o delayed_cat delayed_cat.c
& ./delayed_cat
> TOTO
< }
$ mkfile segfault.c
-$ gcc -o segfault segfault.c
+$ cc -o segfault segfault.c
! expect signal SIGSEGV
& ./segfault
$ sleep 1
< }
$ mkfile return1.c
-$ gcc -o return1 return1.c
+$ cc -o return1 return1.c
! expect return 41
< $ ./return1
< }
$ mkfile segfault.c
-$ gcc -o segfault segfault.c
+$ cc -o segfault segfault.c
! expect return 15
< $ ./segfault
< }
$ mkfile return1.c
-$ gcc -o return1 return1.c
+$ cc -o return1 return1.c
! expect return 1
$ ./return1
< }
$ mkfile segfault.c
-$ gcc -o segfault segfault.c
+$ cc -o segfault segfault.c
! expect signal SIGSEGV
$ ./segfault
$ cd ..
< }
$ mkfile getenv.c
-$ gcc -o getenv getenv.c -g
+$ cc -o getenv getenv.c -g
! setenv tesh_test_toto=blah
$ ./getenv