X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3a068df322cc97a0c4e6aa93b3eaa25a8fdfa18a..cf9200da17217300a7966654d881f2efdb8e514c:/src/mc/mc_compare.c diff --git a/src/mc/mc_compare.c b/src/mc/mc_compare.c index 1007083957..41cc772f08 100644 --- a/src/mc/mc_compare.c +++ b/src/mc/mc_compare.c @@ -1,4 +1,5 @@ -/* Copyright (c) 2012-2013 Da SimGrid Team. All rights reserved. */ +/* Copyright (c) 2012-2013. The 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. */ @@ -180,7 +181,7 @@ static int compare_areas_with_type(void *area1, void *area2, xbt_dict_t types, x res = compare_areas_with_type((char *)area1 + (i*elm_size), (char *)area2 + (i*elm_size), other_types, types, type->dw_type_id, region_size, region_type, start_data, pointer_level); else res = compare_areas_with_type((char *)area1 + (i*elm_size), (char *)area2 + (i*elm_size), types, other_types, type->dw_type_id, region_size, region_type, start_data, pointer_level); - if(res != 0) + if(res == 1) return res; } break; @@ -207,9 +208,9 @@ static int compare_areas_with_type(void *area1, void *area2, xbt_dict_t types, x if(type->dw_type_id == NULL) return (addr_pointed1 != addr_pointed2); else - return compare_areas_with_type(addr_pointed1, addr_pointed2, types, other_types, type->dw_type_id, region_size, region_type, start_data, pointer_level); + return compare_areas_with_type(addr_pointed1, addr_pointed2, types, other_types, type->dw_type_id, region_size, region_type, start_data, pointer_level); }else{ - return (addr_pointed1 != addr_pointed2); + return (addr_pointed1 != addr_pointed2); } } break; @@ -248,17 +249,20 @@ static int compare_global_variables(int region_type, mc_mem_region_t r1, mc_mem_ size_t offset; void *start_data; + mc_object_info_t object_info = NULL; + mc_object_info_t other_object_info = NULL; if(region_type == 2){ - variables = mc_global_variables_binary; - types = mc_variables_type_binary; - other_types = mc_variables_type_libsimgrid; + object_info = mc_binary_info; + other_object_info = mc_libsimgrid_info; start_data = start_data_binary; }else{ - variables = mc_global_variables_libsimgrid; - types = mc_variables_type_libsimgrid; - other_types = mc_variables_type_binary; + object_info = mc_libsimgrid_info; + other_object_info = mc_binary_info; start_data = start_data_libsimgrid; } + variables = object_info->global_variables; + types = object_info->types; + other_types = other_object_info->types; xbt_dynar_foreach(variables, cursor, current_var){ @@ -307,14 +311,15 @@ static int compare_local_variables(mc_snapshot_stack_t stack1, mc_snapshot_stack 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){ 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); return 1; } offset1 = (char *)current_var1->address - (char *)std_heap; offset2 = (char *)current_var2->address - (char *)std_heap; if(current_var1->region == 1) - res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, mc_variables_type_libsimgrid, mc_variables_type_binary, current_var1->type, 0, 1, start_data_libsimgrid, 0); + res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, mc_libsimgrid_info->types, mc_binary_info->types, current_var1->type, 0, 1, start_data_libsimgrid, 0); else - res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, mc_variables_type_binary, mc_variables_type_libsimgrid, current_var1->type, 0, 2, start_data_binary, 0); + res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, mc_binary_info->types, mc_libsimgrid_info->types, current_var1->type, 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); xbt_dynar_free(&compared_pointers); @@ -329,10 +334,27 @@ static int compare_local_variables(mc_snapshot_stack_t stack1, mc_snapshot_stack } } -int snapshot_compare(void *p1, void *p2){ +int snapshot_compare(void *state1, void *state2){ - mc_snapshot_t s1 = ((mc_pair_t)p1)->graph_state->system_state; - mc_snapshot_t s2 = ((mc_pair_t)p2)->graph_state->system_state; + mc_snapshot_t s1, s2; + int num1, num2; + + if(_sg_mc_property_file && _sg_mc_property_file[0] != '\0'){ /* Liveness MC */ + s1 = ((mc_visited_pair_t)state1)->graph_state->system_state; + s2 = ((mc_visited_pair_t)state2)->graph_state->system_state; + num1 = ((mc_visited_pair_t)state1)->num; + num2 = ((mc_visited_pair_t)state2)->num; + /* Firstly compare automaton state */ + /*if(xbt_automaton_state_compare(((mc_pair_t)state1)->automaton_state, ((mc_pair_t)state2)->automaton_state) != 0) + return 1; + if(xbt_automaton_propositional_symbols_compare_value(((mc_pair_t)state1)->atomic_propositions, ((mc_pair_t)state2)->atomic_propositions) != 0) + return 1;*/ + }else{ /* Safety MC */ + s1 = ((mc_visited_state_t)state1)->system_state; + s2 = ((mc_visited_state_t)state2)->system_state; + num1 = ((mc_visited_state_t)state1)->num; + num2 = ((mc_visited_state_t)state2)->num; + } int errors = 0; int res_init; @@ -359,12 +381,12 @@ int snapshot_compare(void *p1, void *p2){ xbt_os_walltimer_stop(timer); mc_comp_times->stacks_sizes_comparison_time = xbt_os_timer_elapsed(timer); } - XBT_DEBUG("(%d - %d) Different size used in stacks : %zu - %zu", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num, size_used1, size_used2); + XBT_DEBUG("(%d - %d) Different size used in stacks : %zu - %zu", num1, num2, size_used1, size_used2); errors++; is_diff = 1; #else #ifdef MC_VERBOSE - XBT_VERB("(%d - %d) Different size used in stacks : %zu - %zu", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num, size_used1, size_used2); + XBT_VERB("(%d - %d) Different size used in stacks : %zu - %zu", num1, num2, size_used1, size_used2); #endif xbt_os_walltimer_stop(timer); @@ -445,11 +467,11 @@ int snapshot_compare(void *p1, void *p2){ res_init = init_heap_information((xbt_mheap_t)s1->regions[0]->data, (xbt_mheap_t)s2->regions[0]->data, s1->to_ignore, s2->to_ignore); if(res_init == -1){ #ifdef MC_DEBUG - XBT_DEBUG("(%d - %d) Different heap information", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num); + XBT_DEBUG("(%d - %d) Different heap information", num1, num2); errors++; #else #ifdef MC_VERBOSE - XBT_VERB("(%d - %d) Different heap information", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num); + XBT_VERB("(%d - %d) Different heap information", num1, num2); #endif xbt_os_walltimer_stop(global_timer); @@ -480,13 +502,13 @@ int snapshot_compare(void *p1, void *p2){ xbt_os_walltimer_stop(timer); mc_comp_times->stacks_comparison_time = xbt_os_timer_elapsed(timer); } - XBT_DEBUG("(%d - %d) Different local variables between stacks %d", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num, cursor + 1); + XBT_DEBUG("(%d - %d) Different local variables between stacks %d", num1, num2, cursor + 1); errors++; is_diff = 1; #else #ifdef MC_VERBOSE - XBT_VERB("(%d - %d) Different local variables between stacks %d", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num, cursor + 1); + XBT_VERB("(%d - %d) Different local variables between stacks %d", num1, num2, cursor + 1); #endif reset_heap_information(); @@ -514,11 +536,11 @@ int snapshot_compare(void *p1, void *p2){ #ifdef MC_DEBUG xbt_os_walltimer_stop(timer); mc_comp_times->binary_global_variables_comparison_time = xbt_os_timer_elapsed(timer); - XBT_DEBUG("(%d - %d) Different global variables in binary", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num); + XBT_DEBUG("(%d - %d) Different global variables in binary", num1, num2); errors++; #else #ifdef MC_VERBOSE - XBT_VERB("(%d - %d) Different global variables in binary", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num); + XBT_VERB("(%d - %d) Different global variables in binary", num1, num2); #endif reset_heap_information(); @@ -544,11 +566,11 @@ int snapshot_compare(void *p1, void *p2){ #ifdef MC_DEBUG xbt_os_walltimer_stop(timer); mc_comp_times->libsimgrid_global_variables_comparison_time = xbt_os_timer_elapsed(timer); - XBT_DEBUG("(%d - %d) Different global variables in libsimgrid", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num); + XBT_DEBUG("(%d - %d) Different global variables in libsimgrid", num1, num2); errors++; #else #ifdef MC_VERBOSE - XBT_VERB("(%d - %d) Different global variables in libsimgrid", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num); + XBT_VERB("(%d - %d) Different global variables in libsimgrid", num1, num2); #endif reset_heap_information(); @@ -567,17 +589,20 @@ int snapshot_compare(void *p1, void *p2){ #endif /* Compare heap */ - if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[0]->data, (xbt_mheap_t)s2->regions[0]->data) > 0){ + if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[0]->data, + (xbt_mheap_t)s2->regions[0]->data, + mc_libsimgrid_info->types, + mc_binary_info->types) > 0){ #ifdef MC_DEBUG xbt_os_walltimer_stop(timer); mc_comp_times->heap_comparison_time = xbt_os_timer_elapsed(timer); - XBT_DEBUG("(%d - %d) Different heap (mmalloc_compare)", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num); + XBT_DEBUG("(%d - %d) Different heap (mmalloc_compare)", num1, num2); errors++; #else #ifdef MC_VERBOSE - XBT_VERB("(%d - %d) Different heap (mmalloc_compare)", ((mc_pair_t)p1)->num, ((mc_pair_t)p2)->num); + XBT_VERB("(%d - %d) Different heap (mmalloc_compare)", num1, num2); #endif reset_heap_information();