+static int compare_area(void *area1, void* area2, size_t size, xbt_dynar_t previous, int check_ignore);
+static void match_equals(xbt_dynar_t list, xbt_dynar_t *equals);
+
+static int in_mc_comparison_ignore(int block, int fragment);
+static size_t heap_comparison_ignore_size(void *address);
+static void add_heap_equality(xbt_dynar_t *equals, void *a1, void *a2);
+static void remove_heap_equality(xbt_dynar_t *equals, int address, void *a);
+
+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); */
+ /* } */
+ /* } */
+}
+
+void mmalloc_backtrace_fragment_display(void* heapinfo, int block, int frag){
+
+ /* 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; */
+
+ /* 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); */
+ /* } */
+ /* } */
+
+}
+
+void mmalloc_backtrace_display(void *addr){
+
+ /* 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; */
+ /* } */
+}
+
+
+void *s_heap = NULL, *heapbase1 = NULL, *heapbase2 = NULL;
+malloc_info *heapinfo1 = NULL, *heapinfo2 = NULL;
+size_t heaplimit = 0, heapsize1 = 0, heapsize2 = 0;
+
+int ignore_done = 0;