Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : comment backtrace and add ignore mechanism in mmalloc metadata
[simgrid.git] / src / xbt / mmalloc / mm_diff.c
index 9ffeac1..6dda1cc 100644 (file)
@@ -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);
             }