+}
+
+static int compare_local_variables(char *s1, char *s2){
+
+ xbt_dynar_t tokens1 = xbt_str_split(s1, NULL);
+ xbt_dynar_t tokens2 = xbt_str_split(s2, NULL);
+
+ xbt_dynar_t s_tokens1, s_tokens2;
+ unsigned int cursor = 0;
+ void *addr1, *addr2;
+ char *frame_name1 = NULL, *frame_name2 = NULL;
+ int res_compare = 0;
+
+ #if defined MC_VERBOSE || defined MC_DEBUG
+ 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){
+ #if defined MC_VERBOSE || defined MC_DEBUG
+ 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(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 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);
+ #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;
+ }
+ }
+ }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) 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);
+ xbt_dynar_free(&tokens2);
+ xbt_free(frame_name1);
+ xbt_free(frame_name2);
+ return 1;
+ }
+ }
+ }
+ }
+ xbt_dynar_free(&s_tokens1);
+ xbt_dynar_free(&s_tokens2);
+
+ cursor++;
+ }
+
+ xbt_free(frame_name1);
+ xbt_free(frame_name2);
+ xbt_dynar_free(&tokens1);
+ xbt_dynar_free(&tokens2);
+ return 0;