Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' into mc
[simgrid.git] / src / mc / mc_compare.c
index f9b125b..bf8dac4 100644 (file)
@@ -9,6 +9,7 @@
 #include "mc_private.h"
 
 #include "xbt/mmalloc.h"
 #include "mc_private.h"
 
 #include "xbt/mmalloc.h"
+#include "xbt/mmalloc/mmprivate.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_compare, mc,
                                 "Logging specific to mc_compare");
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_compare, mc,
                                 "Logging specific to mc_compare");
@@ -179,10 +180,10 @@ static int compare_areas_with_type(void *area1, void *area2, mc_snapshot_t snaps
       // * a pointer leads to the read-only segment of the current object;
       // * a pointer lead to a different ELF object.
 
       // * a pointer leads to the read-only segment of the current object;
       // * a pointer lead to a different ELF object.
 
-      // The pointers are both in the heap:
-      if(addr_pointed1 > std_heap && (char *)addr_pointed1 < (char*) std_heap + STD_HEAP_SIZE){
-        if(!(addr_pointed2 > std_heap && (char *)addr_pointed2 < (char*) std_heap + STD_HEAP_SIZE))
+      if(addr_pointed1 > std_heap && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1)){
+        if(!(addr_pointed2 > std_heap && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2)))
           return 1;
           return 1;
+        // The pointers are both in the heap:
         return compare_heap_area(addr_pointed1, addr_pointed2, snapshot1, snapshot2, NULL, type->subtype, pointer_level);
       }
 
         return compare_heap_area(addr_pointed1, addr_pointed2, snapshot1, snapshot2, NULL, type->subtype, pointer_level);
       }
 
@@ -245,14 +246,11 @@ static int compare_global_variables(int region_type, mc_mem_region_t r1, mc_mem_
   void* start_data_libsimgrid = mc_libsimgrid_info->start_rw;
 
   mc_object_info_t object_info = NULL;
   void* start_data_libsimgrid = mc_libsimgrid_info->start_rw;
 
   mc_object_info_t object_info = NULL;
-  mc_object_info_t other_object_info = NULL;
   if(region_type == 2){
     object_info = mc_binary_info;
   if(region_type == 2){
     object_info = mc_binary_info;
-    other_object_info = mc_libsimgrid_info;
     start_data = start_data_binary;
   }else{
     object_info = mc_libsimgrid_info;
     start_data = start_data_binary;
   }else{
     object_info = mc_libsimgrid_info;
-    other_object_info = mc_binary_info;
     start_data = start_data_libsimgrid;
   }
   variables = object_info->global_variables;
     start_data = start_data_libsimgrid;
   }
   variables = object_info->global_variables;
@@ -308,14 +306,16 @@ static int compare_local_variables(mc_snapshot_t snapshot1, mc_snapshot_t snapsh
     while(cursor < xbt_dynar_length(stack1->local_variables)){
       current_var1 = (local_variable_t)xbt_dynar_get_as(stack1->local_variables, cursor, local_variable_t);
       current_var2 = (local_variable_t)xbt_dynar_get_as(stack2->local_variables, cursor, local_variable_t);
     while(cursor < xbt_dynar_length(stack1->local_variables)){
       current_var1 = (local_variable_t)xbt_dynar_get_as(stack1->local_variables, cursor, local_variable_t);
       current_var2 = (local_variable_t)xbt_dynar_get_as(stack2->local_variables, cursor, local_variable_t);
-      if(strcmp(current_var1->name, current_var2->name) != 0 || strcmp(current_var1->frame, current_var2->frame) != 0 || current_var1->ip != current_var2->ip){
+      if(strcmp(current_var1->name, current_var2->name) != 0 || current_var1->subprogram != current_var1->subprogram || current_var1->ip != current_var2->ip){
         xbt_dynar_free(&compared_pointers);
         xbt_dynar_free(&compared_pointers);
-        XBT_VERB("Different name of variable (%s - %s) or frame (%s - %s) or ip (%lu - %lu)", current_var1->name, current_var2->name, current_var1->frame, current_var2->frame, current_var1->ip, current_var2->ip);
+        // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram
+        XBT_VERB("Different name of variable (%s - %s) or frame (%s - %s) or ip (%lu - %lu)", current_var1->name, current_var2->name, current_var1->subprogram->name, current_var2->subprogram->name, current_var1->ip, current_var2->ip);
         return 1;
       }
       offset1 = (char *)current_var1->address - (char *)std_heap;
       offset2 = (char *)current_var2->address - (char *)std_heap;
         return 1;
       }
       offset1 = (char *)current_var1->address - (char *)std_heap;
       offset2 = (char *)current_var2->address - (char *)std_heap;
-      XBT_DEBUG("Compare local variable %s of frame %s", current_var1->name, current_var1->frame);
+      // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram
+      XBT_DEBUG("Compare local variable %s of frame %s", current_var1->subprogram->name, current_var1->subprogram->name);
 
 
       if(current_var1->region == 1) {
 
 
       if(current_var1->region == 1) {
@@ -326,7 +326,8 @@ static int compare_local_variables(mc_snapshot_t snapshot1, mc_snapshot_t snapsh
         res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, snapshot1, snapshot2, subtype, 0, 2, start_data_binary, 0);
       }
       if(res == 1){
         res = compare_areas_with_type( (char *)heap1 + offset1, (char *)heap2 + offset2, snapshot1, snapshot2, subtype, 0, 2, start_data_binary, 0);
       }
       if(res == 1){
-        XBT_VERB("Local variable %s (%p - %p) in frame %s  is different between snapshots", current_var1->name,(char *)heap1 + offset1, (char *)heap2 + offset2, current_var1->frame);
+        // TODO, fix current_varX->subprogram->name to include name if DW_TAG_inlined_subprogram
+        XBT_VERB("Local variable %s (%p - %p) in frame %s  is different between snapshots", current_var1->name,(char *)heap1 + offset1, (char *)heap2 + offset2, current_var1->subprogram->name);
         xbt_dynar_free(&compared_pointers);
         compared_pointers = NULL;
         return res;
         xbt_dynar_free(&compared_pointers);
         compared_pointers = NULL;
         return res;
@@ -453,7 +454,9 @@ int snapshot_compare(void *state1, void *state2){
   /* Stacks comparison */
   unsigned int  cursor = 0;
   int diff_local = 0;
   /* Stacks comparison */
   unsigned int  cursor = 0;
   int diff_local = 0;
+#ifdef MC_DEBUG
   is_diff = 0;
   is_diff = 0;
+#endif
   mc_snapshot_stack_t stack1, stack2;
     
   while(cursor < xbt_dynar_length(s1->stacks)){
   mc_snapshot_stack_t stack1, stack2;
     
   while(cursor < xbt_dynar_length(s1->stacks)){