Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' into vmtrace
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Thu, 17 Jan 2013 13:03:10 +0000 (14:03 +0100)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Thu, 17 Jan 2013 13:03:10 +0000 (14:03 +0100)
Conflicts:
buildtools/Cmake/DefinePackages.cmake
include/surf/simgrid_dtd.h
include/xbt/graphxml.h
src/instr/instr_config.c
src/instr/instr_private.h
src/simdag/dax_dtd.c
src/simdag/dax_dtd.h
src/surf/simgrid_dtd.c
src/xbt/graphxml.c

1  2 
buildtools/Cmake/CompleteInFiles.cmake
buildtools/Cmake/DefinePackages.cmake
include/msg/msg.h
src/instr/instr_config.c
src/instr/instr_paje_containers.c
src/instr/instr_private.h
src/msg/instr_msg_vm.c
src/msg/msg_private.h
src/surf/instr_routing.c
src/xbt/heap.c

@@@ -52,7 -52,7 +52,7 @@@ ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "
  ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh")
    message(STATUS "System processor: sh")
  
- ELSE() #PROCESSOR NOT fIND
+ ELSE() #PROCESSOR NOT FOUND
    message(STATUS "PROCESSOR NOT FOUND: ${CMAKE_SYSTEM_PROCESSOR}")
  
  ENDIF()
@@@ -118,7 -118,6 +118,6 @@@ CHECK_INCLUDE_FILE("sys/time.h" HAVE_SY
  CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
  CHECK_INCLUDE_FILE("sys/sysctl.h" HAVE_SYS_SYSCTL_H)
  CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H)
- CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
  CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H)
  CHECK_INCLUDE_FILE("memory.h" HAVE_MEMORY_H)
  CHECK_INCLUDE_FILE("stdlib.h" HAVE_STDLIB_H)
@@@ -157,10 -156,10 +156,10 @@@ else(
  endif()
  
  # Our usage of mmap is Linux-specific (flag MAP_ANONYMOUS), but kFreeBSD uses a GNU libc
 -IF(NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND NOT "${CMAKE_SYSTEM}" MATCHES "GNU")
 +IF(NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND NOT "${CMAKE_SYSTEM}" MATCHES "GNU" AND NOT  "${CMAKE_SYSTEM}" MATCHES "Darwin")
    SET(HAVE_MMAP 0)
    message(STATUS "Warning: MMAP is thought as non functional on this architecture (${CMAKE_SYSTEM})")
 -ENDIF()
 +ENDIF(NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND NOT "${CMAKE_SYSTEM}" MATCHES "GNU" AND NOT  "${CMAKE_SYSTEM}" MATCHES "Darwin")
  
  if(WIN32) #THOSE FILES ARE FUNCTIONS ARE NOT DETECTED BUT THEY SHOULD...
    set(HAVE_UCONTEXT_H 1)
@@@ -215,6 -214,40 +214,40 @@@ endif(
  CHECK_TYPE_SIZE(int SIZEOF_INT)
  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
+       WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+       OUTPUT_VARIABLE HAVE_GNU_LD_compil
+     )
+     if(HAVE_GNU_LD_compil)
+       set(HAVE_GNU_LD 0)
+       message(STATUS "Warning: test program toward GNU ld failed to compile:")
+       message(STATUS "${HAVE_GNU_LD_comp_output}")
+     else()
+       execute_process(COMMAND ./test_gnu_ld
+           WORKING_DIRECTORY ${CMAKE_BINARY_DIR} 
+           RESULT_VARIABLE HAVE_GNU_LD_run 
+           OUTPUT_VARIABLE var_exec
+       )
+       if(NOT HAVE_GNU_LD_run)
+         set(HAVE_GNU_LD 1)
+         message(STATUS "We are using GNU dynamic linker")
+       else()
+         set(HAVE_GNU_LD 0)
+         message(STATUS "Warning: error while checking for GNU ld:")
+         message(STATUS "Test output: '${var_exec}'")
+       message(STATUS "Exit status: ${HAVE_GNU_LD_run}")
+       endif()
+       file(REMOVE test_gnu_ld)
+     endif()
+ endif()
  #--------------------------------------------------------------------------------------------------
  ### Initialize of CONTEXT THREADS
  
@@@ -541,7 -574,7 +574,7 @@@ endif(
  
  #AC_PROG_MAKE_SET
  
- #AC_PRINTF_NULL
+ #AC_PRINTF_NULL FIXME: this is too ancient to survive!
  try_run(RUN_PRINTF_NULL_VAR COMPILE_PRINTF_NULL_VAR
    ${CMAKE_BINARY_DIR}
    ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_printf_null.c
@@@ -757,6 -790,7 +790,7 @@@ configure_file(${CMAKE_HOME_DIRECTORY}/
  configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_BINARY_DIR}/bin/smpicc @ONLY)
  configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/bin/smpif2c @ONLY)
  configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/bin/smpiff @ONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif90.in ${CMAKE_BINARY_DIR}/bin/smpif90 @ONLY)
  configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpirun.in ${CMAKE_BINARY_DIR}/bin/smpirun @ONLY)
  
  ### Script used when simgrid is compiling
@@@ -770,6 -804,7 +804,7 @@@ set(libdir "${CMAKE_BINARY_DIR}/lib"
  configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc @ONLY)
  configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif2c @ONLY)
  configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff @ONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif90.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90 @ONLY)
  configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpirun.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun @ONLY)
  
  set(top_builddir ${CMAKE_HOME_DIRECTORY})
@@@ -778,10 -813,12 +813,12 @@@ if(NOT WIN32
    execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicc)
    execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif2c)
    execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpiff)
+   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif90)
    execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun)
    execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc)
    execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif2c)
    execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff)
+   execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90)
    execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun)
  endif()
  
