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);
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");
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)
#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)");
"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);
}
void print_request(const char *message, MPI_Request request);
+int smpi_enabled(void);
void smpi_global_init(void);
void smpi_global_destroy(void);
}
}
+int smpi_enabled(void) {
+ return process_data != NULL;
+}
+
void smpi_global_init(void)
{
int i;