-/* Copyright (c) 2008-2012 Da SimGrid Team. All rights reserved. */
+/* Copyright (c) 2012-2013 Da 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. */
return 0;
}
-static int compare_global_variables(int region_type, void *d1, void *d2){
+static int compare_global_variables(int region_type, void *d1, void *d2){ /* region_type = 1 -> libsimgrid, region_type = 2 -> binary */
unsigned int cursor = 0;
size_t offset;
}
i = 0;
while(i < current_var->size){
- if(memcmp((char*)d1 + offset + i, (char*)d2 + offset + i, 1) != 0){
+ if(memcmp((char *)d1 + offset + i, (char *)d2 + offset + i, 1) != 0){
pointer_align = (i / sizeof(void*)) * sizeof(void*);
addr_pointed1 = *((void **)((char *)d1 + offset + pointer_align));
addr_pointed2 = *((void **)((char *)d2 + offset + pointer_align));
if((addr_pointed1 > plt_start && addr_pointed1 < plt_end) || (addr_pointed2 > plt_start && addr_pointed2 < plt_end)){
- break;
- }else{
- if((addr_pointed1 > std_heap) && ((char *)addr_pointed1 < (char *)std_heap + STD_HEAP_SIZE)
- && (addr_pointed2 > std_heap) && ((char *)addr_pointed2 < (char *)std_heap + STD_HEAP_SIZE)){
- res_compare = compare_area(addr_pointed1, addr_pointed2, NULL);
- if(res_compare == 1){
- #ifdef MC_VERBOSE
- if(region_type == 2)
- XBT_VERB("Different global variable in binary : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
- else
- XBT_VERB("Different global variable in libsimgrid : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
- #endif
- #ifdef MC_DEBUG
- if(region_type == 2)
- XBT_DEBUG("Different global variable in binary : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
- else
- XBT_DEBUG("Different global variable in libsimgrid : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
- #endif
- XBT_INFO("Different global variable (%p, %p) : %s at addresses %p - %p (size = %zu)", current_var->address, addr_pointed1, current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
- return 1;
- }
- }else{
+ i = pointer_align + sizeof(void*);
+ continue;
+ }else if((addr_pointed1 > std_heap) && ((char *)addr_pointed1 < (char *)std_heap + STD_HEAP_SIZE)
+ && (addr_pointed2 > std_heap) && ((char *)addr_pointed2 < (char *)std_heap + STD_HEAP_SIZE)){
+ res_compare = compare_area(addr_pointed1, addr_pointed2, NULL);
+ if(res_compare == 1){
#ifdef MC_VERBOSE
if(region_type == 2)
XBT_VERB("Different global variable in binary : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
else
XBT_DEBUG("Different global variable in libsimgrid : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
#endif
- XBT_INFO("Different global variable (%p, %p) : %s at addresses %p - %p (size = %zu)", current_var->address, addr_pointed1, current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
return 1;
}
-
- }
- }
+ i = pointer_align + sizeof(void*);
+ continue;
+ }else{
+ #ifdef MC_VERBOSE
+ if(region_type == 2)
+ XBT_VERB("Different global variable in binary : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
+ else
+ XBT_VERB("Different global variable in libsimgrid : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
+ #endif
+ #ifdef MC_DEBUG
+ if(region_type == 2)
+ XBT_DEBUG("Different global variable in binary : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
+ else
+ XBT_DEBUG("Different global variable in libsimgrid : %s at addresses %p - %p (size = %zu)", current_var->name, (char *)d1+offset, (char *)d2+offset, current_var->size);
+ #endif
+ return 1;
+ }
+ }
i++;
}
}
#ifdef MC_VERBOSE
XBT_VERB("Different number of processes : %d - %d", s1->nb_processes, s2->nb_processes);
#endif
-
+
xbt_os_timer_free(timer);
xbt_os_timer_stop(global_timer);
mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
#ifdef MC_VERBOSE
XBT_VERB("Different size used in stacks : %zu - %zu", size_used1, size_used2);
#endif
-
+
xbt_os_timer_free(timer);
xbt_os_timer_stop(global_timer);
mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
#ifdef MC_VERBOSE
XBT_VERB("Different hash of global variables : %s - %s", s1->hash_global, s2->hash_global);
#endif
-
+
xbt_os_timer_free(timer);
xbt_os_timer_stop(global_timer);
mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
#ifdef MC_VERBOSE
XBT_VERB("Different hash of local variables : %s - %s", s1->hash_local, s2->hash_local);
#endif
-
+
xbt_os_timer_free(timer);
xbt_os_timer_stop(global_timer);
mc_snapshot_comparison_time = xbt_os_timer_elapsed(global_timer);
#ifdef MC_VERBOSE
XBT_VERB("Different global variables in binary");
#endif
-
+
reset_heap_information();
xbt_os_timer_free(timer);
xbt_os_timer_stop(global_timer);
xbt_os_timer_start(timer);
#endif
- /* Stacks comparison */
- unsigned int cursor = 0;
- int diff_local = 0;
- is_diff = 0;
+ /* 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
+ 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;
+ #ifdef MC_VERBOSE
+ XBT_VERB("Different local variables between stacks %d", cursor + 1);
#endif
- }
- cursor++;
+
+ 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
}
+ cursor++;
+ }
- #ifdef MC_DEBUG
- xbt_os_timer_start(timer);
- #endif
+ #ifdef MC_DEBUG
+ xbt_os_timer_start(timer);
+ #endif
/* Compare heap */
-
if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[0]->data, (xbt_mheap_t)s2->regions[0]->data)){
#ifdef MC_DEBUG
continue;
}else {
#ifdef MC_VERBOSE
- XBT_VERB("Different local variable : %s at addresses %p - %p", var_name, addr1, addr2);
+ XBT_VERB("Different local variable : %s at addresses %p - %p in frame %s", var_name, addr1, addr2, frame_name1);
#endif
#ifdef MC_DEBUG
XBT_DEBUG("Different local variable : %s at addresses %p - %p", var_name, addr1, addr2);
continue;
}else {
#ifdef MC_VERBOSE
- XBT_VERB("Different local variable : %s (%s - %s)", var_name, xbt_dynar_get_as(s_tokens1, 1, char *), xbt_dynar_get_as(s_tokens2, 1, char *));
+ XBT_VERB("Different local variable : %s (%s - %s) in frame %s", var_name, xbt_dynar_get_as(s_tokens1, 1, char *), xbt_dynar_get_as(s_tokens2, 1, char *), frame_name1);
#endif
#ifdef MC_DEBUG
XBT_DEBUG("Different local variable : %s (%s - %s)", var_name, xbt_dynar_get_as(s_tokens1, 1, char *), xbt_dynar_get_as(s_tokens2, 1, char *));
#endif
+
xbt_dynar_free(&s_tokens1);
xbt_dynar_free(&s_tokens2);
xbt_dynar_free(&tokens1);