@@@ -801,6 -838,7 +838,7 @@@ set(generated_files_to_clea
    ${CMAKE_BINARY_DIR}/bin/smpicc
    ${CMAKE_BINARY_DIR}/bin/smpif2c
    ${CMAKE_BINARY_DIR}/bin/smpiff
+   ${CMAKE_BINARY_DIR}/bin/smpif90
    ${CMAKE_BINARY_DIR}/bin/smpirun
    ${CMAKE_BINARY_DIR}/bin/colorize
    ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
@@@ -817,7 -855,10 +855,10 @@@ else(
    configure_file(${CMAKE_HOME_DIRECTORY}/examples/msg/tracing/platform.xml ${CMAKE_BINARY_DIR}/examples/msg/tracing/platform.xml COPYONLY)
    configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
    configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
+   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allReduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allReduce.txt COPYONLY)
+   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
    configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
+   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
    configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
  
    set(generated_files_to_clean
      ${CMAKE_BINARY_DIR}/examples/msg/tracing/platform.xml
      ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
      ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
+     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allReduce.txt
+     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
      ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
+     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
      ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
      )
  endif()
@@@ -1,9 -1,12 +1,12 @@@
  ### define source packages
  
  set(EXTRA_DIST
+   src/include/smpi/smpi_interface.h
+   src/include/instr/instr_interface.h
    src/include/mc/datatypes.h
    src/include/mc/mc.h
    src/include/simgrid/platf_interface.h
+   src/include/simgrid/sg_config.h
    src/include/surf/datatypes.h
    src/include/surf/maxmin.h
    src/include/surf/random_mgr.h
    src/xbt/mmalloc/mmtrace.awk
    src/xbt/mmalloc/mrealloc.c
    src/xbt/setset_private.h
+   src/win32/config.h
+   src/xbt/win32_ucontext.c
+   include/xbt/win32_ucontext.h
    tools/tesh/run_context.h
    tools/tesh/tesh.h
    )
  
  set(SMPI_SRC
+   src/smpi/instr_smpi.c
    src/smpi/smpi_base.c
    src/smpi/smpi_bench.c
    src/smpi/smpi_c99.c
@@@ -181,6 -188,8 +188,8 @@@ set(SURF_SR
    src/surf/cpu_cas01.c
    src/surf/cpu_ti.c
    src/surf/fair_bottleneck.c
+   src/surf/instr_routing.c
+   src/surf/instr_surf.c
    src/surf/lagrange.c
    src/surf/maxmin.c
    src/surf/network.c
    src/surf/storage.c
    src/surf/surf.c
    src/surf/surf_action.c
-   src/surf/surf_config.c
    src/surf/surf_model.c
    src/surf/surf_routing.c
    src/surf/surf_routing_cluster.c
@@@ -226,9 -234,14 +234,15 @@@ set(SIMIX_SR
    src/simix/smx_user.c
    )
  
+ set(SIMGRID_SRC
+   src/simgrid/sg_config.c
+   )
  set(MSG_SRC
+   src/msg/instr_msg_process.c
+   src/msg/instr_msg_task.c
++  src/msg/instr_msg_vm.c
    src/msg/msg_actions.c
-   src/msg/msg_config.c
    src/msg/msg_deployment.c
    src/msg/msg_environment.c
    src/msg/msg_global.c
@@@ -310,9 -323,6 +324,6 @@@ set(LUA_SR
  set(TRACING_SRC
    src/instr/instr_config.c
    src/instr/instr_interface.c
-   src/instr/instr_msg_process.c
-   src/instr/instr_msg_vm.c
-   src/instr/instr_msg_task.c
    src/instr/instr_paje_containers.c
    src/instr/instr_paje_trace.c
    src/instr/instr_paje_header.c
    src/instr/instr_paje_values.c
    src/instr/instr_private.h
    src/instr/instr_resource_utilization.c
-   src/instr/instr_routing.c
-   src/instr/instr_smpi.c
-   src/instr/instr_surf.c
    )
  
  set(JEDULE_SRC
@@@ -454,15 -461,39 +462,39 @@@ endif(
  set(simgrid_sources
    ${BINDINGS_SRC}
    ${GTNETS_USED}
-   ${JEDULE_SRC}
    ${MSG_SRC}
    ${SIMDAG_SRC}
+   ${SIMGRID_SRC}
    ${SIMIX_SRC}
    ${SURF_SRC}
    ${TRACING_SRC}
    ${XBT_SRC}
    )
  
+ if(${HAVE_JEDULE})
+   set(simgrid_sources
+     ${simgrid_sources}
+     ${JEDULE_SRC}
+     )
+ else()
+   set(EXTRA_DIST
+     ${EXTRA_DIST}
+     ${JEDULE_SRC}
+     )
+ endif()
+ if(${HAVE_TRACING})
+   set(simgrid_sources
+     ${simgrid_sources}
+     ${TRACING_SRC}
+     )
+ else()
+   set(EXTRA_DIST
+     ${EXTRA_DIST}
+     ${TRACING_SRC}
+     )
+ endif()
  if(HAVE_MC)
    set(simgrid_sources
      ${simgrid_sources}
@@@ -505,13 -536,41 +537,41 @@@ set(DOC_SOURCE
    doc/simix.fig
    doc/surf_nutshell.fig
    doc/Doxyfile.in
-   doc/FAQ.doc
-   doc/index.doc
-   doc/simgrid.css
-   doc/SimgridDoxygenLayout.xml
+   doc/Layout.xml
    doc/triva-graph_configuration.png
    doc/triva-graph_visualization.png
    doc/triva-time_interval.png
+   
+     doc/doxygen/footer.html
+   doc/doxygen/header.html
+   doc/doxygen/stylesheet.css
+   
+   doc/doxygen/index.doc
+   doc/doxygen/getting_started.doc  
+   doc/doxygen/introduction.doc
+   doc/doxygen/use.doc
+   doc/doxygen/bindings.doc
+   doc/doxygen/deployment.doc
+   doc/doxygen/install.doc
+   doc/doxygen/options.doc
+   doc/doxygen/platform.doc
+   doc/doxygen/pls.doc
+   doc/doxygen/tracing.doc
+   doc/doxygen/FAQ.doc
+   doc/doxygen/advanced.doc
+     doc/doxygen/inside_autotests.doc  
+     doc/doxygen/inside_cmake.doc
+     doc/doxygen/inside_extending.doc 
+     doc/doxygen/inside_release.doc
+     doc/doxygen/contributing.doc
+   doc/doxygen/modules.doc
+     doc/doxygen/module-msg.doc
+     doc/doxygen/module-sd.doc
+     doc/doxygen/module-simix.doc
+     doc/doxygen/module-surf.doc
+     doc/doxygen/module-trace.doc
+     doc/doxygen/module-xbt.doc
    )
  
  set(DOC_FIGS
    ${CMAKE_HOME_DIRECTORY}/doc/shared/fig/simgrid_modules2.fig
    )
    
- set(DOC_SHARED_TAG
-   doc/shared/doxygen/simgriddevguide.tag
-   doc/shared/doxygen/simgridrefguide.tag
-   doc/shared/doxygen/simgriduserguide.tag
-   )
-   
  set(DOC_TOOLS
    tools/doxygen/fig2dev_postprocessor.pl
    tools/doxygen/index_create.pl
    tools/doxygen/xbt_log_extract_hierarchy.pl
    )
  
- set(USER_GUIDE_SOURCES
-   doc/user_guide/doxygen/footer.html
-   doc/user_guide/doxygen/header.html
-   doc/user_guide/doxygen/UserGuideDoxyfile.in
-   doc/user_guide/doxygen/UserGuideDoxygenLayout.xml
-   doc/user_guide/doxygen/bindings.doc
-   doc/user_guide/doxygen/deployment.doc
-   doc/user_guide/doxygen/examples.doc
-   doc/user_guide/doxygen/index.doc
-   doc/user_guide/doxygen/install.doc
-   doc/user_guide/doxygen/options.doc
-   doc/user_guide/doxygen/platform.doc
-   doc/user_guide/doxygen/pls.doc
-   doc/user_guide/doxygen/tracing.doc
-   doc/user_guide/doxygen/use.doc
-   doc/user_guide/doxygen/stylesheet.css
-   )
-     
- set(REF_GUIDE_SOURCES
-   doc/ref_guide/doxygen/footer.html
-   doc/ref_guide/doxygen/header.html
-   doc/ref_guide/doxygen/main.doc
-   doc/ref_guide/doxygen/module-msg.doc
-   doc/ref_guide/doxygen/module-sd.doc
-   doc/ref_guide/doxygen/module-simix.doc
-   doc/ref_guide/doxygen/module-surf.doc
-   doc/ref_guide/doxygen/module-trace.doc
-   doc/ref_guide/doxygen/module-xbt.doc
-   doc/ref_guide/doxygen/modules.doc
-   doc/ref_guide/doxygen/RefGuideDoxyfile.in
-   doc/ref_guide/doxygen/RefGuideDoxygenLayout.xml
-   doc/ref_guide/doxygen/stylesheet.css
-   )
- set(DEV_GUIDE_SOURCES
-   doc/dev_guide/doxygen/footer.html
-   doc/dev_guide/doxygen/header.html
-   doc/dev_guide/doxygen/index.doc
-   doc/dev_guide/doxygen/cmake.doc
-   doc/dev_guide/doxygen/simgrid.doc
-   doc/dev_guide/doxygen/xps.doc
-   doc/dev_guide/doxygen/DevGuideDoxyfile.in
-   doc/dev_guide/doxygen/DevGuideDoxygenLayout.xml
-   doc/dev_guide/doxygen/stylesheet.css
-   )
+ # these files get copied automatically to the html documentation
  set(DOC_IMG
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/awstats_logo3.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot.jpg
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot_thn.jpg
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/poster_thumbnail.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/README
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.gif
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.icns
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.ico
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_001.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_002.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_003.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_004.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_005.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_006.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_007.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_008.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_009.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_010.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_011.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_012.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_013.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_014.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_015.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_016.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_017.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_018.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_019.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_020.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_021.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_022.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_023.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_024.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_025.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_026.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_027.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_028.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_029.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_030.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101.pdf
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.gif
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011_small.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win_2011.bmp
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win.bmp
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_01.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_02.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_03.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_04.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_05.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_06.png
- )
+   ${CMAKE_HOME_DIRECTORY}/doc/simgrid.css
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot.jpg
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot_thn.jpg
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.gif
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.icns
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.ico
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/awstats_logo3.png
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/output.goal.pdf
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/poster_thumbnail.png
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.gif
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.png
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011_small.png
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win.bmp
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win_2011.bmp
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_01.png
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_02.png
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_03.png
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_04.png
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_05.png
+   ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_06.png
+   )
  
  set(bin_files
    ${bin_files}
    src/smpi/smpicc.in
    src/smpi/smpif2c.in
    src/smpi/smpiff.in
+   src/smpi/smpif90.in
    src/smpi/smpirun.in
    )
  
@@@ -643,6 -621,7 +622,7 @@@ set(txt_file
    ${txt_files}
    AUTHORS
    COPYING
+   README
    ChangeLog
    INSTALL
    LICENSE-LGPL-2.1
@@@ -672,6 -651,7 +652,7 @@@ set(EXAMPLES_CMAKEFILES_TX
    examples/msg/priority/CMakeLists.txt
    examples/msg/properties/CMakeLists.txt
    examples/msg/sendrecv/CMakeLists.txt
+   examples/msg/chainsend/CMakeLists.txt
    examples/msg/start_kill_time/CMakeLists.txt
    examples/msg/suspend/CMakeLists.txt
    examples/msg/token_ring/CMakeLists.txt
@@@ -729,9 -709,6 +710,6 @@@ set(CMAKE_SOURCE_FILE
    buildtools/Cmake/Flags.cmake
    buildtools/Cmake/GenerateDoc.cmake
    buildtools/Cmake/GenerateDocWin.cmake
-   buildtools/Cmake/GenerateRefGuide.cmake
-   buildtools/Cmake/GenerateUserGuide.cmake
-   buildtools/Cmake/GenerateDevGuide.cmake
    buildtools/Cmake/MaintainerMode.cmake
    buildtools/Cmake/MakeExe.cmake
    buildtools/Cmake/MakeLib.cmake
    buildtools/Cmake/test_prog/prog_thread_storage.c
    buildtools/Cmake/test_prog/prog_va_copy.c
    buildtools/Cmake/test_prog/prog_vsnprintf.c
+   buildtools/Cmake/test_prog/prog_gnu_dynlinker.c
    )
  
  set(PLATFORMS_EXAMPLES
diff --combined include/msg/msg.h
@@@ -32,7 -32,7 +32,7 @@@ typedef enum 
  /** @} */
  
  /************************** Global ******************************************/
- XBT_PUBLIC(void) MSG_config(const char *name, ...);
+ XBT_PUBLIC(void) MSG_config(const char *key, const char *value);
  /** \ingroup msg_simulation
   *  \brief Initialize the MSG internal data.
   *  \hideinitializer
@@@ -324,6 -324,8 +324,6 @@@ XBT_PUBLIC(msg_error_t) MSG_set_channel
  XBT_PUBLIC(int) MSG_get_channel_number(void);
  #endif
  
 -#include "instr/instr.h"
 -
  /** @brief Opaque type describing a Virtual Machine.
   *  @ingroup msg_VMs
   *
   * Usual lack of guaranty of any kind applies here, and is even increased.
   *
   */
 -typedef struct msg_vm *msg_vm_t;
  /* This function should not be called directly, but rather from MSG_vm_start_from_template that does not exist yet*/
 -XBT_PUBLIC(msg_vm_t) MSG_vm_start(msg_host_t location, int coreAmount);
 +XBT_PUBLIC(msg_vm_t) MSG_vm_start(msg_host_t location, const char *name, int coreAmount);
  
  XBT_PUBLIC(int) MSG_vm_is_suspended(msg_vm_t);
  XBT_PUBLIC(int) MSG_vm_is_running(msg_vm_t);
@@@ -376,8 -379,6 +376,8 @@@ xbt_dynar_t<msg_vm_t> MSG_vm_get_list_f
  xbt_dynar_t<msg_vm_t> MSG_vm_get_list_from_hosts(msg_dynar_t<msg_host_t>)
  + des fonctions de filtrage sur les dynar
  */
 +#include "instr/instr.h"
 +
  
  
  /* ****************************************************************************************** */
diff --combined src/instr/instr_config.c
@@@ -4,8 -4,9 +4,9 @@@
  /* 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 "instr/instr_private.h"
+ #include "simgrid/sg_config.h"
+ #include "surf/surf.h"
  
  #ifdef HAVE_TRACING
  
@@@ -21,7 -22,6 +22,7 @@@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_
  #define OPT_TRACING_CATEGORIZED   "tracing/categorized"
  #define OPT_TRACING_UNCATEGORIZED "tracing/uncategorized"
  #define OPT_TRACING_MSG_PROCESS   "tracing/msg/process"
 +#define OPT_TRACING_MSG_VM        "tracing/msg/vm"
  #define OPT_TRACING_FILENAME      "tracing/filename"
  #define OPT_TRACING_BUFFER        "tracing/buffer"
  #define OPT_TRACING_ONELINK_ONLY  "tracing/onelink_only"
@@@ -41,7 -41,6 +42,7 @@@ static int trace_smpi_computing
  static int trace_categorized;
  static int trace_uncategorized;
  static int trace_msg_process_enabled;
 +static int trace_msg_vm_enabled;
  static int trace_buffer;
  static int trace_onelink_only;
  static int trace_disable_destroy;
@@@ -50,22 -49,31 +51,32 @@@ static int trace_basic
  static int trace_configured = 0;
  static int trace_active = 0;
  
  static void TRACE_getopts(void)
  {
-   trace_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING);
-   trace_platform = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_PLATFORM);
-   trace_platform_topology = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_TOPOLOGY);
-   trace_smpi_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI);
-   trace_smpi_grouped = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI_GROUP);
-   trace_smpi_computing = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI_COMPUTING);
-   trace_categorized = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_CATEGORIZED);
-   trace_uncategorized = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_UNCATEGORIZED);
-   trace_msg_process_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_PROCESS);
-   trace_msg_vm_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_VM);
-   trace_buffer = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_BUFFER);
-   trace_onelink_only = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_ONELINK_ONLY);
-   trace_disable_destroy = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_DISABLE_DESTROY);
-   trace_basic = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_BASIC);
+   trace_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING);
+   trace_platform = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_PLATFORM);
+   trace_platform_topology = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_TOPOLOGY);
+   trace_smpi_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI);
+   trace_smpi_grouped = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_GROUP);
+   trace_smpi_computing = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING);
+   trace_categorized = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_CATEGORIZED);
+   trace_uncategorized = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_UNCATEGORIZED);
+   trace_msg_process_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_MSG_PROCESS);
++  trace_msg_vm_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_MSG_VM);
+   trace_buffer = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_BUFFER);
+   trace_onelink_only = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_ONELINK_ONLY);
+   trace_disable_destroy = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_DISABLE_DESTROY);
+   trace_basic = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_BASIC);
+ }
+ xbt_dynar_t TRACE_start_functions = NULL;
+ void TRACE_add_start_function(void (*func) ())
+ {
+   if (TRACE_start_functions == NULL)
+     TRACE_start_functions = xbt_dynar_new(sizeof(void (*)()), NULL);
+   xbt_dynar_push(TRACE_start_functions, &func);
  }
  
  int TRACE_start()
    // tracing system must be:
    //    - enabled (with --cfg=tracing:1)
    //    - already configured (TRACE_global_init already called)
-   if (!(TRACE_is_enabled() && TRACE_is_configured())){
-     return 0;
+   if (TRACE_is_enabled() && TRACE_is_configured()) {
+     XBT_DEBUG("Tracing starts");
+     /* open the trace file */
+     TRACE_paje_start();
+     /* activate trace */
+     if (trace_active == 1) {
+       THROWF(tracing_error, 0, "Tracing is already active");
+     }
+     trace_active = 1;
+     XBT_DEBUG("Tracing is on");
+     /* other trace initialization */
+     created_categories = xbt_dict_new_homogeneous(xbt_free);
+     declared_marks = xbt_dict_new_homogeneous(xbt_free);
+     user_host_variables = xbt_dict_new_homogeneous(xbt_free);
++    user_vm_variables = xbt_dict_new_homogeneous (xbt_free);
+     user_link_variables = xbt_dict_new_homogeneous(xbt_free);
+     if (TRACE_start_functions != NULL) {
+       void (*func) ();
+       unsigned int iter = xbt_dynar_length(TRACE_start_functions);
+       xbt_dynar_foreach(TRACE_start_functions, iter, func) {
+         func();
+       }
+     }
    }
-   XBT_DEBUG("Tracing starts");
-   /* open the trace file */
-   TRACE_paje_start();
-   /* activate trace */
-   if (trace_active == 1){
-     THROWF (tracing_error, 0, "Tracing is already active");
-   }
-   trace_active = 1;
-   XBT_DEBUG ("Tracing is on");
-   /* other trace initialization */
-   created_categories = xbt_dict_new_homogeneous(xbt_free);
-   declared_marks = xbt_dict_new_homogeneous (xbt_free);
-   user_host_variables = xbt_dict_new_homogeneous (xbt_free);
-   user_vm_variables = xbt_dict_new_homogeneous (xbt_free);
-   user_link_variables = xbt_dict_new_homogeneous (xbt_free);
-   TRACE_surf_alloc();
-   TRACE_smpi_alloc();
+   xbt_dynar_free(&TRACE_start_functions);
    return 0;
  }
  
+ xbt_dynar_t TRACE_end_functions = NULL;
+ void TRACE_add_end_function(void (*func) (void))
+ {
+   if (TRACE_end_functions == NULL)
+     TRACE_end_functions = xbt_dynar_new(sizeof(void (*)(void)), NULL);
+   xbt_dynar_push(TRACE_end_functions, &func);
+ }
  int TRACE_end()
  {
-   if (!trace_active)
-     return 1;
-   TRACE_generate_viva_uncat_conf();
-   TRACE_generate_viva_cat_conf();
-   /* dump trace buffer */
-   TRACE_last_timestamp_to_dump = surf_get_clock();
-   TRACE_paje_dump_buffer(1);
-   /* destroy all data structures of tracing (and free) */
-   PJ_container_free_all();
-   PJ_type_free_all();
-   PJ_container_release();
-   PJ_type_release();
-   TRACE_smpi_release();
-   TRACE_surf_release();
-   xbt_dict_free(&user_link_variables);
-   xbt_dict_free(&user_host_variables);
-   xbt_dict_free(&user_vm_variables);
-   xbt_dict_free(&declared_marks);
-   xbt_dict_free(&created_categories);
-   /* close the trace file */
-   TRACE_paje_end();
-   /* de-activate trace */
-   trace_active = 0;
-   XBT_DEBUG ("Tracing is off");
-   XBT_DEBUG("Tracing system is shutdown");
-   return 0;
+   int retval;
+   if (!trace_active) {
+     retval = 1;
+   } else {
+     retval = 0;
+     TRACE_generate_viva_uncat_conf();
+     TRACE_generate_viva_cat_conf();
+     /* dump trace buffer */
+     TRACE_last_timestamp_to_dump = surf_get_clock();
+     TRACE_paje_dump_buffer(1);
+     /* destroy all data structures of tracing (and free) */
+     PJ_container_free_all();
+     PJ_type_free_all();
+     PJ_container_release();
+     PJ_type_release();
+     if (TRACE_end_functions != NULL) {
+       void (*func) (void);
+       unsigned int iter;
+       xbt_dynar_foreach(TRACE_end_functions, iter, func) {
+         func();
+       }
+     }
+     xbt_dict_free(&user_link_variables);
+     xbt_dict_free(&user_host_variables);
++    xbt_dict_free(&user_vm_variables);
+     xbt_dict_free(&declared_marks);
+     xbt_dict_free(&created_categories);
+     /* close the trace file */
+     TRACE_paje_end();
+     /* de-activate trace */
+     trace_active = 0;
+     XBT_DEBUG("Tracing is off");
+     XBT_DEBUG("Tracing system is shutdown");
+   }
+   xbt_dynar_free(&TRACE_end_functions);
+   return retval;
  }
  
  int TRACE_needs_platform (void)
  {
    return TRACE_msg_process_is_enabled() ||
 +         TRACE_msg_vm_is_enabled() ||
           TRACE_categorized() ||
           TRACE_uncategorized() ||
           TRACE_platform () ||
@@@ -200,12 -229,6 +235,12 @@@ int TRACE_msg_process_is_enabled(void
    return trace_msg_process_enabled && TRACE_is_enabled();
  }
  
 +int TRACE_msg_vm_is_enabled(void)
 +{
 +  return trace_msg_vm_enabled && TRACE_is_enabled();
 +}
 +
 +
  int TRACE_buffer (void)
  {
    return trace_buffer && TRACE_is_enabled();
@@@ -228,160 -251,153 +263,160 @@@ int TRACE_basic (void
  
  char *TRACE_get_comment (void)
  {
-   return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_COMMENT);
+   return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_COMMENT);
  }
  
  char *TRACE_get_comment_file (void)
  {
-   return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_COMMENT_FILE);
+   return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_COMMENT_FILE);
  }
  
  char *TRACE_get_filename(void)
  {
-   return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_FILENAME);
+   return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_FILENAME);
  }
  
  char *TRACE_get_viva_uncat_conf (void)
  {
-   return xbt_cfg_get_string(_surf_cfg_set, OPT_VIVA_UNCAT_CONF);
+   return xbt_cfg_get_string(_sg_cfg_set, OPT_VIVA_UNCAT_CONF);
  }
  
  char *TRACE_get_viva_cat_conf (void)
  {
-   return xbt_cfg_get_string(_surf_cfg_set, OPT_VIVA_CAT_CONF);
+   return xbt_cfg_get_string(_sg_cfg_set, OPT_VIVA_CAT_CONF);
  }
  
  void TRACE_global_init(int *argc, char **argv)
  {
    /* name of the tracefile */
    char *default_tracing_filename = xbt_strdup("simgrid.trace");
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_FILENAME,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_FILENAME,
                     "Trace file created by the instrumented SimGrid.",
                     xbt_cfgelm_string, &default_tracing_filename, 1, 1,
                     NULL, NULL);
  
    /* tracing */
    int default_tracing = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING,
                     "Enable Tracing.",
                     xbt_cfgelm_int, &default_tracing, 0, 1,
                     NULL, NULL);
  
    /* register platform in the trace */
    int default_tracing_platform = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_PLATFORM,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_PLATFORM,
                     "Register the platform in the trace as a hierarchy.",
                     xbt_cfgelm_int, &default_tracing_platform, 0, 1,
                     NULL, NULL);
  
    /* register platform in the trace */
    int default_tracing_platform_topology = 1;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_TOPOLOGY,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_TOPOLOGY,
                     "Register the platform topology in the trace as a graph.",
                     xbt_cfgelm_int, &default_tracing_platform_topology, 0, 1,
                     NULL, NULL);
  
    /* smpi */
    int default_tracing_smpi = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI,
                     "Tracing of the SMPI interface.",
                     xbt_cfgelm_int, &default_tracing_smpi, 0, 1,
                     NULL, NULL);
  
    /* smpi grouped */
    int default_tracing_smpi_grouped = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI_GROUP,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_GROUP,
                     "Group MPI processes by host.",
                     xbt_cfgelm_int, &default_tracing_smpi_grouped, 0, 1,
                     NULL, NULL);
  
    /* smpi computing */
    int default_tracing_smpi_computing = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI_COMPUTING,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING,
                     "Generate states for timing out of SMPI parts of the application",
                     xbt_cfgelm_int, &default_tracing_smpi_computing, 0, 1,
                     NULL, NULL);
  
    /* tracing categorized resource utilization traces */
    int default_tracing_categorized = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_CATEGORIZED,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_CATEGORIZED,
                     "Tracing categorized resource utilization of hosts and links.",
                     xbt_cfgelm_int, &default_tracing_categorized, 0, 1,
                     NULL, NULL);
  
    /* tracing uncategorized resource utilization */
    int default_tracing_uncategorized = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_UNCATEGORIZED,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_UNCATEGORIZED,
                     "Tracing uncategorized resource utilization of hosts and links.",
                     xbt_cfgelm_int, &default_tracing_uncategorized, 0, 1,
                     NULL, NULL);
  
    /* msg process */
    int default_tracing_msg_process = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_MSG_PROCESS,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_MSG_PROCESS,
                     "Tracing of MSG process behavior.",
                     xbt_cfgelm_int, &default_tracing_msg_process, 0, 1,
                     NULL, NULL);
  
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_MSG_VM,
 +  /* msg process */
 +  int default_tracing_msg_vm = 0;
