From a463b2408b2f67e31ad979fe7c1d29eb518c0849 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Mon, 17 Feb 2014 14:27:57 +0100 Subject: [PATCH 1/1] [mc] Avoid parsing /proc/self/maps if possible --- src/mc/mc_checkpoint.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/mc/mc_checkpoint.c b/src/mc/mc_checkpoint.c index abd70f6fe8..6e3508b8e3 100644 --- a/src/mc/mc_checkpoint.c +++ b/src/mc/mc_checkpoint.c @@ -13,6 +13,8 @@ #include "xbt/module.h" #include +#include "xbt/mmalloc/mmprivate.h" + #include "../simix/smx_private.h" #include @@ -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; -- 2.20.1