Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : previous algorithm for heap comparison, used to compare the results...
[simgrid.git] / src / mc / mc_checkpoint.c
index 3cfa351..6d9dc31 100644 (file)
@@ -179,6 +179,7 @@ static int data_libsimgrid_region_compare(void *d1, void *d2, size_t size){
         continue;
       }else{
         XBT_DEBUG("Different byte (offset=%zu) (%p - %p) in data libsimgrid region", i, (char *)d1 + i, (char *)d2 + i);
+        XBT_DEBUG("Addresses pointed : %p - %p\n", addr_pointed1, addr_pointed2);
         distance++;
       }
     }
@@ -189,9 +190,30 @@ static int data_libsimgrid_region_compare(void *d1, void *d2, size_t size){
   return distance;
 }
 
+static int heap_region_compare(void *d1, void *d2, size_t size);
+
+static int heap_region_compare(void *d1, void *d2, size_t size){
+  
+  int distance = 0;
+  size_t i = 0;
+  
+  for(i=0; i<size; i++){
+    if(memcmp(((char *)d1) + i, ((char *)d2) + i, 1) != 0){
+      //XBT_DEBUG("Different byte (offset=%zu) (%p - %p) in heap region", i, (char *)d1 + i, (char *)d2 + i);
+      distance++;
+    }
+  }
+  
+  XBT_DEBUG("Hamming distance between heap regions : %d (total size : %zu)", distance, size);
+
+  return distance;
+}
+
 int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
 
   int errors = 0, i;
+  //int dist = 0;
+
   
   if(s1->num_reg != s2->num_reg){
     XBT_DEBUG("Different num_reg (s1 = %u, s2 = %u)", s1->num_reg, s2->num_reg);
@@ -220,6 +242,14 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         XBT_DEBUG("Different heap (mmalloc_compare)");
         errors++; 
       }
+      /*if(heap_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
+        XBT_DEBUG("Different memcmp for heap");
+        errors++;
+        }*/
+      /*if((dist = mmalloc_linear_compare_heap((xbt_mheap_t)s1->regions[i]->data, (xbt_mheap_t)s2->regions[i]->data)) > 0){
+        XBT_DEBUG("Different heap (mmalloc_linear_compare) : %d", dist);
+        errors++; 
+        }*/
       break;
     case 1 :
       /* Compare data libsimgrid region */
@@ -275,16 +305,15 @@ void get_plt_section(){
   char *lfields[7];
   int i, plt_not_found = 1;
   unsigned long int size, offset;
-  
-  char command[512];
-  sprintf(command, "objdump --section-headers %s", libsimgrid_path); 
+
+  char *command = bprintf( "objdump --section-headers %s", libsimgrid_path);
 
   fp = popen(command, "r");
 
   if(fp == NULL)
     perror("popen failed");
 
-  while ((read = getline(&line, &n, fp)) != -1 && plt_not_found) {
+  while ((read = getline(&line, &n, fp)) != -1 && plt_not_found == 1) {
 
     if(n == 0)
       continue;
@@ -310,7 +339,6 @@ void get_plt_section(){
         offset = strtoul(lfields[4], NULL, 16);
         start_plt = (char *)start_text_libsimgrid + offset;
         end_plt = (char *)start_plt + size;
-        fprintf(stderr, ".plt section : %p - %p \n", start_plt, end_plt); 
         plt_not_found = 0;
       }
     }
@@ -318,6 +346,7 @@ void get_plt_section(){
     
   }
 
+  free(command);
   free(line);
   pclose(fp);