xbt_os_timer_start(timer);
/* Compare number of blocks/fragments used in each heap */
- size_t chunks_used1 = mmalloc_get_chunks_used((xbt_mheap_t)s1->regions[heap_index]->data);
- size_t chunks_used2 = mmalloc_get_chunks_used((xbt_mheap_t)s2->regions[heap_index]->data);
- if(chunks_used1 != chunks_used2){
+
+ if(s1->heap_chunks_used != s2->heap_chunks_used){
+
if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){
xbt_os_timer_stop(timer);
if(ct1 != NULL)
xbt_dynar_push_as(ct1->chunks_used_comparison_times, double, xbt_os_timer_elapsed(timer));
if(ct2 != NULL)
xbt_dynar_push_as(ct2->chunks_used_comparison_times, double, xbt_os_timer_elapsed(timer));
- XBT_DEBUG("Different number of chunks used in each heap : %zu - %zu", chunks_used1, chunks_used2);
+ XBT_DEBUG("Different number of chunks used in each heap : %zu - %zu", s1->heap_chunks_used, s2->heap_chunks_used);
errors++;
}else{
if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_verbose))
- XBT_VERB("Different number of chunks used in each heap : %zu - %zu", chunks_used1, chunks_used2);
+ XBT_VERB("Different number of chunks used in each heap : %zu - %zu", s1->heap_chunks_used, s2->heap_chunks_used);
xbt_os_timer_free(timer);
xbt_os_timer_stop(global_timer);
return 1;
}
}else{
+
if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug))
xbt_os_timer_stop(timer);
}
if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug))
xbt_os_timer_start(timer);
-
+
/* Compare size of stacks */
+
unsigned int cursor = 0;
- void *addr_stack1, *addr_stack2;
- void *sp1, *sp2;
size_t size_used1, size_used2;
int is_diff = 0;
while(cursor < xbt_dynar_length(stacks_areas)){
- addr_stack1 = (char *)s1->regions[heap_index]->data + ((char *)((stack_region_t)xbt_dynar_get_as(stacks_areas, cursor, stack_region_t))->address - (char *)std_heap);
- addr_stack2 = (char *)s2->regions[heap_index]->data + ((char *)((stack_region_t)xbt_dynar_get_as(stacks_areas, cursor, stack_region_t))->address - (char *)std_heap);
- sp1 = ((mc_snapshot_stack_t)xbt_dynar_get_as(s1->stacks, cursor, mc_snapshot_stack_t))->stack_pointer;
- sp2 = ((mc_snapshot_stack_t)xbt_dynar_get_as(s2->stacks, cursor, mc_snapshot_stack_t))->stack_pointer;
- size_used1 = ((stack_region_t)xbt_dynar_get_as(stacks_areas, cursor, stack_region_t))->size - ((char*)sp1 - (char*)addr_stack1);
- size_used2 = ((stack_region_t)xbt_dynar_get_as(stacks_areas, cursor, stack_region_t))->size - ((char*)sp2 - (char*)addr_stack2);
+ size_used1 = ((mc_snapshot_stack_t)xbt_dynar_get_as(s1->stacks, cursor, mc_snapshot_stack_t))->size_used;
+ size_used2 = ((mc_snapshot_stack_t)xbt_dynar_get_as(s2->stacks, cursor, mc_snapshot_stack_t))->size_used;
if(size_used1 != size_used2){
if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){
if(is_diff == 0){
}
/* Compare binary global variables */
+
is_diff = compare_global_variables(s1->regions[data_program_index]->type, s1->regions[data_program_index]->data, s2->regions[data_program_index]->data);
if(is_diff != 0){
if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){
if(!raw_mem)
MC_UNSET_RAW_MEM;
+
return 1;
}
}
if(is_diff == 0)
xbt_os_timer_stop(timer);
xbt_os_timer_start(timer);
- }
+ }
/* Compare libsimgrid global variables */
+
is_diff = compare_global_variables(s1->regions[data_libsimgrid_index]->type, s1->regions[data_libsimgrid_index]->data, s2->regions[data_libsimgrid_index]->data);
if(is_diff != 0){
if(XBT_LOG_ISENABLED(mc_compare, xbt_log_priority_debug)){
if(!raw_mem)
MC_UNSET_RAW_MEM;
+
return 1;
}
}
}
/* Compare heap */
+
xbt_dynar_t stacks1 = xbt_dynar_new(sizeof(stack_region_t), stack_region_free_voidp);
xbt_dynar_t stacks2 = xbt_dynar_new(sizeof(stack_region_t), stack_region_free_voidp);
xbt_dynar_t equals = xbt_dynar_new(sizeof(heap_equality_t), heap_equality_free_voidp);
if(!raw_mem)
MC_UNSET_RAW_MEM;
+
return 1;
}
}else{
xbt_os_timer_start(timer);
/* Stacks comparison */
+
cursor = 0;
stack_region_t stack_region1, stack_region2;
int diff = 0, diff_local = 0;
+ void *sp1, *sp2;
is_diff = 0;
while(cursor < xbt_dynar_length(stacks1)){
cursor++;
}
- XBT_VERB("Chunks used after comparison of stacks : %zu", mmalloc_get_chunks_used(raw_heap));
-
xbt_dynar_free(&stacks1);
xbt_dynar_free(&stacks2);
xbt_dynar_free(&equals);
MC_SET_RAW_MEM;
- size_t current_chunks_used = mmalloc_get_chunks_used((xbt_mheap_t)(new_state->system_state)->regions[get_heap_region_index(new_state->system_state)]->data);
+ size_t current_chunks_used = new_state->system_state->heap_chunks_used;
unsigned int cursor = 0;
int previous_cursor = 0, next_cursor = 0;
while(start <= end && same_chunks_not_found){
cursor = (start + end) / 2;
state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, cursor, mc_safety_visited_state_t);
- chunks_used_test = mmalloc_get_chunks_used((xbt_mheap_t)(state_test->system_state)->regions[get_heap_region_index(state_test->system_state)]->data);
+ chunks_used_test = state_test->system_state->heap_chunks_used;
if(chunks_used_test < current_chunks_used)
start = cursor + 1;
if(chunks_used_test > current_chunks_used)
previous_cursor = cursor - 1;
while(previous_cursor >= 0){
state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, previous_cursor, mc_safety_visited_state_t);
- chunks_used_test = mmalloc_get_chunks_used((xbt_mheap_t)(state_test->system_state)->regions[get_heap_region_index(state_test->system_state)]->data);
+ chunks_used_test = state_test->system_state->heap_chunks_used;
if(chunks_used_test != current_chunks_used)
break;
if(snapshot_compare(new_state->system_state, state_test->system_state, NULL, NULL) == 0){
next_cursor = cursor + 1;
while(next_cursor < xbt_dynar_length(visited_states)){
state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, next_cursor, mc_safety_visited_state_t);
- chunks_used_test = mmalloc_get_chunks_used((xbt_mheap_t)(state_test->system_state)->regions[get_heap_region_index(state_test->system_state)]->data);
+ chunks_used_test = state_test->system_state->heap_chunks_used;
if(chunks_used_test != current_chunks_used)
break;
if(snapshot_compare(new_state->system_state, state_test->system_state, NULL, NULL) == 0){
}
state_test = (mc_safety_visited_state_t)xbt_dynar_get_as(visited_states, cursor, mc_safety_visited_state_t);
- chunks_used_test = mmalloc_get_chunks_used((xbt_mheap_t)(state_test->system_state)->regions[get_heap_region_index(state_test->system_state)]->data);
+ chunks_used_test = state_test->system_state->heap_chunks_used;
if(chunks_used_test < current_chunks_used)
xbt_dynar_insert_at(visited_states, cursor + 1, &new_state);