- for(i=0 ; i< s1->num_reg ; i++){
-
- if(s1->regions[i]->type != s2->regions[i]->type){
- XBT_DEBUG("Different type of region");
- errors++;
- }
-
- switch(s1->regions[i]->type){
- case 0 :
- /* Compare heapregion */
- if(s1->regions[i]->size != s2->regions[i]->size){
- XBT_DEBUG("Different size of heap (s1 = %zu, s2 = %zu)", s1->regions[i]->size, s2->regions[i]->size);
- xbt_dynar_free(&stacks1);
- xbt_dynar_free(&stacks2);
- xbt_dynar_free(&equals);
- if(!raw_mem_set)
- MC_UNSET_RAW_MEM;
- return 1;
- }
- if(s1->regions[i]->start_addr != s2->regions[i]->start_addr){
- XBT_DEBUG("Different start addr of heap (s1 = %p, s2 = %p)", s1->regions[i]->start_addr, s2->regions[i]->start_addr);
- xbt_dynar_free(&stacks1);
- xbt_dynar_free(&stacks2);
- xbt_dynar_free(&equals);
- if(!raw_mem_set)
- MC_UNSET_RAW_MEM;
- return 1;
- }
- if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[i]->data, (xbt_mheap_t)s2->regions[i]->data, &stacks1, &stacks2, &equals)){
- XBT_INFO("Different heap (mmalloc_compare)");
- xbt_dynar_free(&stacks1);
- xbt_dynar_free(&stacks2);
- xbt_dynar_free(&equals);
- if(!raw_mem_set)
- MC_UNSET_RAW_MEM;
- return 1;
- }
- heap1 = s1->regions[i]->data;
- heap2 = s2->regions[i]->data;
- break;
- case 1 :
- /* Compare data libsimgrid region */
- if(s1->regions[i]->size != s2->regions[i]->size){
- XBT_DEBUG("Different size of libsimgrid (data) (s1 = %zu, s2 = %zu)", s1->regions[i]->size, s2->regions[i]->size);
- xbt_dynar_free(&stacks1);
- xbt_dynar_free(&stacks2);
- xbt_dynar_free(&equals);
- if(!raw_mem_set)
- MC_UNSET_RAW_MEM;
- return 1;
- }
- if(s1->regions[i]->start_addr != s2->regions[i]->start_addr){
- XBT_DEBUG("Different start addr of libsimgrid (data) (s1 = %p, s2 = %p)", s1->regions[i]->start_addr, s2->regions[i]->start_addr);
- xbt_dynar_free(&stacks1);
- xbt_dynar_free(&stacks2);
- xbt_dynar_free(&equals);
- if(!raw_mem_set)
- MC_UNSET_RAW_MEM;
- return 1;
- }
- if(data_libsimgrid_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
- XBT_INFO("Different memcmp for data in libsimgrid");
- xbt_dynar_free(&stacks1);
- xbt_dynar_free(&stacks2);
- xbt_dynar_free(&equals);
- if(!raw_mem_set)
- MC_UNSET_RAW_MEM;
- return 1;
- }
- break;
-
- case 2 :
- /* Compare data program region */
- if(s1->regions[i]->size != s2->regions[i]->size){
- XBT_DEBUG("Different size of data program (s1 = %zu, s2 = %zu)", s1->regions[i]->size, s2->regions[i]->size);
- xbt_dynar_free(&stacks1);
- xbt_dynar_free(&stacks2);
- xbt_dynar_free(&equals);
- if(!raw_mem_set)
- MC_UNSET_RAW_MEM;
- return 1;
- }
- if(s1->regions[i]->start_addr != s2->regions[i]->start_addr){
- XBT_DEBUG("Different start addr of data program (s1 = %p, s2 = %p)", s1->regions[i]->start_addr, s2->regions[i]->start_addr);
- xbt_dynar_free(&stacks1);
- xbt_dynar_free(&stacks2);
- xbt_dynar_free(&equals);
- if(!raw_mem_set)
- MC_UNSET_RAW_MEM;
+ 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);