X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/37dc8526fc8f952bd56ab72b4d58b657d34cbbbd..b65a2e3cea58dea5f2122c44a57e16662fe11a2d:/src/mc/mc_compare.c diff --git a/src/mc/mc_compare.c b/src/mc/mc_compare.c index 2a49a44417..6aa077780c 100644 --- a/src/mc/mc_compare.c +++ b/src/mc/mc_compare.c @@ -155,9 +155,7 @@ void stack_region_free_voidp(void *s){ } static void heap_equality_free(heap_equality_t e){ - if(e){ - xbt_free(e); - } + xbt_free(e); } void heap_equality_free_voidp(void *e){ @@ -523,27 +521,32 @@ static int compare_local_variables(char *s1, char *s2){ xbt_dynar_t s_tokens1, s_tokens2; unsigned int cursor = 0; void *addr1, *addr2; - char *ip1 = NULL, *ip2 = NULL; + char *frame_name1 = NULL, *frame_name2 = NULL; int res_compare = 0; - char *var_name; - + + #ifdef MC_VERBOSE + char *var_name; + #endif + while(cursor < xbt_dynar_length(tokens1)){ s_tokens1 = xbt_str_split(xbt_dynar_get_as(tokens1, cursor, char *), "="); s_tokens2 = xbt_str_split(xbt_dynar_get_as(tokens2, cursor, char *), "="); if(xbt_dynar_length(s_tokens1) > 1 && xbt_dynar_length(s_tokens2) > 1){ - var_name = xbt_dynar_get_as(s_tokens1, 0, char *); - if((strcmp(xbt_dynar_get_as(s_tokens1, 0, char *), "ip") == 0) && (strcmp(xbt_dynar_get_as(s_tokens2, 0, char *), "ip") == 0)){ - xbt_free(ip1); - xbt_free(ip2); - ip1 = strdup(xbt_dynar_get_as(s_tokens1, 1, char *)); - ip2 = strdup(xbt_dynar_get_as(s_tokens2, 1, char *)); + #ifdef MC_VERBOSE + var_name = xbt_dynar_get_as(s_tokens1, 0, char *); + #endif + if((strcmp(xbt_dynar_get_as(s_tokens1, 0, char *), "frame_name") == 0) && (strcmp(xbt_dynar_get_as(s_tokens2, 0, char *), "frame_name") == 0)){ + xbt_free(frame_name1); + xbt_free(frame_name2); + frame_name1 = strdup(xbt_dynar_get_as(s_tokens1, 1, char *)); + frame_name2 = strdup(xbt_dynar_get_as(s_tokens2, 1, char *)); } addr1 = (void *) strtoul(xbt_dynar_get_as(s_tokens1, 1, char *), NULL, 16); addr2 = (void *) strtoul(xbt_dynar_get_as(s_tokens2, 1, char *), NULL, 16); if(addr1 > std_heap && (char *)addr1 <= (char *)std_heap + STD_HEAP_SIZE && addr2 > std_heap && (char *)addr2 <= (char *)std_heap + STD_HEAP_SIZE){ res_compare = compare_area(addr1, addr2, NULL); if(res_compare == 1){ - if(is_stack_ignore_variable(ip1, xbt_dynar_get_as(s_tokens1, 0, char *)) && is_stack_ignore_variable(ip2, xbt_dynar_get_as(s_tokens2, 0, char *))){ + if(is_stack_ignore_variable(frame_name1, xbt_dynar_get_as(s_tokens1, 0, char *)) && is_stack_ignore_variable(frame_name2, xbt_dynar_get_as(s_tokens2, 0, char *))){ xbt_dynar_free(&s_tokens1); xbt_dynar_free(&s_tokens2); cursor++; @@ -556,8 +559,28 @@ static int compare_local_variables(char *s1, char *s2){ xbt_dynar_free(&s_tokens2); xbt_dynar_free(&tokens1); xbt_dynar_free(&tokens2); - xbt_free(ip1); - xbt_free(ip2); + xbt_free(frame_name1); + xbt_free(frame_name2); + return 1; + } + } + }else{ + if(strcmp(xbt_dynar_get_as(s_tokens1, 1, char *), xbt_dynar_get_as(s_tokens2, 1, char *)) != 0){ + if(is_stack_ignore_variable(frame_name1, xbt_dynar_get_as(s_tokens1, 0, char *)) && is_stack_ignore_variable(frame_name2, xbt_dynar_get_as(s_tokens2, 0, char *))){ + xbt_dynar_free(&s_tokens1); + xbt_dynar_free(&s_tokens2); + cursor++; + 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 *)); + #endif + xbt_dynar_free(&s_tokens1); + xbt_dynar_free(&s_tokens2); + xbt_dynar_free(&tokens1); + xbt_dynar_free(&tokens2); + xbt_free(frame_name1); + xbt_free(frame_name2); return 1; } } @@ -569,8 +592,8 @@ static int compare_local_variables(char *s1, char *s2){ cursor++; } - xbt_free(ip1); - xbt_free(ip2); + xbt_free(frame_name1); + xbt_free(frame_name2); xbt_dynar_free(&tokens1); xbt_dynar_free(&tokens2); return 0;