++  xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_MSG_VM,
 +                   "Tracing of MSG process behavior.",
 +                   xbt_cfgelm_int, &default_tracing_msg_vm, 0, 1,
 +                   NULL, NULL);
 +
    /* tracing buffer */
    int default_buffer = 1;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_BUFFER,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_BUFFER,
                     "Buffer trace events to put them in temporal order.",
                     xbt_cfgelm_int, &default_buffer, 0, 1,
                     NULL, NULL);
  
    /* tracing one link only */
    int default_onelink_only = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_ONELINK_ONLY,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_ONELINK_ONLY,
                     "Use only routes with one link to trace platform.",
                     xbt_cfgelm_int, &default_onelink_only, 0, 1,
                     NULL, NULL);
  
    /* disable destroy */
    int default_disable_destroy = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_DISABLE_DESTROY,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_DISABLE_DESTROY,
                     "Disable platform containers destruction.",
                     xbt_cfgelm_int, &default_disable_destroy, 0, 1,
                     NULL, NULL);
  
    /* basic -- Avoid extended events (impoverished trace file) */
    int default_basic = 0;
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_BASIC,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_BASIC,
                     "Avoid extended events (impoverished trace file).",
                     xbt_cfgelm_int, &default_basic, 0, 1,
                     NULL, NULL);
  
    /* comment */
    char *default_tracing_comment = xbt_strdup ("");
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_COMMENT,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_COMMENT,
                     "Comment to be added on the top of the trace file.",
                     xbt_cfgelm_string, &default_tracing_comment, 1, 1,
                     NULL, NULL);
  
    /* comment_file */
    char *default_tracing_comment_file = xbt_strdup ("");
