From 55e441525895975f97dbd27af2e2e909bb4ba651 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Tue, 17 Jun 2014 10:40:37 +0200 Subject: [PATCH] Add some informations/help for the user on SIGSEGV --- src/mc/mc_global.c | 5 ++++- src/simix/smx_global.c | 24 ++++++++++++++++++++++++ src/smpi/private.h | 1 + src/smpi/smpi_global.c | 4 ++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/mc/mc_global.c b/src/mc/mc_global.c index f596b2a111..5ca58db54e 100644 --- a/src/mc/mc_global.c +++ b/src/mc/mc_global.c @@ -1451,6 +1451,8 @@ void MC_dump_stack_liveness(xbt_fifo_t stack){ void MC_print_statistics(mc_stats_t stats) { + xbt_mheap_t previous_heap = mmalloc_get_current_heap(); + if(stats->expanded_pairs == 0){ XBT_INFO("Expanded states = %lu", stats->expanded_states); XBT_INFO("Visited states = %lu", stats->visited_states); @@ -1459,6 +1461,7 @@ void MC_print_statistics(mc_stats_t stats) XBT_INFO("Visited pairs = %lu", stats->visited_pairs); } XBT_INFO("Executed transitions = %lu", stats->executed_transitions); + MC_SET_RAW_MEM; if((_sg_mc_dot_output_file != NULL) && (_sg_mc_dot_output_file[0]!='\0')){ fprintf(dot_output, "}\n"); @@ -1470,7 +1473,7 @@ void MC_print_statistics(mc_stats_t stats) if (_sg_mc_send_determinism) XBT_INFO("Send-deterministic : %s", !initial_state_safety->send_deterministic ? "No" : "Yes"); } - MC_UNSET_RAW_MEM; + mmalloc_set_current_heap(previous_heap); } void MC_assert(int prop) diff --git a/src/simix/smx_global.c b/src/simix/smx_global.c index 6de8bc3963..0b2b78c56f 100644 --- a/src/simix/smx_global.c +++ b/src/simix/smx_global.c @@ -13,6 +13,14 @@ #include "mc/mc.h" #include "simgrid/sg_config.h" +#ifdef HAVE_MC +#include "mc/mc_private.h" +#endif + +#ifdef HAVE_SMPI +#include "smpi/private.h" +#endif + XBT_LOG_NEW_CATEGORY(simix, "All SIMIX categories"); XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_kernel, simix, "Logging specific to SIMIX (kernel)"); @@ -58,7 +66,23 @@ static void _XBT_CALL segvhandler(int signum, siginfo_t *siginfo, void *context) "siginfo = {si_signo = %d, si_errno = %d, si_code = %d, si_addr = %p}\n", siginfo->si_signo, siginfo->si_errno, siginfo->si_code, siginfo->si_addr); } + } else if (siginfo->si_signo == SIGSEGV) { + fprintf(stderr, "Segmentation fault.\n"); +#ifdef HAVE_SMPI + if (smpi_enabled() && !smpi_privatize_global_variables) { + fprintf(stderr, + "Try to enable SMPI variable privatization with --cfg:smpi/privatize_global_variable:yes.\n"); + } +#endif } +#ifdef HAVE_MC + if (MC_is_active()) { + if (mc_stack_safety) { + MC_dump_stack_safety(mc_stack_safety); + } + MC_print_statistics(mc_stats); + } +#endif raise(signum); } diff --git a/src/smpi/private.h b/src/smpi/private.h index b98f6796a4..2b8ce55c44 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -166,6 +166,7 @@ void smpi_comm_copy_buffer_callback(smx_action_t comm, void print_request(const char *message, MPI_Request request); +int smpi_enabled(void); void smpi_global_init(void); void smpi_global_destroy(void); diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c index 775e84aa12..0072cda76e 100644 --- a/src/smpi/smpi_global.c +++ b/src/smpi/smpi_global.c @@ -354,6 +354,10 @@ static void smpi_check_options(){ } } +int smpi_enabled(void) { + return process_data != NULL; +} + void smpi_global_init(void) { int i; -- 2.20.1