- /* Compare libsimgrid data segment(s) */
- i = data_libsimgrid_index;
- while(i < s1->num_reg && s1->regions[i]->type == 1){
- if(data_libsimgrid_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
- if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){
- XBT_DEBUG("Different memcmp for data in libsimgrid");
- errors++;
- }else{
- if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_verbose))
- XBT_VERB("Different memcmp for data in libsimgrid");
- if(!raw_mem_set)
- MC_UNSET_RAW_MEM;
- return 1;
+ #ifdef MC_DEBUG
+ if(is_diff == 0)
+ xbt_os_timer_stop(timer);
+ xbt_os_timer_start(timer);
+ #endif
+
+ /* Init heap information used in heap comparison algorithm */
+ init_heap_information((xbt_mheap_t)s1->regions[0]->data, (xbt_mheap_t)s2->regions[0]->data, s1->to_ignore, s2->to_ignore);
+
+ /* Compare binary global variables */
+ is_diff = compare_global_variables(2, s1->regions[2]->data, s2->regions[2]->data);
+ if(is_diff != 0){
+ #ifdef MC_DEBUG
+ xbt_os_timer_stop(timer);
+ mc_comp_times->binary_global_variables_comparison_time = xbt_os_timer_elapsed(timer);
+ XBT_DEBUG("Different global variables in binary");
+ errors++;
+ #else
+ #ifdef MC_VERBOSE
+ XBT_VERB("Different global variables in binary");
+ #endif
+
+ xbt_os_timer_free(timer);
+ xbt_os_timer_stop(global_timer);
+ mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
+ xbt_os_timer_free(global_timer);
+
+ if(!raw_mem)
+ MC_UNSET_RAW_MEM;
+
+ return 1;
+ #endif
+ }
+
+ #ifdef MC_DEBUG
+ if(is_diff == 0)
+ xbt_os_timer_stop(timer);
+ xbt_os_timer_start(timer);
+ #endif
+
+ /* Compare libsimgrid global variables */
+ is_diff = compare_global_variables(1, s1->regions[1]->data, s2->regions[1]->data);
+ if(is_diff != 0){
+ #ifdef MC_DEBUG
+ xbt_os_timer_stop(timer);
+ mc_comp_times->libsimgrid_global_variables_comparison_time = xbt_os_timer_elapsed(timer);
+ XBT_DEBUG("Different global variables in libsimgrid");
+ errors++;
+ #else
+ #ifdef MC_VERBOSE
+ XBT_VERB("Different global variables in libsimgrid");
+ #endif
+
+ xbt_os_timer_free(timer);
+ xbt_os_timer_stop(global_timer);
+ mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
+ xbt_os_timer_free(global_timer);
+
+ if(!raw_mem)
+ MC_UNSET_RAW_MEM;
+
+ return 1;
+ #endif
+ }
+
+ #ifdef MC_DEBUG
+ if(is_diff == 0)
+ xbt_os_timer_stop(timer);
+ xbt_os_timer_start(timer);
+ #endif
+
+ /* Stacks comparison */
+ unsigned int cursor = 0;
+ int diff_local = 0;
+ is_diff = 0;
+
+ while(cursor < xbt_dynar_length(s1->stacks)){
+ diff_local = compare_local_variables(((mc_snapshot_stack_t)xbt_dynar_get_as(s1->stacks, cursor, mc_snapshot_stack_t))->local_variables->data, ((mc_snapshot_stack_t)xbt_dynar_get_as(s2->stacks, cursor, mc_snapshot_stack_t))->local_variables->data);
+ if(diff_local > 0){
+ #ifdef MC_DEBUG
+ if(is_diff == 0){
+ xbt_os_timer_stop(timer);
+ mc_comp_times->stacks_comparison_time = xbt_os_timer_elapsed(timer);
+ }
+ XBT_DEBUG("Different local variables between stacks %d", cursor + 1);
+ errors++;
+ is_diff = 1;
+ #else
+
+ #ifdef MC_VERBOSE
+ XBT_VERB("Different local variables between stacks %d", cursor + 1);
+ #endif
+
+ reset_heap_information();
+ xbt_os_timer_free(timer);
+ xbt_os_timer_stop(global_timer);
+ mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
+ xbt_os_timer_free(global_timer);
+
+ if(!raw_mem)
+ MC_UNSET_RAW_MEM;
+
+ return 1;
+ #endif