-   xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_COMMENT_FILE,
+   xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_COMMENT_FILE,
                     "The contents of the file are added to the top of the trace file as comment.",
                     xbt_cfgelm_string, &default_tracing_comment_file, 1, 1,
                     NULL, NULL);
  
    /* Viva graph configuration for uncategorized tracing */
    char *default_viva_uncat_conf_file = xbt_strdup ("");
-   xbt_cfg_register(&_surf_cfg_set, OPT_VIVA_UNCAT_CONF,
+   xbt_cfg_register(&_sg_cfg_set, OPT_VIVA_UNCAT_CONF,
                     "Viva Graph configuration file for uncategorized resource utilization traces.",
                     xbt_cfgelm_string, &default_viva_uncat_conf_file, 1, 1,
                     NULL, NULL);
  
    /* Viva graph configuration for uncategorized tracing */
    char *default_viva_cat_conf_file = xbt_strdup ("");
-   xbt_cfg_register(&_surf_cfg_set, OPT_VIVA_CAT_CONF,
+   xbt_cfg_register(&_sg_cfg_set, OPT_VIVA_CAT_CONF,
                     "Viva Graph configuration file for categorized resource utilization traces.",
                     xbt_cfgelm_string, &default_viva_cat_conf_file, 1, 1,
                     NULL, NULL);
@@@ -5,6 -5,9 +5,9 @@@
    * under the terms of the license (GNU LGPL) which comes with this package. */
  
  #include "instr/instr_private.h"
+ #include "xbt/lib.h"
+ #include "surf/surf.h"
+ #include "surf/surf_routing.h"
  
  #ifdef HAVE_TRACING
  
@@@ -104,7 -107,6 +107,7 @@@ container_t PJ_container_new (const cha
        case INSTR_ROUTER:      snprintf (typename, INSTR_DEFAULT_STR_SIZE, "ROUTER");      break;
        case INSTR_SMPI:        snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MPI");         break;
        case INSTR_MSG_PROCESS: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MSG_PROCESS"); break;
 +      case INSTR_MSG_VM: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MSG_VM"); break;
        case INSTR_MSG_TASK:    snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MSG_TASK");    break;
        default: THROWF (tracing_error, 0, "new container kind is unknown."); break;
      }
@@@ -7,6 -7,8 +7,8 @@@
  #ifndef INSTR_PRIVATE_H_
  #define INSTR_PRIVATE_H_
  
+ #include "instr/instr.h"
+ #include "instr/instr_interface.h"
  #include "simgrid_config.h"
  
  #ifdef HAVE_TRACING
  
  #define INSTR_DEFAULT_STR_SIZE 500
  
- #include "instr/instr.h"
- #include "msg/msg.h"
- #include "simdag/private.h"
- #include "simix/smx_private.h"
- #include "xbt/graph_private.h"
+ #include "xbt/graph.h"
+ #include "xbt/dict.h"
+ #include "simgrid/platf.h"
  
  typedef enum {
    PAJE_DefineContainerType,
@@@ -78,7 -78,6 +78,7 @@@ typedef enum 
    INSTR_ROUTER,
    INSTR_AS,
    INSTR_SMPI,
 +  INSTR_MSG_VM,
    INSTR_MSG_PROCESS,
    INSTR_MSG_TASK
  } e_container_types;
@@@ -98,7 -97,6 +98,7 @@@ typedef struct s_container 
  extern xbt_dict_t created_categories;
  extern xbt_dict_t declared_marks;
  extern xbt_dict_t user_host_variables;
 +extern xbt_dict_t user_vm_variables;
  extern xbt_dict_t user_link_variables;
  extern double TRACE_last_timestamp_to_dump;
  
@@@ -128,75 -126,10 +128,10 @@@ void new_pajeStartLink (double timestam
  void new_pajeEndLink (double timestamp, container_t container, type_t type, container_t destContainer, const char *value, const char *key);
  void new_pajeNewEvent (double timestamp, container_t container, type_t type, val_t value);
  
- /* declaration of instrumentation functions from msg_task_instr.c */
- void TRACE_msg_set_task_category(msg_task_t task, const char *category);
- void TRACE_msg_task_create(msg_task_t task);
- void TRACE_msg_task_execute_start(msg_task_t task);
- void TRACE_msg_task_execute_end(msg_task_t task);
- void TRACE_msg_task_destroy(msg_task_t task);
- void TRACE_msg_task_get_start(void);
- void TRACE_msg_task_get_end(double start_time, msg_task_t task);
- int TRACE_msg_task_put_start(msg_task_t task);    //returns TRUE if the task_put_end must be called
- void TRACE_msg_task_put_end(void);
- /* declaration of instrumentation functions from msg_process_instr.c */
- char *instr_process_id (msg_process_t proc, char *str, int len);
- char *instr_process_id_2 (const char *process_name, int process_pid, char *str, int len);
- void TRACE_msg_process_change_host(msg_process_t process, msg_host_t old_host,
-                                    msg_host_t new_host);
- void TRACE_msg_process_create (const char *process_name, int process_pid, msg_host_t host);
- void TRACE_msg_process_destroy (const char *process_name, int process_pid, msg_host_t host);
- void TRACE_msg_process_kill(msg_process_t process);
- void TRACE_msg_process_suspend(msg_process_t process);
- void TRACE_msg_process_resume(msg_process_t process);
- void TRACE_msg_process_sleep_in(msg_process_t process);   //called from msg/gos.c
- void TRACE_msg_process_sleep_out(msg_process_t process);
- void TRACE_msg_process_end(msg_process_t process);
- /* declaration of instrumentation functions from instr_msg_vm.c */
- char *instr_vm_id (msg_vm_t vm, char *str, int len);
- char *instr_vm_id_2 (const char *vm_name, char *str, int len);
- void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host,
-                                    msg_host_t new_host);
- void TRACE_msg_vm_create (const char *vm_name, msg_host_t host);
- void TRACE_msg_vm_kill(msg_vm_t process);
- void TRACE_msg_vm_suspend(msg_vm_t vm);
- void TRACE_msg_vm_resume(msg_vm_t vm);
- void TRACE_msg_vm_sleep_in(msg_vm_t vm); 
- void TRACE_msg_vm_sleep_out(msg_vm_t vm);
- void TRACE_msg_vm_end(msg_vm_t vm);
- /* from surf_instr.c */
- void TRACE_surf_alloc(void);
- void TRACE_surf_release(void);
- void TRACE_surf_host_set_power(double date, const char *resource, double power);
- void TRACE_surf_link_set_bandwidth(double date, const char *resource, double bandwidth);
- void TRACE_surf_link_set_latency(double date, const char *resource, double latency);
- void TRACE_surf_action(surf_action_t surf_action, const char *category);
  //for tracing gtnets
  void TRACE_surf_gtnets_communicate(void *action, void *src, void *dst);
  
- /* from smpi_instr.c */
- void TRACE_internal_smpi_set_category (const char *category);
- const char *TRACE_internal_smpi_get_category (void);
- void TRACE_smpi_alloc(void);
- void TRACE_smpi_release(void);
- void TRACE_smpi_init(int rank);
- void TRACE_smpi_finalize(int rank);
- void TRACE_smpi_collective_in(int rank, int root, const char *operation);
- void TRACE_smpi_collective_out(int rank, int root, const char *operation);
- void TRACE_smpi_computing_init(int rank);
- void TRACE_smpi_computing_out(int rank);
- void TRACE_smpi_computing_in(int rank);
- void TRACE_smpi_ptp_in(int rank, int src, int dst, const char *operation);
- void TRACE_smpi_ptp_out(int rank, int src, int dst, const char *operation);
- void TRACE_smpi_send(int rank, int src, int dst);
- void TRACE_smpi_recv(int rank, int src, int dst);
  /* from instr_config.c */
- int TRACE_start (void);
- int TRACE_end (void);
  int TRACE_needs_platform (void);
  int TRACE_is_enabled(void);
  int TRACE_platform(void);
@@@ -208,7 -141,6 +143,7 @@@ int TRACE_smpi_is_computing(void)
  int TRACE_categorized (void);
  int TRACE_uncategorized (void);
  int TRACE_msg_process_is_enabled(void);
 +int TRACE_msg_vm_is_enabled(void);
  int TRACE_buffer (void);
  int TRACE_onelink_only (void);
  int TRACE_disable_destroy (void);
@@@ -218,8 -150,6 +153,6 @@@ char *TRACE_get_comment_file (void)
  char *TRACE_get_filename(void);
  char *TRACE_get_viva_uncat_conf (void);
  char *TRACE_get_viva_cat_conf (void);
- void TRACE_global_init(int *argc, char **argv);
- void TRACE_help(int detailed);
  void TRACE_generate_viva_uncat_conf (void);
  void TRACE_generate_viva_cat_conf (void);
  void instr_pause_tracing (void);
@@@ -237,7 -167,6 +170,6 @@@ void TRACE_surf_link_set_utilization(co
                                       double now,
                                       double delta);
  void TRACE_surf_resource_utilization_alloc(void);
- void TRACE_surf_resource_utilization_release(void);
  
  /* instr_paje.c */
  extern xbt_dict_t trivaNodeTypes;
@@@ -274,16 -203,6 +206,6 @@@ val_t PJ_value_get_or_new (const char *
  val_t PJ_value_get (const char *name, const type_t father);
  void PJ_value_free (val_t value);
  
- /* instr_routing.c */
- void instr_routing_define_callbacks (void);
- void instr_new_variable_type (const char *new_typename, const char *color);
- void instr_new_user_variable_type  (const char *father_type, const char *new_typename, const char *color);
- void instr_new_user_state_type (const char *father_type, const char *new_typename);
- void instr_new_value_for_user_state_type (const char *typename, const char *value, const char *color);
- int instr_platform_traced (void);
- xbt_graph_t instr_routing_platform_graph (void);
- void instr_routing_platform_graph_export_graphviz (xbt_graph_t g, const char *filename);
  #endif /* HAVE_TRACING */
  
  #ifdef HAVE_JEDULE
diff --combined src/msg/instr_msg_vm.c
index afbd528,0000000..73581c5
mode 100644,000000..100644
--- /dev/null
@@@ -1,144 -1,0 +1,144 @@@
- #include "instr/instr_private.h"
 +/* Copyright (c) 2012. 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 "msg_private.h"
 +
 +#ifdef HAVE_TRACING
 +
 +XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_msg_vm, instr, "MSG VM");
 +
 +
 +char *instr_vm_id (msg_vm_t vm, char *str, int len)
 +{
 +  return instr_vm_id_2 (vm->name, str, len);
 +}
 +
 +char *instr_vm_id_2 (const char *vm_name, char *str, int len)
 +{
 +  snprintf (str, len, "%s", vm_name);
 +  return str;
 +}
 +
 +/*
 + * Instrumentation functions to trace MSG VMs (msg_vm_t)
 + */
 +void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host, msg_host_t new_host)
 +{
 +  if (TRACE_msg_vm_is_enabled()){
 +    static long long int counter = 0;
 +    char key[INSTR_DEFAULT_STR_SIZE];
 +    snprintf (key, INSTR_DEFAULT_STR_SIZE, "%lld", counter++);
 +
 +    int len = INSTR_DEFAULT_STR_SIZE;
 +    char str[INSTR_DEFAULT_STR_SIZE];
 +
 +    //start link
 +    container_t msg = PJ_container_get (instr_vm_id(vm, str, len));
 +    type_t type = PJ_type_get ("MSG_VM_LINK", PJ_type_get_root());
 +    new_pajeStartLink (MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key);
 +
 +    //destroy existing container of this vm
 +    container_t existing_container = PJ_container_get(instr_vm_id(vm, str, len));
 +    PJ_container_remove_from_parent (existing_container);
 +    PJ_container_free(existing_container);
 +
 +    //create new container on the new_host location
 +    msg = PJ_container_new(instr_vm_id(vm, str, len), INSTR_MSG_VM, PJ_container_get(SIMIX_host_get_name(new_host->smx_host)));
 +
 +    //end link
 +    msg = PJ_container_get(instr_vm_id(vm, str, len));
 +    type = PJ_type_get ("MSG_VM_LINK", PJ_type_get_root());
 +    new_pajeEndLink (MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key);
 +  }
 +}
 +
 +void TRACE_msg_vm_create (const char *vm_name, msg_host_t host)
 +{
 +  if (TRACE_msg_vm_is_enabled()){
 +    int len = INSTR_DEFAULT_STR_SIZE;
 +    char str[INSTR_DEFAULT_STR_SIZE];
 +
 +    container_t host_container = PJ_container_get (SIMIX_host_get_name(host->smx_host));
 +    PJ_container_new(instr_vm_id_2(vm_name, str, len), INSTR_MSG_VM, host_container);
 +  }
 +}
 +
 +void TRACE_msg_vm_kill(msg_vm_t vm) {
 +  if (TRACE_msg_vm_is_enabled()) {
 +    int len = INSTR_DEFAULT_STR_SIZE;
 +    char str[INSTR_DEFAULT_STR_SIZE];
 +
 +    //kill means that this vm no longer exists, let's destroy it
 +    container_t process = PJ_container_get (instr_vm_id(vm, str, len));
 +    PJ_container_remove_from_parent (process);
 +    PJ_container_free (process);
 +  }
 +}
 +
 +void TRACE_msg_vm_suspend(msg_vm_t vm)
 +{
 +  if (TRACE_msg_vm_is_enabled()){
 +    int len = INSTR_DEFAULT_STR_SIZE;
 +    char str[INSTR_DEFAULT_STR_SIZE];
 +
 +    container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len));
 +    type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
 +    val_t value = PJ_value_get ("suspend", type);
 +    new_pajePushState (MSG_get_clock(), vm_container, type, value);
 +  }
 +}
 +
 +void TRACE_msg_vm_resume(msg_vm_t vm)
 +{
 +  if (TRACE_msg_vm_is_enabled()){
 +    int len = INSTR_DEFAULT_STR_SIZE;
 +    char str[INSTR_DEFAULT_STR_SIZE];
 +
 +    container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len));
 +    type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
 +    new_pajePopState (MSG_get_clock(), vm_container, type);
 +  }
 +}
 +
 +void TRACE_msg_vm_sleep_in(msg_vm_t vm)
 +{
 +  if (TRACE_msg_vm_is_enabled()){
 +    int len = INSTR_DEFAULT_STR_SIZE;
 +    char str[INSTR_DEFAULT_STR_SIZE];
 +
 +    container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len));
 +    type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
 +    val_t value = PJ_value_get ("sleep", type);
 +    new_pajePushState (MSG_get_clock(), vm_container, type, value);
 +  }
 +}
 +
 +void TRACE_msg_vm_sleep_out(msg_vm_t vm)
 +{
 +  if (TRACE_msg_vm_is_enabled()){
 +    int len = INSTR_DEFAULT_STR_SIZE;
 +    char str[INSTR_DEFAULT_STR_SIZE];
 +
 +    container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len));
 +    type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
 +    new_pajePopState (MSG_get_clock(), vm_container, type);
 +  }
 +}
 +
 +void TRACE_msg_vm_end(msg_vm_t vm)
 +{
 +  if (TRACE_msg_vm_is_enabled()) {
 +    int len = INSTR_DEFAULT_STR_SIZE;
 +    char str[INSTR_DEFAULT_STR_SIZE];
 +
 +    //that's the end, let's destroy it
 +    container_t container = PJ_container_get (instr_vm_id(vm, str, len));
 +    PJ_container_remove_from_parent (container);
 +    PJ_container_free (container);
 +  }
 +}
 +
 +#endif /* HAVE_TRACING */
