Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : change MC_take_snapshot_liveness declaration (snapshot returned inste...
authorMarion Guthmuller <marion.guthmuller@loria.fr>
Thu, 18 Oct 2012 19:22:20 +0000 (21:22 +0200)
committerMarion Guthmuller <marion.guthmuller@loria.fr>
Sat, 27 Oct 2012 20:35:39 +0000 (22:35 +0200)
src/mc/mc_checkpoint.c
src/mc/mc_compare.c
src/mc/mc_liveness.c
src/mc/mc_private.h

index 47d1be9..ad1de43 100644 (file)
@@ -112,9 +112,15 @@ void MC_take_snapshot(mc_snapshot_t snapshot)
   free_memory_map(maps);
 }
 
-void MC_take_snapshot_liveness(mc_snapshot_t snapshot)
+mc_snapshot_t MC_take_snapshot_liveness()
 {
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
+  MC_SET_RAW_MEM;
+
+  mc_snapshot_t snapshot = xbt_new0(s_mc_snapshot_t, 1);
+
   unsigned int i = 0;
   s_map_region_t reg;
   memory_map_t maps = get_memory_map();
@@ -176,6 +182,13 @@ void MC_take_snapshot_liveness(mc_snapshot_t snapshot)
   
   free_memory_map(maps);
 
+  MC_UNSET_RAW_MEM;
+
+  if(raw_mem_set)
+    MC_SET_RAW_MEM;
+
+  return snapshot;
+
 }
 
 void MC_restore_snapshot(mc_snapshot_t snapshot)
index 1510cca..b91d4e4 100644 (file)
@@ -140,6 +140,10 @@ void heap_equality_free_voidp(void *e){
 
 int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
 
+  raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+  
+  MC_SET_RAW_MEM;
+
   int errors = 0, i;
   xbt_dynar_t stacks1 = xbt_dynar_new(sizeof(stack_region_t), stack_region_free_voidp);
   xbt_dynar_t stacks2 = xbt_dynar_new(sizeof(stack_region_t), stack_region_free_voidp);
@@ -167,6 +171,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         xbt_dynar_free(&stacks1);
         xbt_dynar_free(&stacks2);
         xbt_dynar_free(&equals);
+        if(!raw_mem_set)
+          MC_UNSET_RAW_MEM;
         return 1;
       }
       if(s1->regions[i]->start_addr != s2->regions[i]->start_addr){
@@ -174,6 +180,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         xbt_dynar_free(&stacks1);
         xbt_dynar_free(&stacks2);
         xbt_dynar_free(&equals);
+        if(!raw_mem_set)
+          MC_UNSET_RAW_MEM;
         return 1;
       }
       if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[i]->data, (xbt_mheap_t)s2->regions[i]->data, &stacks1, &stacks2, &equals)){
@@ -181,6 +189,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         xbt_dynar_free(&stacks1);
         xbt_dynar_free(&stacks2);
         xbt_dynar_free(&equals);
+        if(!raw_mem_set)
+          MC_UNSET_RAW_MEM;  
         return 1; 
       }
       heap1 = s1->regions[i]->data;
@@ -193,6 +203,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         xbt_dynar_free(&stacks1);
         xbt_dynar_free(&stacks2);
         xbt_dynar_free(&equals);
+        if(!raw_mem_set)
+          MC_UNSET_RAW_MEM;
         return 1;
       }
       if(s1->regions[i]->start_addr != s2->regions[i]->start_addr){
@@ -200,6 +212,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         xbt_dynar_free(&stacks1);
         xbt_dynar_free(&stacks2);
         xbt_dynar_free(&equals);
+        if(!raw_mem_set)
+          MC_UNSET_RAW_MEM;
         return 1;
       }
       if(data_libsimgrid_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
@@ -207,6 +221,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         xbt_dynar_free(&stacks1);
         xbt_dynar_free(&stacks2);
         xbt_dynar_free(&equals);
+        if(!raw_mem_set)
+          MC_UNSET_RAW_MEM;
         return 1;
       }
       break;
