+ if(!compared_pointers){
+ compared_pointers = xbt_dynar_new(sizeof(pointers_pair_t), pointers_pair_free_voidp);
+ MC_ignore_global_variable("compared_pointers");
+ }else{
+ xbt_dynar_reset(compared_pointers);
+ }
+
+ if(xbt_dynar_length(stack1->local_variables) != xbt_dynar_length(stack2->local_variables)){
+ XBT_VERB("Different number of local variables");
+ xbt_dynar_free(&compared_pointers);
+ compared_pointers = NULL;
+ return 1;
+ }else{
+ unsigned int cursor = 0;
+ local_variable_t current_var1, current_var2;
+ int offset1, offset2, res;
+ 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){
+ 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_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_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);
+ compared_pointers = NULL;
+ return res;
+ }
+ cursor++;
+ }
+ xbt_dynar_free(&compared_pointers);
+ compared_pointers = NULL;
+ return 0;
+ }
+}