diff --combined src/msg/msg_private.h
@@@ -91,13 -91,12 +91,13 @@@ typedef struct msg_comm 
    msg_task_t *task_received;      /* where the task will be received (NULL for the sender) */
    msg_error_t status;           /* status of the communication once finished */
  } s_msg_comm_t;
 -
 +/*
  typedef enum {
    msg_vm_state_suspended, msg_vm_state_running, msg_vm_state_migrating
  } e_msg_vm_state_t;
  
  typedef struct msg_vm {
 +  const char *name;
    s_xbt_swag_hookup_t all_vms_hookup;
    s_xbt_swag_hookup_t host_vms_hookup;
    xbt_dynar_t processes;
    msg_host_t location;
    int coreAmount;
  } s_msg_vm_t;
 -
 +*/
  /************************** Global variables ********************************/
  typedef struct MSG_Global {
    xbt_fifo_t host;
@@@ -155,5 -154,31 +155,44 @@@ void _MSG_action_exit(void)
  
  void MSG_post_create_environment(void);
  
+ /********** Tracing **********/
+ /* declaration of instrumentation functions from msg_task_instr.c */
+ void TRACE_msg_set_task_category(msg_task_t task, const char *category);
+ void TRACE_msg_task_create(msg_task_t task);
+ void TRACE_msg_task_execute_start(msg_task_t task);
+ void TRACE_msg_task_execute_end(msg_task_t task);
+ void TRACE_msg_task_destroy(msg_task_t task);
+ void TRACE_msg_task_get_start(void);
+ void TRACE_msg_task_get_end(double start_time, msg_task_t task);
+ int TRACE_msg_task_put_start(msg_task_t task);    //returns TRUE if the task_put_end must be called
+ void TRACE_msg_task_put_end(void);
+ /* declaration of instrumentation functions from msg_process_instr.c */
+ char *instr_process_id (msg_process_t proc, char *str, int len);
+ char *instr_process_id_2 (const char *process_name, int process_pid, char *str, int len);
+ void TRACE_msg_process_change_host(msg_process_t process, msg_host_t old_host,
+                                    msg_host_t new_host);
+ void TRACE_msg_process_create (const char *process_name, int process_pid, msg_host_t host);
+ void TRACE_msg_process_destroy (const char *process_name, int process_pid, msg_host_t host);
+ void TRACE_msg_process_kill(msg_process_t process);
+ void TRACE_msg_process_suspend(msg_process_t process);
+ void TRACE_msg_process_resume(msg_process_t process);
+ void TRACE_msg_process_sleep_in(msg_process_t process);   //called from msg/gos.c
+ void TRACE_msg_process_sleep_out(msg_process_t process);
+ void TRACE_msg_process_end(msg_process_t process);
++/* declaration of instrumentation functions from instr_msg_vm.c */
++char *instr_vm_id (msg_vm_t vm, char *str, int len);
++char *instr_vm_id_2 (const char *vm_name, char *str, int len);
++void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host,
++                                   msg_host_t new_host);
++void TRACE_msg_vm_create (const char *vm_name, msg_host_t host);
++void TRACE_msg_vm_kill(msg_vm_t process);
++void TRACE_msg_vm_suspend(msg_vm_t vm);
++void TRACE_msg_vm_resume(msg_vm_t vm);
++void TRACE_msg_vm_sleep_in(msg_vm_t vm);
++void TRACE_msg_vm_sleep_out(msg_vm_t vm);
++void TRACE_msg_vm_end(msg_vm_t vm);
++
  SG_END_DECL()
  #endif
