Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update copyright notices
[simgrid.git] / src / mc / mc_diff.cpp
index 7e3bb37..c8d9d8b 100644 (file)
@@ -1,6 +1,6 @@
 /* mc_diff - Memory snapshooting and comparison                             */
 
-/* Copyright (c) 2008-2014. The SimGrid Team.
+/* Copyright (c) 2008-2015. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -14,6 +14,7 @@
 #include "mc/datatypes.h"
 #include "mc/mc_private.h"
 #include "mc/mc_snapshot.h"
+#include "mc/Type.hpp"
 
 using simgrid::mc::remote;
 
@@ -151,7 +152,8 @@ struct s_mc_diff {
   std::vector<s_mc_heap_ignore_region_t>* to_ignore1;
   std::vector<s_mc_heap_ignore_region_t>* to_ignore2;
   s_heap_area_t *equals_to1, *equals_to2;
-  mc_type_t *types1, *types2;
+  simgrid::mc::Type **types1;
+  simgrid::mc::Type **types2;
   size_t available;
 };
 
@@ -383,7 +385,7 @@ int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2,
     state->types1 = (simgrid::mc::Type**)
         realloc(state->types1,
                 state->heaplimit * MAX_FRAGMENT_PER_BLOCK *
-                sizeof(type_name *));
+                sizeof(simgrid::mc::Type*));
     state->equals_to2 = (s_heap_area_t*)
         realloc(state->equals_to2,
                 state->heaplimit * MAX_FRAGMENT_PER_BLOCK *
@@ -391,7 +393,7 @@ int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2,
     state->types2 = (simgrid::mc::Type**)
         realloc(state->types2,
                 state->heaplimit * MAX_FRAGMENT_PER_BLOCK *
-                sizeof(type_name *));
+                sizeof(simgrid::mc::Type*));
     state->available = state->heaplimit;
   }
 
@@ -430,7 +432,7 @@ mc_mem_region_t MC_get_heap_region(mc_snapshot_t snapshot)
 
 int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2)
 {
-  mc_process_t process = &mc_model_checker->process();
+  simgrid::mc::Process* process = &mc_model_checker->process();
   struct s_mc_diff *state = mc_diff_info;
 
   /* Start comparison */
@@ -787,7 +789,7 @@ static int compare_heap_area_without_type(struct s_mc_diff *state, int process_i
                                           xbt_dynar_t previous, int size,
                                           int check_ignore)
 {
-  mc_process_t process = &mc_model_checker->process();
+  simgrid::mc::Process* process = &mc_model_checker->process();
 
   int i = 0;
   const void *addr_pointed1, *addr_pointed2;
@@ -875,7 +877,7 @@ static int compare_heap_area_with_type(struct s_mc_diff *state, int process_inde
                                        const void *real_area1, const void *real_area2,
                                        mc_snapshot_t snapshot1,
                                        mc_snapshot_t snapshot2,
-                                       xbt_dynar_t previous, mc_type_t type,
+                                       xbt_dynar_t previous, simgrid::mc::Type* type,
                                        int area_size, int check_ignore,
                                        int pointer_level)
 {
@@ -893,11 +895,9 @@ top:
     return 0;
   }
 
-  mc_type_t subtype, subsubtype;
+  simgrid::mc::Type *subtype, *subsubtype;
   int res, elm_size;
-  unsigned int cursor = 0;
-  mc_type_t member;
-  const void *addr_pointed1, *addr_pointed2;;
+  const void *addr_pointed1, *addr_pointed2;
 
   mc_mem_region_t heap_region1 = MC_get_heap_region(snapshot1);
   mc_mem_region_t heap_region2 = MC_get_heap_region(snapshot2);
@@ -1042,17 +1042,16 @@ top:
         return -1;
       }
     } else {
-      cursor = 0;
-      xbt_dynar_foreach(type->members, cursor, member) {
+      for(simgrid::mc::Type& member : type->members) {
         // TODO, optimize this? (for the offset case)
         void *real_member1 =
-            mc_member_resolve(real_area1, type, member, (mc_address_space_t) snapshot1, process_index);
+            mc_member_resolve(real_area1, type, &member, (simgrid::mc::AddressSpace*) snapshot1, process_index);
         void *real_member2 =
-            mc_member_resolve(real_area2, type, member, (mc_address_space_t) snapshot2, process_index);
+            mc_member_resolve(real_area2, type, &member, (simgrid::mc::AddressSpace*) snapshot2, process_index);
         res =
             compare_heap_area_with_type(state, process_index, real_member1, real_member2,
                                         snapshot1, snapshot2,
-                                        previous, member->subtype, -1,
+                                        previous, member.subtype, -1,
                                         check_ignore, 0);
         if (res == 1) {
           return res;
@@ -1083,7 +1082,7 @@ top:
  * @param  area_size
  * @return                    DWARF type ID for given offset
  */
-static mc_type_t get_offset_type(void *real_base_address, mc_type_t type,
+static simgrid::mc::Type* get_offset_type(void *real_base_address, simgrid::mc::Type* type,
                                  int offset, int area_size,
                                  mc_snapshot_t snapshot, int process_index)
 {
@@ -1104,20 +1103,18 @@ static mc_type_t get_offset_type(void *real_base_address, mc_type_t type,
       else
         return NULL;
     } else {
-      unsigned int cursor = 0;
-      mc_type_t member;
-      xbt_dynar_foreach(type->members, cursor, member) {
+      for(simgrid::mc::Type& member : type->members) {
 
-        if (member->has_offset_location()) {
+        if (member.has_offset_location()) {
           // We have the offset, use it directly (shortcut):
-          if (member->offset() == offset)
-            return member->subtype;
+          if (member.offset() == offset)
+            return member.subtype;
         } else {
           void *real_member =
-            mc_member_resolve(real_base_address, type, member,
+            mc_member_resolve(real_base_address, type, &member,
               snapshot, process_index);
           if ((char*) real_member - (char *) real_base_address == offset)
-            return member->subtype;
+            return member.subtype;
         }
 
       }
@@ -1144,9 +1141,9 @@ static mc_type_t get_offset_type(void *real_base_address, mc_type_t type,
  */
 int compare_heap_area(int process_index, const void *area1, const void *area2, mc_snapshot_t snapshot1,
                       mc_snapshot_t snapshot2, xbt_dynar_t previous,
-                      mc_type_t type, int pointer_level)
+                      simgrid::mc::Type* type, int pointer_level)
 {
-  mc_process_t process = &mc_model_checker->process();
+  simgrid::mc::Process* process = &mc_model_checker->process();
 
   struct s_mc_diff *state = mc_diff_info;
 
@@ -1159,7 +1156,7 @@ int compare_heap_area(int process_index, const void *area1, const void *area2, m
   int type_size = -1;
   int offset1 = 0, offset2 = 0;
   int new_size1 = -1, new_size2 = -1;
-  mc_type_t new_type1 = NULL, new_type2 = NULL;
+  simgrid::mc::Type *new_type1 = NULL, *new_type2 = NULL;
 
   int match_pairs = 0;