Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Avoid parsing /proc/self/maps if possible
[simgrid.git] / src / mc / mc_checkpoint.c
index 2937f65..6e3508b 100644 (file)
@@ -13,6 +13,8 @@
 #include "xbt/module.h"
 #include <xbt/mmalloc.h>
 
+#include "xbt/mmalloc/mmprivate.h"
+
 #include "../simix/smx_private.h"
 
 #include <libunwind.h>
@@ -105,6 +107,12 @@ static void MC_snapshot_add_region(mc_snapshot_t snapshot, int type, void *start
 
 static void MC_get_memory_regions(mc_snapshot_t snapshot){
 
+  void* start_heap = ((xbt_mheap_t)std_heap)->base;
+  void* end_heap   = ((xbt_mheap_t)std_heap)->breakval;
+  MC_snapshot_add_region(snapshot, 0, start_heap, (char*) end_heap - (char*) start_heap);
+  snapshot->heap_bytes_used = mmalloc_get_bytes_used(std_heap);
+
+
   FILE *fp;
   char *line = NULL;
   ssize_t read;
@@ -140,12 +148,9 @@ static void MC_get_memory_regions(mc_snapshot_t snapshot){
       /* Get the start address of the map */
       tok = strtok(lfields[0], "-");
       start_addr = (void *)strtoul(tok, NULL, 16);
-    
+
       if(start_addr == std_heap){     /* Std_heap ? */
-        tok = strtok(NULL, "-");
-        end_addr = (void *)strtoul(tok, NULL, 16);
-        MC_snapshot_add_region(snapshot, 0, start_addr, (char*)end_addr - (char*)start_addr);
-        snapshot->heap_bytes_used = mmalloc_get_bytes_used(std_heap);
+
       }else{ /* map name == libsimgrid || binary_name ? */
         if(lfields[5] != NULL){
           if(!memcmp(basename(lfields[5]), "libsimgrid", 10)){
@@ -182,10 +187,7 @@ static void MC_get_memory_regions(mc_snapshot_t snapshot){
               start_addr1 = (void *)strtoul(tok, NULL, 16);
               if(lfields[1][1] == 'w'){
                 if(start_addr1 == std_heap){     /* Std_heap ? */
-                  tok = strtok(NULL, "-");
-                  end_addr = (void *)strtoul(tok, NULL, 16);
-                  MC_snapshot_add_region(snapshot, 0, start_addr1, (char*)end_addr - (char*)start_addr1);
-                  snapshot->heap_bytes_used = mmalloc_get_bytes_used(std_heap);
+
                 }else if(start_addr1 != raw_heap){
                   tok = strtok(NULL, "-");
                   size += (char *)(void *)strtoul(tok, NULL, 16) - (char *)start_addr1;
@@ -517,7 +519,7 @@ mc_snapshot_t MC_take_snapshot(int num_state){
 
   if(_sg_mc_visited > 0 || strcmp(_sg_mc_property_file,"")){
     snapshot->stacks = MC_take_snapshot_stacks(&snapshot, snapshot->regions[0]->data);
-    if(MC_USE_SNAPSHOT_HASH && snapshot->stacks!=NULL) {
+    if(_sg_mc_hash && snapshot->stacks!=NULL) {
       snapshot->hash = mc_hash_processes_state(num_state, snapshot->stacks);
     } else {
       snapshot->hash = 0;