Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Move MC malloc introspection code in simgrid::mc
[simgrid.git] / src / mc / mc_compare.cpp
index 00ead0e..33371e4 100644 (file)
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_smx.h"
 #include "src/mc/mc_dwarf.hpp"
-
+#include "src/mc/malloc.hpp"
 #include "src/mc/Frame.hpp"
 #include "src/mc/ObjectInformation.hpp"
 #include "src/mc/Variable.hpp"
 
-#ifdef HAVE_SMPI
+#if HAVE_SMPI
 #include "src/smpi/private.h"
 #endif
 
 
 using simgrid::mc::remote;
 
-extern "C" {
-
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_compare, xbt,
                                 "Logging specific to mc_compare in mc");
 
-}
-
 namespace simgrid {
 namespace mc {
 
@@ -150,19 +146,17 @@ static int compare_areas_with_type(ComparisonState& state,
     void* addr_pointed1 = MC_region_read_pointer(region1, real_area1);
     void* addr_pointed2 = MC_region_read_pointer(region2, real_area2);
 
-    if (type->subtype && type->subtype->type == DW_TAG_subroutine_type) {
+    if (type->subtype && type->subtype->type == DW_TAG_subroutine_type)
       return (addr_pointed1 != addr_pointed2);
-    } else {
-
-      if (addr_pointed1 == nullptr && addr_pointed2 == NULL)
-        return 0;
-      if (addr_pointed1 == nullptr || addr_pointed2 == NULL)
-        return 1;
-      if (!state.compared_pointers.insert(
-          std::make_pair(addr_pointed1, addr_pointed2)).second)
-        return 0;
+    if (addr_pointed1 == nullptr && addr_pointed2 == NULL)
+      return 0;
+    if (addr_pointed1 == nullptr || addr_pointed2 == NULL)
+      return 1;
+    if (!state.compared_pointers.insert(
+        std::make_pair(addr_pointed1, addr_pointed2)).second)
+      return 0;
 
-      pointer_level++;
+    pointer_level++;
 
       // Some cases are not handled here:
       // * the pointers lead to different areas (one to the heap, the other to the RW segment ...);
@@ -176,7 +170,7 @@ static int compare_areas_with_type(ComparisonState& state,
              && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2)))
           return 1;
         // The pointers are both in the heap:
-        return compare_heap_area(process_index, addr_pointed1, addr_pointed2, snapshot1,
+        return simgrid::mc::compare_heap_area(process_index, addr_pointed1, addr_pointed2, snapshot1,
                                  snapshot2, nullptr, type->subtype, pointer_level);
       }
 
@@ -186,21 +180,19 @@ static int compare_areas_with_type(ComparisonState& state,
           return 1;
         if (!type->type_id)
           return (addr_pointed1 != addr_pointed2);
-        else {
+        else
           return compare_areas_with_type(state, process_index,
                                          addr_pointed1, snapshot1, region1,
                                          addr_pointed2, snapshot2, region2,
                                          type->subtype, pointer_level);
-        }
       }
 
       // TODO, We do not handle very well the case where
       // it belongs to a different (non-heap) region from the current one.
 
-      else {
+      else
         return (addr_pointed1 != addr_pointed2);
-      }
-    }
+
     break;
   }
   case DW_TAG_structure_type:
