Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : get start of libsimgrid bss segment for MC_ignore mechanism
authorMarion Guthmuller <marion.guthmuller@loria.fr>
Sun, 11 Nov 2012 16:34:55 +0000 (17:34 +0100)
committerMarion Guthmuller <marion.guthmuller@loria.fr>
Sun, 11 Nov 2012 16:34:55 +0000 (17:34 +0100)
src/mc/mc_checkpoint.c
src/mc/mc_compare.c
src/mc/mc_private.h

index 6f53924..bbe8fd6 100644 (file)
@@ -18,7 +18,7 @@ void *start_text_libsimgrid;
 void *start_plt_libsimgrid, *end_plt_libsimgrid;
 void *start_plt_binary, *end_plt_binary;
 char *libsimgrid_path;
-void *start_data_libsimgrid;
+void *start_data_libsimgrid, *start_bss_libsimgrid;
 void *start_text_binary;
 void *end_raw_heap;
 
@@ -132,6 +132,10 @@ void MC_init_memory_map_info(){
       } else {
         if (!memcmp(basename(maps->regions[i].pathname), "libsimgrid", 10)){
           start_data_libsimgrid = reg.start_addr;
+          i++;
+          reg = maps->regions[i];
+          if(reg.pathname == NULL && (reg.prot & PROT_WRITE) && i < maps->mapsize)
+            start_bss_libsimgrid = reg.start_addr;
         }
       }
     }else if ((reg.prot & PROT_READ)){
index 81bde65..c80f046 100644 (file)
@@ -81,6 +81,9 @@ static int data_libsimgrid_region_compare(void *d1, void *d2, size_t size){
       if((ignore_size = heap_ignore_size((char *)start_data_libsimgrid+i)) > 0){
         i = i + ignore_size;
         continue;
+      }else if((ignore_size = heap_ignore_size((char *)start_bss_libsimgrid+i)) > 0){
+        i = i + ignore_size;
+        continue;
       }
       pointer_align = (i / sizeof(void*)) * sizeof(void*);
       addr_pointed1 = *((void **)((char *)d1 + pointer_align));
index dc8c0cf..05d2a74 100644 (file)
@@ -225,6 +225,7 @@ extern void *end_plt_libsimgrid;
 extern void *start_plt_binary;
 extern void *end_plt_binary;
 extern xbt_dynar_t mc_stack_comparison_ignore;
+extern void *start_bss_libsimgrid;
 
 typedef struct s_mc_pair{
   mc_snapshot_t system_state;