Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of framagit.org:Adrien.Gougeon/simgrid
[simgrid.git] / src / mc / compare.cpp
index 9e93e1a..aec0a0c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008-2019. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2008-2020. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -153,7 +153,7 @@ static ssize_t heap_comparison_ignore_size(const std::vector<simgrid::mc::Ignore
 
 static bool is_stack(const void *address)
 {
-  for (auto const& stack : mc_model_checker->process().stack_areas())
+  for (auto const& stack : mc_model_checker->get_remote_simulation().stack_areas())
     if (address == stack.address)
       return true;
   return false;
@@ -162,7 +162,7 @@ static bool is_stack(const void *address)
 // TODO, this should depend on the snapshot?
 static bool is_block_stack(int block)
 {
-  for (auto const& stack : mc_model_checker->process().stack_areas())
+  for (auto const& stack : mc_model_checker->get_remote_simulation().stack_areas())
     if (block == stack.block)
       return true;
   return false;
@@ -200,7 +200,7 @@ int StateComparator::initHeapInformation(const s_xbt_mheap_t* heap1, const s_xbt
   if ((heap1->heaplimit != heap2->heaplimit) || (heap1->heapsize != heap2->heapsize))
     return -1;
   this->heaplimit     = heap1->heaplimit;
-  this->std_heap_copy = *mc_model_checker->process().get_heap();
+  this->std_heap_copy = *mc_model_checker->get_remote_simulation().get_heap();
   this->processStates[0].initHeapInformation(heap1, i1);
   this->processStates[1].initHeapInformation(heap2, i2);
   return 0;
@@ -220,7 +220,7 @@ static bool heap_area_differ(StateComparator& state, const void* area1, const vo
 
 static bool mmalloc_heap_differ(StateComparator& state, const Snapshot& snapshot1, const Snapshot& snapshot2)
 {
-  const RemoteClient& process = mc_model_checker->process();
+  const RemoteSimulation& process = mc_model_checker->get_remote_simulation();
 
   /* Check busy blocks */
   size_t i1 = 1;
@@ -242,17 +242,17 @@ static bool mmalloc_heap_differ(StateComparator& state, const Snapshot& snapshot
       snapshot2.read<malloc_info*>(RemotePtr<malloc_info*>((std::uint64_t)heapinfo_address));
 
   while (i1 < state.heaplimit) {
-    const malloc_info* heapinfo1 =
-        (const malloc_info*)heap_region1->read(&heapinfo_temp1, &heapinfos1[i1], sizeof(malloc_info));
-    const malloc_info* heapinfo2 =
-        (const malloc_info*)heap_region2->read(&heapinfo_temp2, &heapinfos2[i1], sizeof(malloc_info));
+    const auto* heapinfo1 =
+        static_cast<malloc_info*>(heap_region1->read(&heapinfo_temp1, &heapinfos1[i1], sizeof(malloc_info)));
+    const auto* heapinfo2 =
+        static_cast<malloc_info*>(heap_region2->read(&heapinfo_temp2, &heapinfos2[i1], sizeof(malloc_info)));
 
     if (heapinfo1->type == MMALLOC_TYPE_FREE || heapinfo1->type == MMALLOC_TYPE_HEAPINFO) {      /* Free block */
       i1 ++;
       continue;
     }
 
-    xbt_assert(heapinfo1->type >= 0, "Unkown mmalloc block type: %d", heapinfo1->type);
+    xbt_assert(heapinfo1->type >= 0, "Unknown mmalloc block type: %d", heapinfo1->type);
 
     void* addr_block1 = ((void*)(((ADDR2UINT(i1)) - 1) * BLOCKSIZE + (char*)state.std_heap_copy.heapbase));
 
@@ -295,8 +295,8 @@ static bool mmalloc_heap_differ(StateComparator& state, const Snapshot& snapshot
           continue;
         }
 
-        const malloc_info* heapinfo2b =
-            (const malloc_info*)heap_region2->read(&heapinfo_temp2b, &heapinfos2[i2], sizeof(malloc_info));
+        const auto* heapinfo2b =
+            static_cast<malloc_info*>(heap_region2->read(&heapinfo_temp2b, &heapinfos2[i2], sizeof(malloc_info)));
 
         if (heapinfo2b->type != MMALLOC_TYPE_UNFRAGMENTED) {
           i2++;
@@ -331,7 +331,7 @@ static bool mmalloc_heap_differ(StateComparator& state, const Snapshot& snapshot
         if (state.equals_to_<1>(i1, j1).valid_)
           continue;
 
-        void* addr_frag1 = (void*)((char*)addr_block1 + (j1 << heapinfo1->type));
+        void* addr_frag1 = (char*)addr_block1 + (j1 << heapinfo1->type);
 
         size_t i2 = 1;
         bool equal = false;
@@ -345,8 +345,8 @@ static bool mmalloc_heap_differ(StateComparator& state, const Snapshot& snapshot
         }
 
         while (i2 < state.heaplimit && not equal) {
-          const malloc_info* heapinfo2b =
-              (const malloc_info*)heap_region2->read(&heapinfo_temp2b, &heapinfos2[i2], sizeof(malloc_info));
+          const auto* heapinfo2b =
+              static_cast<malloc_info*>(heap_region2->read(&heapinfo_temp2b, &heapinfos2[i2], sizeof(malloc_info)));
 
           if (heapinfo2b->type == MMALLOC_TYPE_FREE || heapinfo2b->type == MMALLOC_TYPE_HEAPINFO) {
             i2 ++;
@@ -359,7 +359,7 @@ static bool mmalloc_heap_differ(StateComparator& state, const Snapshot& snapshot
             continue;
           }
 
-          xbt_assert(heapinfo2b->type >= 0, "Unkown mmalloc block type: %d", heapinfo2b->type);
+          xbt_assert(heapinfo2b->type >= 0, "Unknown mmalloc block type: %d", heapinfo2b->type);
 
           for (size_t j2 = 0; j2 < (size_t)(BLOCKSIZE >> heapinfo2b->type); j2++) {
             if (i2 == i1 && j2 == j1)
@@ -391,8 +391,8 @@ static bool mmalloc_heap_differ(StateComparator& state, const Snapshot& snapshot
 
   /* All blocks/fragments are equal to another block/fragment_ ? */
   for (size_t i = 1; i < state.heaplimit; i++) {
-    const malloc_info* heapinfo1 =
-        (const malloc_info*)heap_region1->read(&heapinfo_temp1, &heapinfos1[i], sizeof(malloc_info));
+    const auto* heapinfo1 =
+        static_cast<malloc_info*>(heap_region1->read(&heapinfo_temp1, &heapinfos1[i], sizeof(malloc_info)));
 
     if (heapinfo1->type == MMALLOC_TYPE_UNFRAGMENTED && i1 == state.heaplimit && heapinfo1->busy_block.busy_size > 0 &&
         not state.equals_to_<1>(i, 0).valid_) {
@@ -410,8 +410,8 @@ static bool mmalloc_heap_differ(StateComparator& state, const Snapshot& snapshot
   }
 
   for (size_t i = 1; i < state.heaplimit; i++) {
-    const malloc_info* heapinfo2 =
-        (const malloc_info*)heap_region2->read(&heapinfo_temp2, &heapinfos2[i], sizeof(malloc_info));
+    const auto* heapinfo2 =
+        static_cast<malloc_info*>(heap_region2->read(&heapinfo_temp2, &heapinfos2[i], sizeof(malloc_info)));
     if (heapinfo2->type == MMALLOC_TYPE_UNFRAGMENTED && i1 == state.heaplimit && heapinfo2->busy_block.busy_size > 0 &&
         not state.equals_to_<2>(i, 0).valid_) {
       XBT_DEBUG("Block %zu not found (size used = %zu)", i,
@@ -448,7 +448,7 @@ static bool heap_area_differ_without_type(StateComparator& state, const void* re
                                           const Snapshot& snapshot1, const Snapshot& snapshot2,
                                           HeapLocationPairs* previous, int size, int check_ignore)
 {
-  const RemoteClient& process = mc_model_checker->process();
+  const RemoteSimulation& process = mc_model_checker->get_remote_simulation();
   const Region* heap_region1  = MC_get_heap_region(snapshot1);
   const Region* heap_region2  = MC_get_heap_region(snapshot2);
 
@@ -734,7 +734,7 @@ static Type* get_offset_type(void* real_base_address, Type* type, int offset, in
 static bool heap_area_differ(StateComparator& state, const void* area1, const void* area2, const Snapshot& snapshot1,
                              const Snapshot& snapshot2, HeapLocationPairs* previous, Type* type, int pointer_level)
 {
-  const simgrid::mc::RemoteClient& process = mc_model_checker->process();
+  const simgrid::mc::RemoteSimulation& process = mc_model_checker->get_remote_simulation();
 
   ssize_t block1;
   ssize_t block2;
@@ -810,10 +810,10 @@ static bool heap_area_differ(StateComparator& state, const void* area1, const vo
   const Region* heap_region1 = MC_get_heap_region(snapshot1);
   const Region* heap_region2 = MC_get_heap_region(snapshot2);
 
-  const malloc_info* heapinfo1 =
-      (const malloc_info*)heap_region1->read(&heapinfo_temp1, &heapinfos1[block1], sizeof(malloc_info));
-  const malloc_info* heapinfo2 =
-      (const malloc_info*)heap_region2->read(&heapinfo_temp2, &heapinfos2[block2], sizeof(malloc_info));
+  const auto* heapinfo1 =
+      static_cast<malloc_info*>(heap_region1->read(&heapinfo_temp1, &heapinfos1[block1], sizeof(malloc_info)));
+  const auto* heapinfo2 =
+      static_cast<malloc_info*>(heap_region2->read(&heapinfo_temp2, &heapinfos2[block2], sizeof(malloc_info)));
 
   if ((heapinfo1->type == MMALLOC_TYPE_FREE || heapinfo1->type==MMALLOC_TYPE_HEAPINFO)
     && (heapinfo2->type == MMALLOC_TYPE_FREE || heapinfo2->type ==MMALLOC_TYPE_HEAPINFO)) {
@@ -873,12 +873,12 @@ static bool heap_area_differ(StateComparator& state, const void* area1, const vo
 
   } else if ((heapinfo1->type > 0) && (heapinfo2->type > 0)) {      /* Fragmented block */
     // Fragment number:
-    ssize_t frag1 = ((uintptr_t)(ADDR2UINT(area1) % (BLOCKSIZE))) >> heapinfo1->type;
-    ssize_t frag2 = ((uintptr_t)(ADDR2UINT(area2) % (BLOCKSIZE))) >> heapinfo2->type;
+    ssize_t frag1 = (ADDR2UINT(area1) % BLOCKSIZE) >> heapinfo1->type;
+    ssize_t frag2 = (ADDR2UINT(area2) % BLOCKSIZE) >> heapinfo2->type;
 
     // Process address of the fragment_:
-    void* real_addr_frag1 = (void*)((char*)real_addr_block1 + (frag1 << heapinfo1->type));
-    void* real_addr_frag2 = (void*)((char*)real_addr_block2 + (frag2 << heapinfo2->type));
+    void* real_addr_frag1 = (char*)real_addr_block1 + (frag1 << heapinfo1->type);
+    void* real_addr_frag2 = (char*)real_addr_block2 + (frag2 << heapinfo2->type);
 
     // Check the size of the fragments against the size of the type:
     if (type_size != -1) {
@@ -1015,7 +1015,6 @@ static bool areas_differ_with_type(simgrid::mc::StateComparator& state, const vo
   const simgrid::mc::Type* subtype;
   const simgrid::mc::Type* subsubtype;
   int elm_size;
-  int i;
 
   xbt_assert(type != nullptr);
   switch (type->type) {
@@ -1060,7 +1059,7 @@ static bool areas_differ_with_type(simgrid::mc::StateComparator& state, const vo
         default:
           return false;
       }
-      for (i = 0; i < type->element_count; i++) {
+      for (int i = 0; i < type->element_count; i++) {
         size_t off = i * elm_size;
         if (areas_differ_with_type(state, (const char*)real_area1 + off, snapshot1, region1,
                                    (const char*)real_area2 + off, snapshot2, region2, type->subtype, pointer_level))
@@ -1147,11 +1146,10 @@ static bool global_variables_differ(simgrid::mc::StateComparator& state,
     // If the variable is not in this object, skip it:
     // We do not expect to find a pointer to something which is not reachable
     // by the global variables.
-    if ((char *) current_var.address < (char *) object_info->start_rw
-        || (char *) current_var.address > (char *) object_info->end_rw)
+    if ((char*)current_var.address < object_info->start_rw || (char*)current_var.address > object_info->end_rw)
       continue;
 
-    simgrid::mc::Type* bvariable_type = current_var.type;
+    const simgrid::mc::Type* bvariable_type = current_var.type;
     if (areas_differ_with_type(state, current_var.address, snapshot1, r1, current_var.address, snapshot2, r2,
                                bvariable_type, 0)) {
       XBT_VERB("Global variable %s (%p) is different between snapshots", current_var.name.c_str(), current_var.address);
@@ -1202,7 +1200,7 @@ bool snapshot_equal(const Snapshot* s1, const Snapshot* s2)
   // TODO, make this a field of ModelChecker or something similar
   static StateComparator state_comparator;
 
-  const RemoteClient& process = mc_model_checker->process();
+  const RemoteSimulation& process = mc_model_checker->get_remote_simulation();
 
   if (s1->hash_ != s2->hash_) {
     XBT_VERB("(%d - %d) Different hash: 0x%" PRIx64 "--0x%" PRIx64, s1->num_state_, s2->num_state_, s1->hash_,
@@ -1229,10 +1227,10 @@ bool snapshot_equal(const Snapshot* s1, const Snapshot* s2)
   }
 
   /* Init heap information used in heap comparison algorithm */
-  xbt_mheap_t heap1 = static_cast<xbt_mheap_t>(s1->read_bytes(alloca(sizeof(s_xbt_mheap_t)), sizeof(s_xbt_mheap_t),
-                                                              remote(process.heap_address), ReadOptions::lazy()));
-  xbt_mheap_t heap2 = static_cast<xbt_mheap_t>(s2->read_bytes(alloca(sizeof(s_xbt_mheap_t)), sizeof(s_xbt_mheap_t),
-                                                              remote(process.heap_address), ReadOptions::lazy()));
+  const s_xbt_mheap_t* heap1 = static_cast<xbt_mheap_t>(s1->read_bytes(
+      alloca(sizeof(s_xbt_mheap_t)), sizeof(s_xbt_mheap_t), remote(process.heap_address), ReadOptions::lazy()));
+  const s_xbt_mheap_t* heap2 = static_cast<xbt_mheap_t>(s2->read_bytes(
+      alloca(sizeof(s_xbt_mheap_t)), sizeof(s_xbt_mheap_t), remote(process.heap_address), ReadOptions::lazy()));
   if (state_comparator.initHeapInformation(heap1, heap2, s1->to_ignore_, s2->to_ignore_) == -1) {
     XBT_VERB("(%d - %d) Different heap information", s1->num_state_, s2->num_state_);
     return false;