diff --combined src/surf/instr_routing.c
@@@ -165,15 -165,10 +165,15 @@@ static void recursiveGraphExtraction (A
    container_t child1, child2;
    const char *child1_name, *child2_name;
    xbt_dict_foreach(container->children, cursor1, child1_name, child1) {
 -    if (graph_extraction_filter_out (child1, NULL)) continue;
 +    //if child1 is not a link, a smpi node, a msg process, a msg vm or a msg task
 +    if (child1->kind == INSTR_LINK || child1->kind == INSTR_SMPI || child1->kind == INSTR_MSG_PROCESS || child1->kind == INSTR_MSG_VM || child1->kind == INSTR_MSG_TASK) continue;
 +
      xbt_dict_foreach(container->children, cursor2, child2_name, child2) {
 -      if (graph_extraction_filter_out (child2, child1)) continue;
 -      XBT_DEBUG ("get_route from %s to %s", child1_name, child2_name);
 +      //if child2 is not a link, a smpi node, a msg process, a msg vm or a msg task
 +      if (child2->kind == INSTR_LINK || child2->kind == INSTR_SMPI || child2->kind == INSTR_MSG_PROCESS || child2->kind == INSTR_MSG_VM || child2->kind == INSTR_MSG_TASK) continue;
 +
 +      //if child1 is not child2
 +      if (strcmp (child1_name, child2_name) == 0) continue;
  
        //get the route
        sg_platf_route_cbarg_t route = xbt_new0(s_sg_platf_route_cbarg_t,1);
@@@ -351,22 -346,6 +351,22 @@@ static void instr_routing_parse_start_h
        PJ_type_link_new ("MSG_PROCESS_TASK_LINK", PJ_type_get_root(), msg_process, msg_process);
      }
    }
 +
 +  if (TRACE_msg_vm_is_enabled()) {
 +    type_t msg_vm = PJ_type_get_or_null ("MSG_VM", new->type);
 +    if (msg_vm == NULL){
 +      msg_vm = PJ_type_container_new("MSG_VM", new->type);
 +      type_t state = PJ_type_state_new ("MSG_VM_STATE", msg_vm);
 +      PJ_value_new ("suspend", "1 0 1", state);
 +      PJ_value_new ("sleep", "1 1 0", state);
 +      PJ_value_new ("receive", "1 0 0", state);
 +      PJ_value_new ("send", "0 0 1", state);
 +      PJ_value_new ("task_execute", "0 1 1", state);
 +      PJ_type_link_new ("MSG_VM_LINK", PJ_type_get_root(), msg_vm, msg_vm);
 +      PJ_type_link_new ("MSG_VM_PROCESS_LINK", PJ_type_get_root(), msg_vm, msg_vm);
 +    }
 +  }
 +
  }
  
  static void instr_routing_parse_start_router (sg_platf_router_cbarg_t router)
