From d9b9d38da9e9f4cd8ee8cf4aaf3dda862f7b557f Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Mon, 10 Mar 2014 13:53:28 +0100 Subject: [PATCH] [mc] Pass arguments everywhere in the state comparator code A reference to the snapshot will be needed to resolve complexe locations. --- include/xbt/mmalloc.h | 6 ++++-- src/mc/mc_compare.c | 30 +++++++++++++------------- src/xbt/mmalloc/mm_diff.c | 45 ++++++++++++++++++++------------------- 3 files changed, 42 insertions(+), 39 deletions(-) diff --git a/include/xbt/mmalloc.h b/include/xbt/mmalloc.h index dc3a51c864..7f8d8c05d3 100644 --- a/include/xbt/mmalloc.h +++ b/include/xbt/mmalloc.h @@ -57,10 +57,12 @@ XBT_PUBLIC( xbt_mheap_t ) mmalloc_get_default_md(void); void mmalloc_set_current_heap(xbt_mheap_t new_heap); xbt_mheap_t mmalloc_get_current_heap(void); -int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, mc_object_info_t info, mc_object_info_t other_info); +struct s_mc_snapshot; + +int mmalloc_compare_heap(struct s_mc_snapshot* snapshot1, struct s_mc_snapshot* snapshot2, xbt_mheap_t heap1, xbt_mheap_t heap2, mc_object_info_t info, mc_object_info_t other_info); int mmalloc_linear_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2); int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t to_ignore1, xbt_dynar_t to_ignore2); -int compare_heap_area(void *area1, void* area2, xbt_dynar_t previous, mc_object_info_t info, mc_object_info_t other_info, char *type, int pointer_level); +int compare_heap_area(void *area1, void* area2, struct s_mc_snapshot* snapshot1, struct s_mc_snapshot* snapshot2, xbt_dynar_t previous, mc_object_info_t info, mc_object_info_t other_info, char *type, int pointer_level); void reset_heap_information(void); size_t mmalloc_get_bytes_used(xbt_mheap_t); diff --git a/src/mc/mc_compare.c b/src/mc/mc_compare.c index ca2d81a020..a728239044 100644 --- a/src/mc/mc_compare.c +++ b/src/mc/mc_compare.c @@ -99,7 +99,7 @@ static int add_compared_pointers(void *p1, void *p2){ return 1; } -static int compare_areas_with_type(void *area1, void *area2, mc_object_info_t info, mc_object_info_t other_info, dw_type_t type, int region_size, int region_type, void *start_data, int pointer_level){ +static int compare_areas_with_type(void *area1, void *area2, mc_snapshot_t snapshot1, mc_snapshot_t snapshot2, mc_object_info_t info, mc_object_info_t other_info, dw_type_t type, int region_size, int region_type, void *start_data, int pointer_level){ unsigned int cursor = 0; dw_type_t member, subtype, subsubtype; @@ -118,7 +118,7 @@ static int compare_areas_with_type(void *area1, void *area2, mc_object_info_t in case DW_TAG_typedef: case DW_TAG_volatile_type: case DW_TAG_const_type: - return compare_areas_with_type(area1, area2, info, other_info, type->subtype, region_size, region_type, start_data, pointer_level); + return compare_areas_with_type(area1, area2, snapshot1, snapshot2, info, other_info, type->subtype, region_size, region_type, start_data, pointer_level); break; case DW_TAG_array_type: subtype = type->subtype; @@ -156,9 +156,9 @@ static int compare_areas_with_type(void *area1, void *area2, mc_object_info_t in } for(i=0; ielement_count; i++){ if(switch_types) - res = compare_areas_with_type((char *)area1 + (i*elm_size), (char *)area2 + (i*elm_size), other_info, info, type->subtype, region_size, region_type, start_data, pointer_level); + res = compare_areas_with_type((char *)area1 + (i*elm_size), (char *)area2 + (i*elm_size), snapshot1, snapshot2, other_info, info, type->subtype, region_size, region_type, start_data, pointer_level); else - res = compare_areas_with_type((char *)area1 + (i*elm_size), (char *)area2 + (i*elm_size), info, other_info, type->subtype, region_size, region_type, start_data, pointer_level); + res = compare_areas_with_type((char *)area1 + (i*elm_size), (char *)area2 + (i*elm_size), snapshot1, snapshot2, info, other_info, type->subtype, region_size, region_type, start_data, pointer_level); if(res == 1) return res; } @@ -190,7 +190,7 @@ static int compare_areas_with_type(void *area1, void *area2, mc_object_info_t in if(addr_pointed1 > std_heap && (char *)addr_pointed1 < (char*) std_heap + STD_HEAP_SIZE){ if(!(addr_pointed2 > std_heap && (char *)addr_pointed2 < (char*) std_heap + STD_HEAP_SIZE)) return 1; - return compare_heap_area(addr_pointed1, addr_pointed2, NULL, info, other_info, type->dw_type_id, pointer_level); + return compare_heap_area(addr_pointed1, addr_pointed2, snapshot1, snapshot2, NULL, info, other_info, type->dw_type_id, pointer_level); } // The pointers are both in the current object R/W segment: @@ -200,7 +200,7 @@ static int compare_areas_with_type(void *area1, void *area2, mc_object_info_t in if(type->dw_type_id == NULL) return (addr_pointed1 != addr_pointed2); else - return compare_areas_with_type(addr_pointed1, addr_pointed2, info, other_info, type->subtype, region_size, region_type, start_data, pointer_level); + return compare_areas_with_type(addr_pointed1, addr_pointed2, snapshot1, snapshot2, info, other_info, type->subtype, region_size, region_type, start_data, pointer_level); } else{ @@ -212,7 +212,7 @@ static int compare_areas_with_type(void *area1, void *area2, mc_object_info_t in case DW_TAG_class_type: xbt_dynar_foreach(type->members, cursor, member){ XBT_DEBUG("Compare member %s", member->name); - res = compare_areas_with_type((char *)area1 + member->offset, (char *)area2 + member->offset, info, other_info, member->subtype, region_size, region_type, start_data, pointer_level); + res = compare_areas_with_type((char *)area1 + member->offset, (char *)area2 + member->offset, snapshot1, snapshot2, info, other_info, member->subtype, region_size, region_type, start_data, pointer_level); if(res == 1) return res; } @@ -228,7 +228,7 @@ static int compare_areas_with_type(void *area1, void *area2, mc_object_info_t in return 0; } -static int compare_global_variables(int region_type, mc_mem_region_t r1, mc_mem_region_t r2){ +static int compare_global_variables(int region_type, mc_mem_region_t r1, mc_mem_region_t r2, mc_snapshot_t snapshot1, mc_snapshot_t snapshot2){ if(!compared_pointers){ compared_pointers = xbt_dynar_new(sizeof(pointers_pair_t), pointers_pair_free_voidp); @@ -270,7 +270,7 @@ static int compare_global_variables(int region_type, mc_mem_region_t r1, mc_mem_ offset = (char *)current_var->address - (char *)object_info->start_rw; dw_type_t bvariable_type = current_var->type; - res = compare_areas_with_type((char *)r1->data + offset, (char *)r2->data + offset, object_info, other_object_info, bvariable_type, r1->size, region_type, start_data, 0); + res = compare_areas_with_type((char *)r1->data + offset, (char *)r2->data + offset, snapshot1, snapshot2, object_info, other_object_info, bvariable_type, r1->size, region_type, start_data, 0); if(res == 1){ XBT_VERB("Global variable %s (%p - %p) is different between snapshots", current_var->name, (char *)r1->data + offset, (char *)r2->data + offset); xbt_dynar_free(&compared_pointers); @@ -287,7 +287,7 @@ static int compare_global_variables(int region_type, mc_mem_region_t r1, mc_mem_ } -static int compare_local_variables(mc_snapshot_stack_t stack1, mc_snapshot_stack_t stack2, void *heap1, void *heap2){ +static int compare_local_variables(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2, mc_snapshot_stack_t stack1, mc_snapshot_stack_t stack2, void *heap1, void *heap2){ void* start_data_binary = mc_binary_info->start_rw; void* start_data_libsimgrid = mc_libsimgrid_info->start_rw; @@ -321,10 +321,10 @@ static int compare_local_variables(mc_snapshot_stack_t stack1, mc_snapshot_stack if(current_var1->region == 1) { dw_type_t subtype = current_var1->type; - res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, mc_libsimgrid_info, mc_binary_info, subtype, 0, 1, start_data_libsimgrid, 0); + res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, snapshot1, snapshot2, mc_libsimgrid_info, mc_binary_info, subtype, 0, 1, start_data_libsimgrid, 0); } else { dw_type_t subtype = current_var2->type; - res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, mc_binary_info, mc_libsimgrid_info, subtype, 0, 2, start_data_binary, 0); + res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, snapshot1, snapshot2, mc_binary_info, mc_libsimgrid_info, subtype, 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); @@ -460,7 +460,7 @@ int snapshot_compare(void *state1, void *state2){ while(cursor < xbt_dynar_length(s1->stacks)){ stack1 = (mc_snapshot_stack_t)xbt_dynar_get_as(s1->stacks, cursor, mc_snapshot_stack_t); stack2 = (mc_snapshot_stack_t)xbt_dynar_get_as(s2->stacks, cursor, mc_snapshot_stack_t); - diff_local = compare_local_variables(stack1, stack2, s1->regions[0]->data, s2->regions[0]->data); + diff_local = compare_local_variables(s1, s2, stack1, stack2, s1->regions[0]->data, s2->regions[0]->data); if(diff_local > 0){ #ifdef MC_DEBUG if(is_diff == 0){ @@ -509,7 +509,7 @@ int snapshot_compare(void *state1, void *state2){ #endif /* Compare global variables */ - is_diff = compare_global_variables(k, s1->regions[k], s2->regions[k]); + is_diff = compare_global_variables(k, s1->regions[k], s2->regions[k], s1, s2); if(is_diff != 0){ #ifdef MC_DEBUG xbt_os_walltimer_stop(timer); @@ -538,7 +538,7 @@ int snapshot_compare(void *state1, void *state2){ #endif /* Compare heap */ - if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[0]->data, + if(mmalloc_compare_heap(s1, s2, (xbt_mheap_t)s1->regions[0]->data, (xbt_mheap_t)s2->regions[0]->data, mc_libsimgrid_info, mc_binary_info) > 0){ diff --git a/src/xbt/mmalloc/mm_diff.c b/src/xbt/mmalloc/mm_diff.c index c681d8b728..cc06d0395f 100644 --- a/src/xbt/mmalloc/mm_diff.c +++ b/src/xbt/mmalloc/mm_diff.c @@ -410,7 +410,7 @@ void reset_heap_information(){ } -int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, mc_object_info_t info, mc_object_info_t other_info){ +int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2, xbt_mheap_t heap1, xbt_mheap_t heap2, mc_object_info_t info, mc_object_info_t other_info){ struct s_mm_diff *state = mm_diff_info; @@ -468,7 +468,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, mc_object_info_t addr_block2 = ((void*) (((ADDR2UINT(i1)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)state->s_heap)->heapbase)); - res_compare = compare_heap_area(addr_block1, addr_block2, NULL, info, other_info, NULL, 0); + res_compare = compare_heap_area(addr_block1, addr_block2, snapshot1, snapshot2, NULL, info, other_info, NULL, 0); if(res_compare != 1){ for(k=1; k < state->heapinfo2[i1].busy_block.size; k++) @@ -504,7 +504,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, mc_object_info_t continue; } - res_compare = compare_heap_area(addr_block1, addr_block2, NULL, info, other_info, NULL, 0); + res_compare = compare_heap_area(addr_block1, addr_block2, snapshot1, snapshot2, NULL, info, other_info, NULL, 0); if(res_compare != 1 ){ for(k=1; k < state->heapinfo2[i2].busy_block.size; k++) @@ -551,7 +551,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, mc_object_info_t addr_block2 = ((void*) (((ADDR2UINT(i1)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)state->s_heap)->heapbase)); addr_frag2 = (void*) ((char *)addr_block2 + (j1 << ((xbt_mheap_t)state->s_heap)->heapinfo[i1].type)); - res_compare = compare_heap_area(addr_frag1, addr_frag2, NULL, info, other_info, NULL, 0); + res_compare = compare_heap_area(addr_frag1, addr_frag2, snapshot1, snapshot2, NULL, info, other_info, NULL, 0); if(res_compare != 1) equal = 1; @@ -580,7 +580,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, mc_object_info_t addr_block2 = ((void*) (((ADDR2UINT(i2)) - 1) * BLOCKSIZE + (char*)((xbt_mheap_t)state->s_heap)->heapbase)); addr_frag2 = (void*) ((char *)addr_block2 + (j2 <<((xbt_mheap_t)state->s_heap)->heapinfo[i2].type)); - res_compare = compare_heap_area(addr_frag1, addr_frag2, NULL, info, other_info, NULL, 0); + res_compare = compare_heap_area(addr_frag1, addr_frag2, snapshot2, snapshot2, NULL, info, other_info, NULL, 0); if(res_compare != 1){ equal = 1; @@ -704,7 +704,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, mc_object_info_t return ((nb_diff1 > 0) || (nb_diff2 > 0)); } -static int compare_heap_area_without_type(struct s_mm_diff *state, void *real_area1, void *real_area2, void *area1, void *area2, xbt_dynar_t previous, mc_object_info_t info, mc_object_info_t other_info, int size, int check_ignore){ +static int compare_heap_area_without_type(struct s_mm_diff *state, void *real_area1, void *real_area2, void *area1, void *area2, mc_snapshot_t snapshot1, mc_snapshot_t snapshot2, xbt_dynar_t previous, mc_object_info_t info, mc_object_info_t other_info, int size, int check_ignore){ int i = 0; void *addr_pointed1, *addr_pointed2; @@ -739,7 +739,7 @@ static int compare_heap_area_without_type(struct s_mm_diff *state, void *real_ar continue; }else if((addr_pointed1 > state->s_heap) && ((char *)addr_pointed1 < (char *)state->s_heap + STD_HEAP_SIZE) && (addr_pointed2 > state->s_heap) && ((char *)addr_pointed2 < (char *)state->s_heap + STD_HEAP_SIZE)){ - res_compare = compare_heap_area(addr_pointed1, addr_pointed2, previous, info, other_info, NULL, 0); + res_compare = compare_heap_area(addr_pointed1, addr_pointed2, snapshot1, snapshot2, previous, info, other_info, NULL, 0); if(res_compare == 1){ return res_compare; } @@ -761,6 +761,7 @@ static int compare_heap_area_without_type(struct s_mm_diff *state, void *real_ar // area_size is either a byte_size or an elements_count?& static int compare_heap_area_with_type(struct s_mm_diff *state, void *real_area1, void *real_area2, void *area1, void *area2, + mc_snapshot_t snapshot1, mc_snapshot_t snapshot2, xbt_dynar_t previous, mc_object_info_t info, mc_object_info_t other_info, char *type_id, int area_size, int check_ignore, int pointer_level){ @@ -807,7 +808,7 @@ static int compare_heap_area_with_type(struct s_mm_diff *state, void *real_area1 case DW_TAG_typedef: case DW_TAG_const_type: case DW_TAG_volatile_type: - return compare_heap_area_with_type(state, real_area1, real_area2, area1, area2, previous, info, other_info, type->dw_type_id, area_size, check_ignore, pointer_level); + return compare_heap_area_with_type(state, real_area1, real_area2, area1, area2, snapshot1, snapshot2, previous, info, other_info, type->dw_type_id, area_size, check_ignore, pointer_level); break; case DW_TAG_array_type: subtype = xbt_dict_get_or_null(info->types, type->dw_type_id); @@ -847,9 +848,9 @@ static int compare_heap_area_with_type(struct s_mm_diff *state, void *real_area1 for(i=0; ielement_count; i++){ // TODO, add support for variable stride (DW_AT_byte_stride) if(switch_types) - res = compare_heap_area_with_type(state, (char *)real_area1 + (i*elm_size), (char *)real_area2 + (i*elm_size), (char *)area1 + (i*elm_size), (char *)area2 + (i*elm_size), previous, other_info, info, type->dw_type_id, subtype->byte_size, check_ignore, pointer_level); + res = compare_heap_area_with_type(state, (char *)real_area1 + (i*elm_size), (char *)real_area2 + (i*elm_size), (char *)area1 + (i*elm_size), (char *)area2 + (i*elm_size), snapshot1, snapshot2, previous, other_info, info, type->dw_type_id, subtype->byte_size, check_ignore, pointer_level); else - res = compare_heap_area_with_type(state, (char *)real_area1 + (i*elm_size), (char *)real_area2 + (i*elm_size), (char *)area1 + (i*elm_size), (char *)area2 + (i*elm_size), previous, info, other_info, type->dw_type_id, subtype->byte_size, check_ignore, pointer_level); + res = compare_heap_area_with_type(state, (char *)real_area1 + (i*elm_size), (char *)real_area2 + (i*elm_size), (char *)area1 + (i*elm_size), (char *)area2 + (i*elm_size), snapshot1, snapshot2, previous, info, other_info, type->dw_type_id, subtype->byte_size, check_ignore, pointer_level); if(res == 1) return res; } @@ -868,7 +869,7 @@ static int compare_heap_area_with_type(struct s_mm_diff *state, void *real_area1 addr_pointed1 = *((void **)((char *)area1 + (i*sizeof(void *)))); addr_pointed2 = *((void **)((char *)area2 + (i*sizeof(void *)))); if(addr_pointed1 > state->s_heap && (char *)addr_pointed1 < (char*) state->s_heap + STD_HEAP_SIZE && addr_pointed2 > state->s_heap && (char *)addr_pointed2 < (char*) state->s_heap + STD_HEAP_SIZE) - res = compare_heap_area(addr_pointed1, addr_pointed2, previous, info, other_info, type->dw_type_id, pointer_level); + res = compare_heap_area(addr_pointed1, addr_pointed2, snapshot1, snapshot2, previous, info, other_info, type->dw_type_id, pointer_level); else res = (addr_pointed1 != addr_pointed2); if(res == 1) @@ -878,7 +879,7 @@ static int compare_heap_area_with_type(struct s_mm_diff *state, void *real_area1 addr_pointed1 = *((void **)(area1)); addr_pointed2 = *((void **)(area2)); if(addr_pointed1 > state->s_heap && (char *)addr_pointed1 < (char*) state->s_heap + STD_HEAP_SIZE && addr_pointed2 > state->s_heap && (char *)addr_pointed2 < (char*) state->s_heap + STD_HEAP_SIZE) - return compare_heap_area(addr_pointed1, addr_pointed2, previous, info, other_info, type->dw_type_id, pointer_level); + return compare_heap_area(addr_pointed1, addr_pointed2, snapshot1, snapshot2, previous, info, other_info, type->dw_type_id, pointer_level); else return (addr_pointed1 != addr_pointed2); } @@ -899,9 +900,9 @@ static int compare_heap_area_with_type(struct s_mm_diff *state, void *real_area1 if(area_size>type->byte_size && area_size%type->byte_size == 0){ for(i=0; i<(area_size/type->byte_size); i++){ if(switch_types) - res = compare_heap_area_with_type(state, (char *)real_area1 + (i*type->byte_size), (char *)real_area2 + (i*type->byte_size), (char *)area1 + (i*type->byte_size), (char *)area2 + (i*type->byte_size), previous, other_info, info, type_id, -1, check_ignore, 0); + res = compare_heap_area_with_type(state, (char *)real_area1 + (i*type->byte_size), (char *)real_area2 + (i*type->byte_size), (char *)area1 + (i*type->byte_size), (char *)area2 + (i*type->byte_size), snapshot1, snapshot2, previous, other_info, info, type_id, -1, check_ignore, 0); else - res = compare_heap_area_with_type(state, (char *)real_area1 + (i*type->byte_size), (char *)real_area2 + (i*type->byte_size), (char *)area1 + (i*type->byte_size), (char *)area2 + (i*type->byte_size), previous, info, other_info, type_id, -1, check_ignore, 0); + res = compare_heap_area_with_type(state, (char *)real_area1 + (i*type->byte_size), (char *)real_area2 + (i*type->byte_size), (char *)area1 + (i*type->byte_size), (char *)area2 + (i*type->byte_size), snapshot1, snapshot2, previous, info, other_info, type_id, -1, check_ignore, 0); if(res == 1) return res; } @@ -912,9 +913,9 @@ static int compare_heap_area_with_type(struct s_mm_diff *state, void *real_area1 cursor = 0; xbt_dynar_foreach(type->members, cursor, member){ if(switch_types) - res = compare_heap_area_with_type(state, (char *)real_area1 + member->offset, (char *)real_area2 + member->offset, (char *)area1 + member->offset, (char *)area2 + member->offset, previous, other_info, info, member->dw_type_id, -1, check_ignore, 0); + res = compare_heap_area_with_type(state, (char *)real_area1 + member->offset, (char *)real_area2 + member->offset, (char *)area1 + member->offset, (char *)area2 + member->offset, snapshot1, snapshot2, previous, other_info, info, member->dw_type_id, -1, check_ignore, 0); else - res = compare_heap_area_with_type(state, (char *)real_area1 + member->offset, (char *)real_area2 + member->offset, (char *)area1 + member->offset, (char *)area2 + member->offset, previous, info, other_info, member->dw_type_id, -1, check_ignore, 0); + res = compare_heap_area_with_type(state, (char *)real_area1 + member->offset, (char *)real_area2 + member->offset, (char *)area1 + member->offset, (char *)area2 + member->offset, snapshot1, snapshot2, previous, info, other_info, member->dw_type_id, -1, check_ignore, 0); if(res == 1){ return res; } @@ -922,7 +923,7 @@ static int compare_heap_area_with_type(struct s_mm_diff *state, void *real_area1 } break; case DW_TAG_union_type: - return compare_heap_area_without_type(state, real_area1, real_area2, area1, area2, previous, info, other_info, type->byte_size, check_ignore); + return compare_heap_area_without_type(state, real_area1, real_area2, area1, area2, snapshot1, snapshot2, previous, info, other_info, type->byte_size, check_ignore); break; default: break; @@ -983,7 +984,7 @@ static char* get_offset_type(char* type_id, int offset, mc_object_info_t info, m } } -int compare_heap_area(void *area1, void* area2, xbt_dynar_t previous, mc_object_info_t info, mc_object_info_t other_info, char *type_id, int pointer_level){ +int compare_heap_area(void *area1, void* area2, mc_snapshot_t snapshot1, mc_snapshot_t snapshot2, xbt_dynar_t previous, mc_object_info_t info, mc_object_info_t other_info, char *type_id, int pointer_level){ struct s_mm_diff* state = mm_diff_info; @@ -1285,9 +1286,9 @@ int compare_heap_area(void *area1, void* area2, xbt_dynar_t previous, mc_object_ /* Start comparison*/ if(type_id != NULL){ if(switch_type) - res_compare = compare_heap_area_with_type(state, area1, area2, area1_to_compare, area2_to_compare, previous, other_info, info, type_id, size, check_ignore, pointer_level); + res_compare = compare_heap_area_with_type(state, area1, area2, area1_to_compare, area2_to_compare, snapshot1, snapshot2, previous, other_info, info, type_id, size, check_ignore, pointer_level); else - res_compare = compare_heap_area_with_type(state, area1, area2, area1_to_compare, area2_to_compare, previous, info, other_info, type_id, size, check_ignore, pointer_level); + res_compare = compare_heap_area_with_type(state, area1, area2, area1_to_compare, area2_to_compare, snapshot1, snapshot2, previous, info, other_info, type_id, size, check_ignore, pointer_level); if(res_compare == 1){ if(match_pairs) xbt_dynar_free(&previous); @@ -1295,9 +1296,9 @@ int compare_heap_area(void *area1, void* area2, xbt_dynar_t previous, mc_object_ } }else{ if(switch_type) - res_compare = compare_heap_area_without_type(state, area1, area2, area1_to_compare, area2_to_compare, previous, other_info, info, size, check_ignore); + res_compare = compare_heap_area_without_type(state, area1, area2, area1_to_compare, area2_to_compare, snapshot1, snapshot2, previous, other_info, info, size, check_ignore); else - res_compare = compare_heap_area_without_type(state, area1, area2, area1_to_compare, area2_to_compare, previous, info, other_info, size, check_ignore); + res_compare = compare_heap_area_without_type(state, area1, area2, area1_to_compare, area2_to_compare, snapshot1, snapshot2, previous, info, other_info, size, check_ignore); if(res_compare == 1){ if(match_pairs) xbt_dynar_free(&previous); -- 2.20.1