@@ -240,12 +232,11 @@ static int compare_global_variables(simgrid::mc::ObjectInformation* object_info,
 {
   xbt_assert(r1 && r2, "Missing region.");
 
-#ifdef HAVE_SMPI
+#if HAVE_SMPI
   if (r1->storage_type() == simgrid::mc::StorageType::Privatized) {
     xbt_assert(process_index >= 0);
-    if (r2->storage_type() != simgrid::mc::StorageType::Privatized) {
+    if (r2->storage_type() != simgrid::mc::StorageType::Privatized)
       return 1;
-    }
 
     size_t process_count = MC_smpi_process_count();
     xbt_assert(process_count == r1->privatized_data().size()
@@ -309,7 +300,8 @@ static int compare_local_variables(int process_index,
   if (stack1->local_variables.size() != stack2->local_variables.size()) {
     XBT_VERB("Different number of local variables");
     return 1;
-  } else {
+  }
+
     unsigned int cursor = 0;
     local_variable_t current_var1, current_var2;
     int res;
@@ -353,7 +345,6 @@ static int compare_local_variables(int process_index,
       cursor++;
     }
     return 0;
-  }
 }
 
 int snapshot_compare(void *state1, void *state2)
@@ -364,20 +355,20 @@ int snapshot_compare(void *state1, void *state2)
   int num1, num2;
 
   if (_sg_mc_liveness) {        /* Liveness MC */
-    s1 = ((mc_visited_pair_t) state1)->graph_state->system_state;
-    s2 = ((mc_visited_pair_t) state2)->graph_state->system_state;
-    num1 = ((mc_visited_pair_t) state1)->num;
-    num2 = ((mc_visited_pair_t) state2)->num;
+    s1 = ((simgrid::mc::VisitedPair*) state1)->graph_state->system_state;
+    s2 = ((simgrid::mc::VisitedPair*) state2)->graph_state->system_state;
+    num1 = ((simgrid::mc::VisitedPair*) state1)->num;
+    num2 = ((simgrid::mc::VisitedPair*) state2)->num;
   }else if (_sg_mc_termination) { /* Non-progressive cycle MC */
     s1 = ((mc_state_t) state1)->system_state;
     s2 = ((mc_state_t) state2)->system_state;
     num1 = ((mc_state_t) state1)->num;
     num2 = ((mc_state_t) state2)->num;
   } else {                      /* Safety or comm determinism MC */
-    s1 = ((mc_visited_state_t) state1)->system_state;
-    s2 = ((mc_visited_state_t) state2)->system_state;
-    num1 = ((mc_visited_state_t) state1)->num;
-    num2 = ((mc_visited_state_t) state2)->num;
+    s1 = ((simgrid::mc::VisitedState*) state1)->system_state;
+    s2 = ((simgrid::mc::VisitedState*) state2)->system_state;
+    num1 = ((simgrid::mc::VisitedState*) state1)->num;
+    num2 = ((simgrid::mc::VisitedState*) state2)->num;
   }
 
   int errors = 0;
@@ -392,9 +383,8 @@ int snapshot_compare(void *state1, void *state2)
 #ifndef MC_DEBUG
       return 1;
 #endif
-    } else {
+    } else
       XBT_VERB("(%d - %d) Same hash : 0x%" PRIx64, num1, num2, s1->hash);
-    }
   }
 
   /* Compare enabled processes */
@@ -437,7 +427,7 @@ int snapshot_compare(void *state1, void *state2)
     alloca(sizeof(struct mdesc)), sizeof(struct mdesc),
     remote(process->heap_address),
     simgrid::mc::ProcessIndexMissing, simgrid::mc::ReadOptions::lazy());
-  res_init = init_heap_information(heap1, heap2, &s1->to_ignore, &s2->to_ignore);
+  res_init = simgrid::mc::init_heap_information(heap1, heap2, &s1->to_ignore, &s2->to_ignore);
   if (res_init == -1) {
 #ifdef MC_DEBUG
     XBT_DEBUG("(%d - %d) Different heap information", num1, num2);
@@ -482,7 +472,7 @@ int snapshot_compare(void *state1, void *state2)
                num2, cursor + 1);
 #endif
 
-      reset_heap_information();
+      simgrid::mc::reset_heap_information();
 
       return 1;
 #endif
@@ -532,7 +522,7 @@ int snapshot_compare(void *state1, void *state2)
   }
 
   /* Compare heap */
-  if (mmalloc_compare_heap(s1, s2) > 0) {
+  if (simgrid::mc::mmalloc_compare_heap(s1, s2) > 0) {
 
 #ifdef MC_DEBUG
     XBT_DEBUG("(%d - %d) Different heap (mmalloc_compare)", num1, num2);
@@ -547,7 +537,7 @@ int snapshot_compare(void *state1, void *state2)
 #endif
   }
 
-  reset_heap_information();
+  simgrid::mc::reset_heap_information();
 
 #ifdef MC_VERBOSE
   if (errors || hash_result)