-int create_dump(int pair)
-{
- // Try to enable core dumps
- struct rlimit core_limit;
- core_limit.rlim_cur = RLIM_INFINITY;
- core_limit.rlim_max = RLIM_INFINITY;
-
- if(setrlimit(RLIMIT_CORE, &core_limit) < 0)
- fprintf(stderr, "setrlimit: %s\nWarning: core dumps may be truncated or non-existant\n", strerror(errno));
-
- int status;
- switch(fork()){
- case 0:
- // We are the child process -- run the actual program
- xbt_abort();
- break;
-
- case -1:
- // An error occurred, shouldn't happen
- perror("fork");
- return -1;
-
- default:
- // We are the parent process -- wait for the child process to exit
- if(wait(&status) < 0)
- perror("wait");
- if(WIFSIGNALED(status) && WCOREDUMP(status)){
- char *core_name = malloc(20);
- sprintf(core_name,"core_%d", pair);
- rename("core", core_name);
- free(core_name);
- }
- }
-
- return 0;
-}
-
-void MC_print_comparison_times_statistics(mc_comparison_times_t ct){
-
- XBT_DEBUG("Comparisons done : %d", ct->nb_comparisons);
-
- double total, min, max;
- unsigned int cursor;
-
- if(xbt_dynar_length(ct->chunks_used_comparison_times) > 0){
- cursor = 0;
- total = 0.0;
- max = 0.0;
- min = xbt_dynar_get_as(ct->chunks_used_comparison_times, cursor, double);
- while(cursor < xbt_dynar_length(ct->chunks_used_comparison_times) - 1){
- total += xbt_dynar_get_as(ct->chunks_used_comparison_times, cursor, double);
- if(xbt_dynar_get_as(ct->chunks_used_comparison_times, cursor, double) > max)
- max = xbt_dynar_get_as(ct->chunks_used_comparison_times, cursor, double);
- if(xbt_dynar_get_as(ct->chunks_used_comparison_times, cursor, double) < min)
- min = xbt_dynar_get_as(ct->chunks_used_comparison_times, cursor, double);
- cursor++;
- }
- XBT_DEBUG("Chunks used comparison -- Different states : %lu/%d, time (in seconds) : average = %lf, max = %lf, min = %lf", xbt_dynar_length(ct->chunks_used_comparison_times), ct->nb_comparisons, total/xbt_dynar_length(ct->chunks_used_comparison_times), max, min);
- }
-
- if(xbt_dynar_length(ct->stacks_sizes_comparison_times) > 0){
- cursor = 0;
- total = 0.0;
- max = 0.0;
- min = xbt_dynar_get_as(ct->stacks_sizes_comparison_times, cursor, double);
- while(cursor < xbt_dynar_length(ct->stacks_sizes_comparison_times) - 1){
- total += xbt_dynar_get_as(ct->stacks_sizes_comparison_times, cursor, double);
- if(xbt_dynar_get_as(ct->stacks_sizes_comparison_times, cursor, double) > max)
- max = xbt_dynar_get_as(ct->stacks_sizes_comparison_times, cursor, double);
- if(xbt_dynar_get_as(ct->stacks_sizes_comparison_times, cursor, double) < min)
- min = xbt_dynar_get_as(ct->stacks_sizes_comparison_times, cursor, double);
- cursor++;
- }
- XBT_DEBUG("Stacks sizes comparison -- Different states : %lu/%d, time (in seconds) : average = %lf, max = %lf, min = %lf", xbt_dynar_length(ct->stacks_sizes_comparison_times), ct->nb_comparisons, total/xbt_dynar_length(ct->stacks_sizes_comparison_times), max, min);
- }
-
- if(xbt_dynar_length(ct->program_data_segment_comparison_times) > 0){
- cursor = 0;
- total = 0.0;
- max = 0.0;
- min = xbt_dynar_get_as(ct->program_data_segment_comparison_times, cursor, double);
- while(cursor < xbt_dynar_length(ct->program_data_segment_comparison_times) - 1){
- total += xbt_dynar_get_as(ct->program_data_segment_comparison_times, cursor, double);
- if(xbt_dynar_get_as(ct->program_data_segment_comparison_times, cursor, double) > max)
- max = xbt_dynar_get_as(ct->program_data_segment_comparison_times, cursor, double);
- if(xbt_dynar_get_as(ct->program_data_segment_comparison_times, cursor, double) < min)
- min = xbt_dynar_get_as(ct->program_data_segment_comparison_times, cursor, double);
- cursor++;
- }
- XBT_DEBUG("Program data/bss segments comparison -- Different states : %lu/%d, time (in seconds) : average = %lf, max = %lf, min = %lf", xbt_dynar_length(ct->program_data_segment_comparison_times), ct->nb_comparisons, total/xbt_dynar_length(ct->program_data_segment_comparison_times), max, min);
- }