X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a11846627b7e46427494b079e4124a1e8a10e288..c59fb90ea83ce58355bc388b1a5ebaef96420806:/src/xbt/mmalloc/mm_diff.c diff --git a/src/xbt/mmalloc/mm_diff.c b/src/xbt/mmalloc/mm_diff.c index 9ffeac1fbb..6dda1cce6d 100644 --- a/src/xbt/mmalloc/mm_diff.c +++ b/src/xbt/mmalloc/mm_diff.c @@ -34,84 +34,82 @@ static char* is_stack(void *address); void mmalloc_backtrace_block_display(void* heapinfo, int block){ - xbt_ex_t e; - - if (((malloc_info *)heapinfo)[block].busy_block.bt_size == 0) { - fprintf(stderr, "No backtrace available for that block, sorry.\n"); - return; - } - - memcpy(&e.bt,&(((malloc_info *)heapinfo)[block].busy_block.bt),sizeof(void*)*XBT_BACKTRACE_SIZE); - e.used = ((malloc_info *)heapinfo)[block].busy_block.bt_size; - - xbt_ex_setup_backtrace(&e); - if (e.used == 0) { - fprintf(stderr, "(backtrace not set)\n"); - } else if (e.bt_strings == NULL) { - fprintf(stderr, "(backtrace not ready to be computed. %s)\n",xbt_binary_name?"Dunno why":"xbt_binary_name not setup yet"); - } else { - int i; - - fprintf(stderr, "Backtrace of where the block %d was malloced (%d frames):\n", block ,e.used); - for (i = 0; i < e.used; i++) /* no need to display "xbt_backtrace_display" */{ - fprintf(stderr, "%d ---> %s\n",i, e.bt_strings[i] + 4); - } - } - + /* xbt_ex_t e; */ + + /* if (((malloc_info *)heapinfo)[block].busy_block.bt_size == 0) { */ + /* fprintf(stderr, "No backtrace available for that block, sorry.\n"); */ + /* return; */ + /* } */ + + /* memcpy(&e.bt,&(((malloc_info *)heapinfo)[block].busy_block.bt),sizeof(void*)*XBT_BACKTRACE_SIZE); */ + /* e.used = ((malloc_info *)heapinfo)[block].busy_block.bt_size; */ + + /* xbt_ex_setup_backtrace(&e); */ + /* if (e.used == 0) { */ + /* fprintf(stderr, "(backtrace not set)\n"); */ + /* } else if (e.bt_strings == NULL) { */ + /* fprintf(stderr, "(backtrace not ready to be computed. %s)\n",xbt_binary_name?"Dunno why":"xbt_binary_name not setup yet"); */ + /* } else { */ + /* int i; */ + + /* fprintf(stderr, "Backtrace of where the block %d was malloced (%d frames):\n", block ,e.used); */ + /* for (i = 0; i < e.used; i++) /\* no need to display "xbt_backtrace_display" *\/{ */ + /* fprintf(stderr, "%d ---> %s\n",i, e.bt_strings[i] + 4); */ + /* } */ + /* } */ } void mmalloc_backtrace_fragment_display(void* heapinfo, int block, int frag){ - xbt_ex_t e; + /* xbt_ex_t e; */ - memcpy(&e.bt,&(((malloc_info *)heapinfo)[block].busy_frag.bt[frag]),sizeof(void*)*XBT_BACKTRACE_SIZE); - e.used = XBT_BACKTRACE_SIZE; + /* memcpy(&e.bt,&(((malloc_info *)heapinfo)[block].busy_frag.bt[frag]),sizeof(void*)*XBT_BACKTRACE_SIZE); */ + /* e.used = XBT_BACKTRACE_SIZE; */ - xbt_ex_setup_backtrace(&e); - if (e.used == 0) { - fprintf(stderr, "(backtrace not set)\n"); - } else if (e.bt_strings == NULL) { - fprintf(stderr, "(backtrace not ready to be computed. %s)\n",xbt_binary_name?"Dunno why":"xbt_binary_name not setup yet"); - } else { - int i; + /* xbt_ex_setup_backtrace(&e); */ + /* if (e.used == 0) { */ + /* fprintf(stderr, "(backtrace not set)\n"); */ + /* } else if (e.bt_strings == NULL) { */ + /* fprintf(stderr, "(backtrace not ready to be computed. %s)\n",xbt_binary_name?"Dunno why":"xbt_binary_name not setup yet"); */ + /* } else { */ + /* int i; */ - fprintf(stderr, "Backtrace of where the fragment %d in block %d was malloced (%d frames):\n", frag, block ,e.used); - for (i = 0; i < e.used; i++) /* no need to display "xbt_backtrace_display" */{ - fprintf(stderr, "%d ---> %s\n",i, e.bt_strings[i] + 4); - } - } + /* fprintf(stderr, "Backtrace of where the fragment %d in block %d was malloced (%d frames):\n", frag, block ,e.used); */ + /* for (i = 0; i < e.used; i++) /\* no need to display "xbt_backtrace_display" *\/{ */ + /* fprintf(stderr, "%d ---> %s\n",i, e.bt_strings[i] + 4); */ + /* } */ + /* } */ } void mmalloc_backtrace_display(void *addr){ - size_t block, frag_nb; - int type; + /* size_t block, frag_nb; */ + /* int type; */ - xbt_mheap_t heap = __mmalloc_current_heap ?: (xbt_mheap_t) mmalloc_preinit(); - - block = (((char*) (addr) - (char*) heap -> heapbase) / BLOCKSIZE + 1); - - type = heap->heapinfo[block].type; - - switch(type){ - case -1 : /* Free block */ - fprintf(stderr, "Asked to display the backtrace of a block that is free. I'm puzzled\n"); - xbt_abort(); - break; - case 0: /* Large block */ - mmalloc_backtrace_block_display(heap->heapinfo, block); - break; - default: /* Fragmented block */ - frag_nb = RESIDUAL(addr, BLOCKSIZE) >> type; - if(heap->heapinfo[block].busy_frag.frag_size[frag_nb] == -1){ - fprintf(stderr , "Asked to display the backtrace of a fragment that is free. I'm puzzled\n"); - xbt_abort(); - } - mmalloc_backtrace_fragment_display(heap->heapinfo, block, frag_nb); - break; - } - + /* xbt_mheap_t heap = __mmalloc_current_heap ?: (xbt_mheap_t) mmalloc_preinit(); */ + + /* block = (((char*) (addr) - (char*) heap -> heapbase) / BLOCKSIZE + 1); */ + + /* type = heap->heapinfo[block].type; */ + + /* switch(type){ */ + /* case -1 : /\* Free block *\/ */ + /* fprintf(stderr, "Asked to display the backtrace of a block that is free. I'm puzzled\n"); */ + /* xbt_abort(); */ + /* break; */ + /* case 0: /\* Large block *\/ */ + /* mmalloc_backtrace_block_display(heap->heapinfo, block); */ + /* break; */ + /* default: /\* Fragmented block *\/ */ + /* frag_nb = RESIDUAL(addr, BLOCKSIZE) >> type; */ + /* if(heap->heapinfo[block].busy_frag.frag_size[frag_nb] == -1){ */ + /* fprintf(stderr , "Asked to display the backtrace of a fragment that is free. I'm puzzled\n"); */ + /* xbt_abort(); */ + /* } */ + /* mmalloc_backtrace_fragment_display(heap->heapinfo, block, frag_nb); */ + /* break; */ + /* } */ } @@ -249,11 +247,8 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac add_heap_area_pair(previous, current_block, -1, current_block, -1); if(res_compare != -1){ - if(ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)){ - if(in_mc_comparison_ignore((int)current_block, -1)) - res_compare = compare_area(addr_block1, addr_block2, heapinfo1[current_block].busy_block.busy_size, previous, 1); - else - res_compare = compare_area(addr_block1, addr_block2, heapinfo1[current_block].busy_block.busy_size, previous, 0); + if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && heapinfo1[current_block].busy_block.ignore == 1){ + res_compare = compare_area(addr_block1, addr_block2, heapinfo1[current_block].busy_block.busy_size, previous, 1); }else{ res_compare = compare_area(addr_block1, addr_block2, heapinfo1[current_block].busy_block.busy_size, previous, 0); } @@ -320,11 +315,8 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac add_heap_area_pair(previous, i1, -1, i2, -1); if(res_compare != -1){ - if(ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)){ - if(in_mc_comparison_ignore((int)i1, -1)) - res_compare = compare_area(addr_block1, addr_block2, heapinfo1[i1].busy_block.busy_size, previous, 1); - else - res_compare = compare_area(addr_block1, addr_block2, heapinfo1[i1].busy_block.busy_size, previous, 0); + if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && heapinfo1[i1].busy_block.ignore == 1){ + res_compare = compare_area(addr_block1, addr_block2, heapinfo1[i1].busy_block.busy_size, previous, 1); }else{ res_compare = compare_area(addr_block1, addr_block2, heapinfo1[i1].busy_block.busy_size, previous, 0); } @@ -378,11 +370,8 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac add_heap_area_pair(previous, current_block, current_fragment, current_block, current_fragment); - if(ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)){ - if(in_mc_comparison_ignore((int)current_block, (int)current_fragment)) - res_compare = compare_area(addr_frag1, addr_frag2, heapinfo1[current_block].busy_frag.frag_size[current_fragment], previous, 1); - else - res_compare = compare_area(addr_frag1, addr_frag2, heapinfo1[current_block].busy_frag.frag_size[current_fragment], previous, 0); + if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && (heapinfo1[current_block].busy_frag.ignore[current_fragment] == 1)){ + res_compare = compare_area(addr_frag1, addr_frag2, heapinfo1[current_block].busy_frag.frag_size[current_fragment], previous, 1); }else{ res_compare = compare_area(addr_frag1, addr_frag2, heapinfo1[current_block].busy_frag.frag_size[current_fragment], previous, 0); } @@ -397,7 +386,6 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac } } - } while(i2 <= heaplimit && !equal){ @@ -425,11 +413,8 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac /* Comparison */ add_heap_area_pair(previous, i1, j1, i2, j2); - if(ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)){ - if(in_mc_comparison_ignore((int)i1, (int)j1)) - res_compare = compare_area(addr_frag1, addr_frag2, heapinfo1[i1].busy_frag.frag_size[j1], previous, 1); - else - res_compare = compare_area(addr_frag1, addr_frag2, heapinfo1[i1].busy_frag.frag_size[j1], previous, 0); + if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && (heapinfo1[i1].busy_frag.ignore[j1] == 1)){ + res_compare = compare_area(addr_frag1, addr_frag2, heapinfo1[i1].busy_frag.frag_size[j1], previous, 1); }else{ res_compare = compare_area(addr_frag1, addr_frag2, heapinfo1[i1].busy_frag.frag_size[j1], previous, 0); } @@ -467,7 +452,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac if(XBT_LOG_ISENABLED(mm_diff, xbt_log_priority_debug)){ addr_block1 = ((void*) (((ADDR2UINT(i)) - 1) * BLOCKSIZE + (char*)heapbase1)); XBT_DEBUG("Block %zu (%p) not found (size used = %zu)", i, addr_block1, heapinfo1[i].busy_block.busy_size); - mmalloc_backtrace_block_display((void*)heapinfo1, i); + //mmalloc_backtrace_block_display((void*)heapinfo1, i); } nb_diff1++; }else{ @@ -483,7 +468,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac if(XBT_LOG_ISENABLED(mm_diff, xbt_log_priority_debug)){ addr_frag1 = (void*) ((char *)addr_block1 + (j << heapinfo1[i].type)); XBT_DEBUG("Block %zu, Fragment %zu (%p) not found (size used = %d)", i, j, addr_frag1, heapinfo1[i].busy_frag.frag_size[j]); - mmalloc_backtrace_fragment_display((void*)heapinfo1, i, j); + //mmalloc_backtrace_fragment_display((void*)heapinfo1, i, j); } nb_diff1++; }else{ @@ -507,7 +492,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac if(XBT_LOG_ISENABLED(mm_diff, xbt_log_priority_debug)){ addr_block2 = ((void*) (((ADDR2UINT(i)) - 1) * BLOCKSIZE + (char*)heapbase2)); XBT_DEBUG("Block %zu (%p) not found (size used = %zu)", i, addr_block2, heapinfo2[i].busy_block.busy_size); - mmalloc_backtrace_block_display((void*)heapinfo2, i); + //mmalloc_backtrace_block_display((void*)heapinfo2, i); } nb_diff2++; }else{ @@ -523,7 +508,7 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac if(XBT_LOG_ISENABLED(mm_diff, xbt_log_priority_debug)){ addr_frag2 = (void*) ((char *)addr_block2 + (j << heapinfo2[i].type)); XBT_DEBUG( "Block %zu, Fragment %zu (%p) not found (size used = %d)", i, j, addr_frag2, heapinfo2[i].busy_frag.frag_size[j]); - mmalloc_backtrace_fragment_display((void*)heapinfo2, i, j); + //mmalloc_backtrace_fragment_display((void*)heapinfo2, i, j); } nb_diff2++; }else{ @@ -544,7 +529,6 @@ int mmalloc_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t *stac heaplimit = 0, heapsize1 = 0, heapsize2 = 0; return ((nb_diff1 > 0) || (nb_diff2 > 0)); - } static heap_area_t new_heap_area(int block, int fragment){ @@ -659,11 +643,8 @@ static int compare_area(void *area1, void* area2, size_t size, xbt_dynar_t previ if(add_heap_area_pair(previous, block_pointed1, -1, block_pointed2, -1)){ - if(ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)){ - if(in_mc_comparison_ignore(block_pointed1, -1)) - res_compare = compare_area(addr_block_pointed1, addr_block_pointed2, heapinfo1[block_pointed1].busy_block.busy_size, previous, 1); - else - res_compare = compare_area(addr_block_pointed1, addr_block_pointed2, heapinfo1[block_pointed1].busy_block.busy_size, previous, 0); + if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && (heapinfo1[block_pointed1].busy_block.ignore == 1)){ + res_compare = compare_area(addr_block_pointed1, addr_block_pointed2, heapinfo1[block_pointed1].busy_block.busy_size, previous, 1); }else{ res_compare = compare_area(addr_block_pointed1, addr_block_pointed2, heapinfo1[block_pointed1].busy_block.busy_size, previous, 0); } @@ -687,11 +668,11 @@ static int compare_area(void *area1, void* area2, size_t size, xbt_dynar_t previ if(add_heap_area_pair(previous, block_pointed1, frag_pointed1, block_pointed2, frag_pointed2)){ - if(ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)){ - if(in_mc_comparison_ignore(block_pointed1, frag_pointed1)) + if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && (heapinfo1[block_pointed1].busy_frag.ignore[frag_pointed1] == 1)){ + //if(in_mc_comparison_ignore(block_pointed1, frag_pointed1)) res_compare = compare_area(addr_frag_pointed1, addr_frag_pointed2, heapinfo1[block_pointed1].busy_frag.frag_size[frag_pointed1], previous, 1); - else - res_compare = compare_area(addr_frag_pointed1, addr_frag_pointed2, heapinfo1[block_pointed1].busy_frag.frag_size[frag_pointed1], previous, 0); + /*else + res_compare = compare_area(addr_frag_pointed1, addr_frag_pointed2, heapinfo1[block_pointed1].busy_frag.frag_size[frag_pointed1], previous, 0);*/ }else{ res_compare = compare_area(addr_frag_pointed1, addr_frag_pointed2, heapinfo1[block_pointed1].busy_frag.frag_size[frag_pointed1], previous, 0); } @@ -721,11 +702,8 @@ static int compare_area(void *area1, void* area2, size_t size, xbt_dynar_t previ if(add_heap_area_pair(previous, block_pointed1, frag_pointed1, block_pointed2, frag_pointed2)){ - if(ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)){ - if(in_mc_comparison_ignore(block_pointed1, frag_pointed1)) - res_compare = compare_area(addr_frag_pointed1, addr_frag_pointed2, heapinfo1[block_pointed1].busy_frag.frag_size[frag_pointed1], previous, 1); - else - res_compare = compare_area(addr_frag_pointed1, addr_frag_pointed2, heapinfo1[block_pointed1].busy_frag.frag_size[frag_pointed1], previous, 0); + if((ignore_done < xbt_dynar_length(mc_heap_comparison_ignore)) && (heapinfo1[block_pointed1].busy_frag.ignore[frag_pointed1] == 1)){ + res_compare = compare_area(addr_frag_pointed1, addr_frag_pointed2, heapinfo1[block_pointed1].busy_frag.frag_size[frag_pointed1], previous, 1); }else{ res_compare = compare_area(addr_frag_pointed1, addr_frag_pointed2, heapinfo1[block_pointed1].busy_frag.frag_size[frag_pointed1], previous, 0); }