X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/99a794dae9b8a2ddbe8cd650cad97105f41f94bf..eb5b6b0c3c4d9a38bb205b2c8bc9aeeba8674a25:/src/mc/mc_compare.c diff --git a/src/mc/mc_compare.c b/src/mc/mc_compare.c index f9b125b64b..bf8dac435d 100644 --- a/src/mc/mc_compare.c +++ b/src/mc/mc_compare.c @@ -9,6 +9,7 @@ #include "mc_private.h" #include "xbt/mmalloc.h" +#include "xbt/mmalloc/mmprivate.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_compare, mc, "Logging specific to mc_compare"); @@ -179,10 +180,10 @@ static int compare_areas_with_type(void *area1, void *area2, mc_snapshot_t snaps // * a pointer leads to the read-only segment of the current object; // * a pointer lead to a different ELF object. - // The pointers are both in the heap: - if(addr_pointed1 > std_heap && (char *)addr_pointed1 < (char*) std_heap + STD_HEAP_SIZE){ - if(!(addr_pointed2 > std_heap && (char *)addr_pointed2 < (char*) std_heap + STD_HEAP_SIZE)) + if(addr_pointed1 > std_heap && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1)){ + if(!(addr_pointed2 > std_heap && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2))) return 1; + // The pointers are both in the heap: return compare_heap_area(addr_pointed1, addr_pointed2, snapshot1, snapshot2, NULL, type->subtype, pointer_level); } @@ -245,14 +246,11 @@ static int compare_global_variables(int region_type, mc_mem_region_t r1, mc_mem_ void* start_data_libsimgrid = mc_libsimgrid_info->start_rw; mc_object_info_t object_info = NULL; - mc_object_info_t other_object_info = NULL; if(region_type == 2){ object_info = mc_binary_info; - other_object_info = mc_libsimgrid_info; start_data = start_data_binary; }else{ object_info = mc_libsimgrid_info; - other_object_info = mc_binary_info; start_data = start_data_libsimgrid; } variables = object_info->global_variables; @@ -308,14 +306,16 @@ static int compare_local_variables(mc_snapshot_t snapshot1, mc_snapshot_t snapsh while(cursor < xbt_dynar_length(stack1->local_variables)){ current_var1 = (local_variable_t)xbt_dynar_get_as(stack1->local_variables, cursor, local_variable_t); current_var2 = (local_variable_t)xbt_dynar_get_as(stack2->local_variables, cursor, local_variable_t); - if(strcmp(current_var1->name, current_var2->name) != 0 || strcmp(current_var1->frame, current_var2->frame) != 0 || current_var1->ip != current_var2->ip){ + if(strcmp(current_var1->name, current_var2->name) != 0 || current_var1->subprogram != current_var1->subprogram || current_var1->ip != current_var2->ip){ xbt_dynar_free(&compared_pointers); - XBT_VERB("Different name of variable (%s - %s) or frame (%s - %s) or ip (%lu - %lu)", current_var1->name, current_var2->name, current_var1->frame, current_var2->frame, current_var1->ip, current_var2->ip); + // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram + XBT_VERB("Different name of variable (%s - %s) or frame (%s - %s) or ip (%lu - %lu)", current_var1->name, current_var2->name, current_var1->subprogram->name, current_var2->subprogram->name, current_var1->ip, current_var2->ip); return 1; } offset1 = (char *)current_var1->address - (char *)std_heap; offset2 = (char *)current_var2->address - (char *)std_heap; - XBT_DEBUG("Compare local variable %s of frame %s", current_var1->name, current_var1->frame); + // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram + XBT_DEBUG("Compare local variable %s of frame %s", current_var1->subprogram->name, current_var1->subprogram->name); if(current_var1->region == 1) { @@ -326,7 +326,8 @@ static int compare_local_variables(mc_snapshot_t snapshot1, mc_snapshot_t snapsh res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, snapshot1, snapshot2, subtype, 0, 2, start_data_binary, 0); } if(res == 1){ - XBT_VERB("Local variable %s (%p - %p) in frame %s is different between snapshots", current_var1->name,(char *)heap1 + offset1, (char *)heap2 + offset2, current_var1->frame); + // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram + XBT_VERB("Local variable %s (%p - %p) in frame %s is different between snapshots", current_var1->name,(char *)heap1 + offset1, (char *)heap2 + offset2, current_var1->subprogram->name); xbt_dynar_free(&compared_pointers); compared_pointers = NULL; return res; @@ -453,7 +454,9 @@ int snapshot_compare(void *state1, void *state2){ /* Stacks comparison */ unsigned int cursor = 0; int diff_local = 0; +#ifdef MC_DEBUG is_diff = 0; +#endif mc_snapshot_stack_t stack1, stack2; while(cursor < xbt_dynar_length(s1->stacks)){