X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c45a236d5837894e3e9b9ae68d675c8dbc863eb7..6a20b94eaec32fb5224c18d21e141bef70da15d8:/src/mc/mc_diff.cpp diff --git a/src/mc/mc_diff.cpp b/src/mc/mc_diff.cpp index 93fd25433e..f8bbd845b1 100644 --- a/src/mc/mc_diff.cpp +++ b/src/mc/mc_diff.cpp @@ -337,7 +337,7 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2) const malloc_info* heapinfos2 = snapshot2->read( (std::uint64_t)heapinfo_address, simgrid::mc::ProcessIndexMissing); - while (i1 < state->heaplimit) { + while (i1 <= state->heaplimit) { const malloc_info* heapinfo1 = (const malloc_info*) MC_region_read(heap_region1, &heapinfo_temp1, &heapinfos1[i1], sizeof(malloc_info)); const malloc_info* heapinfo2 = (const malloc_info*) MC_region_read(heap_region2, &heapinfo_temp2, &heapinfos2[i1], sizeof(malloc_info)); @@ -401,7 +401,7 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2) } - while (i2 < state->heaplimit && !equal) { + while (i2 <= state->heaplimit && !equal) { addr_block2 = (ADDR2UINT(i2) - 1) * BLOCKSIZE + (char *) state->std_heap_copy.heapbase; @@ -486,7 +486,7 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2) } - while (i2 < state->heaplimit && !equal) { + while (i2 <= state->heaplimit && !equal) { const malloc_info* heapinfo2b = (const malloc_info*) MC_region_read( heap_region2, &heapinfo_temp2b, &heapinfos2[i2], @@ -560,7 +560,7 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2) /* All blocks/fragments are equal to another block/fragment ? */ size_t i = 1, j = 0; - for(i = 1; i < state->heaplimit; i++) { + for(i = 1; i <= state->heaplimit; i++) { const malloc_info* heapinfo1 = (const malloc_info*) MC_region_read( heap_region1, &heapinfo_temp1, &heapinfos1[i], sizeof(malloc_info)); if (heapinfo1->type == MMALLOC_TYPE_UNFRAGMENTED) { @@ -602,7 +602,7 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2) if (i1 == state->heaplimit) XBT_DEBUG("Number of blocks/fragments not found in heap1 : %d", nb_diff1); - for (i=1; i < state->heaplimit; i++) { + for (i=1; i <= state->heaplimit; i++) { const malloc_info* heapinfo2 = (const malloc_info*) MC_region_read( heap_region2, &heapinfo_temp2, &heapinfos2[i], sizeof(malloc_info)); if (heapinfo2->type == MMALLOC_TYPE_UNFRAGMENTED) { @@ -758,9 +758,13 @@ static int compare_heap_area_with_type(struct s_mc_diff *state, int process_inde int pointer_level) { top: - if (is_stack(real_area1) && is_stack(real_area2)) + // HACK: This should not happen but in pratice, there is some + // DW_TAG_typedef without DW_AT_type. We should fix this somehow. + if (type == nullptr) return 0; + if (is_stack(real_area1) && is_stack(real_area2)) + return 0; ssize_t ignore1, ignore2; if ((check_ignore > 0) @@ -925,7 +929,7 @@ top: void *real_member2 = simgrid::dwarf::resolve_member( real_area2, type, &member, (simgrid::mc::AddressSpace*) snapshot2, process_index); res = - compare_heap_area_with_type(state, process_index, real_member1, real_member2, + compare_heap_area_with_type(state, process_index, real_member1, real_member2, snapshot1, snapshot2, previous, member.type, -1, check_ignore, 0);