@@ -218,6 +234,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         xbt_dynar_free(&stacks1);
         xbt_dynar_free(&stacks2);
         xbt_dynar_free(&equals);
+        if(!raw_mem_set)
+          MC_UNSET_RAW_MEM;
         return 1;
       }
       if(s1->regions[i]->start_addr != s2->regions[i]->start_addr){
@@ -225,6 +243,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         xbt_dynar_free(&stacks1);
         xbt_dynar_free(&stacks2);
         xbt_dynar_free(&equals);
+        if(!raw_mem_set)
+          MC_UNSET_RAW_MEM;
         return 1;
       }
       if(data_program_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
@@ -232,6 +252,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         xbt_dynar_free(&stacks1);
         xbt_dynar_free(&stacks2);
         xbt_dynar_free(&equals);
+        if(!raw_mem_set)
+          MC_UNSET_RAW_MEM;
         return 1;
       }
       break;
@@ -261,6 +283,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
         xbt_dynar_free(&stacks1);
         xbt_dynar_free(&stacks2);
         xbt_dynar_free(&equals);
+        if(!raw_mem_set)
+          MC_UNSET_RAW_MEM;
         return 1;
       }else{
         XBT_INFO("Local variables are equals in stack %d", cursor + 1);
@@ -274,6 +298,8 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
   xbt_dynar_free(&stacks1);
   xbt_dynar_free(&stacks2);
   xbt_dynar_free(&equals);
+  if(!raw_mem_set)
+    MC_UNSET_RAW_MEM;
   return 0;
   
 }
index b7d7681..1fb8fbf 100644 (file)
@@ -61,8 +61,7 @@ int reached(xbt_state_t st){
   new_pair->nb = xbt_dynar_length(reached_pairs) + 1;
   new_pair->automaton_state = st;
   new_pair->prop_ato = xbt_dynar_new(sizeof(int), NULL);
-  new_pair->system_state = xbt_new0(s_mc_snapshot_t, 1); 
-  MC_take_snapshot_liveness(new_pair->system_state);  
+  new_pair->system_state = MC_take_snapshot_liveness();  
   
   /* Get values of propositional symbols */
   int res;
@@ -143,8 +142,7 @@ void set_pair_reached(xbt_state_t st){
   pair->nb = xbt_dynar_length(reached_pairs) + 1;
   pair->automaton_state = st;
   pair->prop_ato = xbt_dynar_new(sizeof(int), NULL);
-  pair->system_state = xbt_new0(s_mc_snapshot_t, 1); 
-  MC_take_snapshot_liveness(pair->system_state);
+  pair->system_state = MC_take_snapshot_liveness();
 
   /* Get values of propositional symbols */
   unsigned int cursor = 0;
@@ -276,15 +274,10 @@ void MC_ddfs_init(void){
   successors = xbt_dynar_new(sizeof(mc_pair_stateless_t), NULL);
 
   /* Save the initial state */
-  initial_snapshot_liveness = xbt_new0(s_mc_snapshot_t, 1);
-  MC_take_snapshot_liveness(initial_snapshot_liveness);
+  initial_snapshot_liveness = MC_take_snapshot_liveness();
 
   MC_UNSET_RAW_MEM; 
-
-  /* Get .plt section (start and end addresses) for data libsimgrid and data program comparison */
-  get_libsimgrid_plt_section();
-  get_binary_plt_section();
-
+  
   unsigned int cursor = 0;
   xbt_state_t state;
 
index 9c0f065..9dd5b58 100644 (file)
@@ -43,7 +43,7 @@ typedef struct s_mc_snapshot_stack{
 }s_mc_snapshot_stack_t, *mc_snapshot_stack_t;
 
 void MC_take_snapshot(mc_snapshot_t);
-void MC_take_snapshot_liveness(mc_snapshot_t s);
+mc_snapshot_t MC_take_snapshot_liveness(void);
 void MC_restore_snapshot(mc_snapshot_t);
 void MC_free_snapshot(mc_snapshot_t);
 void snapshot_stack_free_voidp(void *s);