@@@ -413,12 -392,7 +413,12 @@@ static void recursiveNewVariableType (c
      snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "p%s", new_typename);
      PJ_type_variable_new (tnstr, color, root);
    }
 -  if (!strcmp (root->name, "LINK")){
 +  if (!strcmp (root->name, "MSG_VM")){
 +    char tnstr[INSTR_DEFAULT_STR_SIZE];
 +    snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "p%s", new_typename);
 +    PJ_type_variable_new (tnstr, color, root);
 +  }
 + if (!strcmp (root->name, "LINK")){
      char tnstr[INSTR_DEFAULT_STR_SIZE];
      snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "b%s", new_typename);
      PJ_type_variable_new (tnstr, color, root);
@@@ -515,7 -489,7 +515,7 @@@ static xbt_edge_t new_xbt_graph_edge (x
    const char *sn = instr_node_name (s);
    const char *dn = instr_node_name (d);
    int len = strlen(sn)+strlen(dn)+1;
-   char *name = (char*)malloc(len * sizeof(char));
+   char *name = (char*)xbt_malloc(len * sizeof(char));
  
  
    snprintf (name, len, "%s%s", sn, dn);
@@@ -552,12 -526,12 +552,12 @@@ static void recursiveXBTGraphExtractio
    container_t child1, child2;
    const char *child1_name, *child2_name;
    xbt_dict_foreach(container->children, cursor1, child1_name, child1) {
 -    //if child1 is not a link, a smpi node, a msg process or a msg task
 -    if (child1->kind == INSTR_LINK || child1->kind == INSTR_SMPI || child1->kind == INSTR_MSG_PROCESS || child1->kind == INSTR_MSG_TASK) continue;
 +    //if child1 is not a link, a smpi node, a msg process, a msg vm or a msg task
 +    if (child1->kind == INSTR_LINK || child1->kind == INSTR_SMPI || child1->kind == INSTR_MSG_PROCESS || child1->kind == INSTR_MSG_VM || child1->kind == INSTR_MSG_TASK) continue;
  
      xbt_dict_foreach(container->children, cursor2, child2_name, child2) {
        //if child2 is not a link, a smpi node, a msg process or a msg task
 -      if (child2->kind == INSTR_LINK || child2->kind == INSTR_SMPI || child2->kind == INSTR_MSG_PROCESS || child2->kind == INSTR_MSG_TASK) continue;
 +      if (child2->kind == INSTR_LINK || child2->kind == INSTR_SMPI || child2->kind == INSTR_MSG_PROCESS || child2->kind == INSTR_MSG_VM || child2->kind == INSTR_MSG_TASK) continue;
  
        //if child1 is not child2
        if (strcmp (child1_name, child2_name) == 0) continue;
diff --combined src/xbt/heap.c
@@@ -11,7 -11,6 +11,7 @@@
  #include "heap_private.h"
  
  #include <stdio.h>
 +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_heap, xbt, "Heap");
  
  static void xbt_heap_max_heapify(xbt_heap_t H);
  static void xbt_heap_increase_key(xbt_heap_t H, int i);
@@@ -96,7 -95,7 +96,7 @@@ void xbt_heap_push(xbt_heap_t H, void *
    if (count > size) {
      H->size = (size << 1) + 1;
      H->items =
-         (void *) realloc(H->items,
+         (void *) xbt_realloc(H->items,
                           (H->size) * sizeof(struct xbt_heap_item));
    }
  
    item->key = key;
    item->content = content;
    xbt_heap_increase_key(H, count - 1);
 +  XBT_DEBUG("Heap has now %d elements and max elem is %g",xbt_heap_size(H),xbt_heap_maxkey(H));
    return;
  }
  
@@@ -123,8 -121,6 +123,8 @@@ void *xbt_heap_pop(xbt_heap_t H
    int size = H->size;
    void *max;
  
 +  XBT_DEBUG("Heap has %d elements before extraction and max elem was %g",xbt_heap_size(H),xbt_heap_maxkey(H));
 +
    if (H->count == 0)
      return NULL;
  
    if (H->count < size >> 2 && size > 16) {
      size = (size >> 1) + 1;
      H->items =
-         (void *) realloc(items,
+         (void *) xbt_realloc(items,
                           size * sizeof(struct xbt_heap_item));
      H->size = size;
    }
   */
  void *xbt_heap_remove(xbt_heap_t H, int i)
  {
 +  XBT_DEBUG("Heap has %d elements: extracting element %d",xbt_heap_size(H),i);
 +
    if ((i < 0) || (i > H->count - 1))
      return NULL;
    /* put element i at head */