From: Marion Guthmuller Date: Thu, 11 Oct 2012 14:55:34 +0000 (+0200) Subject: model-checker : forget regions corresponding to libsimgrid for each snapshot X-Git-Tag: v3_8~76^2~6 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/8b730a1a7189b57671ec6ad97ae6a8f52e4b0eaf?hp=78ebb5d5f3fad1cca66d0ecdfcfc879b253f8923 model-checker : forget regions corresponding to libsimgrid for each snapshot --- diff --git a/src/mc/mc_checkpoint.c b/src/mc/mc_checkpoint.c index 1a80fd5136..07df254929 100644 --- a/src/mc/mc_checkpoint.c +++ b/src/mc/mc_checkpoint.c @@ -86,13 +86,24 @@ void MC_take_snapshot(mc_snapshot_t snapshot) if (reg.start_addr == std_heap){ // only save the std heap (and not the raw one) MC_snapshot_add_region(snapshot, 0, reg.start_addr, (char*)reg.end_addr - (char*)reg.start_addr); } + i++; } else { if (!memcmp(basename(maps->regions[i].pathname), "libsimgrid", 10)){ MC_snapshot_add_region(snapshot, 1, reg.start_addr, (char*)reg.end_addr - (char*)reg.start_addr); + i++; + reg = maps->regions[i]; + while(reg.pathname == NULL && (reg.prot & PROT_WRITE) && i < maps->mapsize){ + MC_snapshot_add_region(snapshot, 1, reg.start_addr, (char*)reg.end_addr - (char*)reg.start_addr); + i++; + reg = maps->regions[i]; + } + }else{ + i++; } } + }else{ + i++; } - i++; } free_memory_map(maps); @@ -108,7 +119,7 @@ void MC_take_snapshot_liveness(mc_snapshot_t snapshot) void *heap = NULL; /* Save the std heap and the writable mapped pages of libsimgrid */ - while (i < maps->mapsize && nb_reg < 3) { + while (i < maps->mapsize) { reg = maps->regions[i]; if ((reg.prot & PROT_WRITE)){ if (maps->regions[i].pathname == NULL){ @@ -117,16 +128,26 @@ void MC_take_snapshot_liveness(mc_snapshot_t snapshot) heap = snapshot->regions[nb_reg]->data; nb_reg++; } + i++; } else { if (!memcmp(basename(maps->regions[i].pathname), "libsimgrid", 10)){ MC_snapshot_add_region(snapshot, 1, reg.start_addr, (char*)reg.end_addr - (char*)reg.start_addr); - nb_reg++; start_data_libsimgrid = reg.start_addr; + nb_reg++; + i++; + reg = maps->regions[i]; + while(reg.pathname == NULL && (reg.prot & PROT_WRITE) && i < maps->mapsize){ + MC_snapshot_add_region(snapshot, 1, reg.start_addr, (char*)reg.end_addr - (char*)reg.start_addr); + i++; + reg = maps->regions[i]; + nb_reg++; + } } else { if (!memcmp(basename(maps->regions[i].pathname), basename(xbt_binary_name), strlen(basename(xbt_binary_name)))){ MC_snapshot_add_region(snapshot, 2, reg.start_addr, (char*)reg.end_addr - (char*)reg.start_addr); nb_reg++; } + i++; } } }else if ((reg.prot & PROT_READ)){ @@ -140,8 +161,10 @@ void MC_take_snapshot_liveness(mc_snapshot_t snapshot) } } } + i++; + }else{ + i++; } - i++; } snapshot->stacks = take_snapshot_stacks(heap);