A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[mc] Fix location expression initialization
[simgrid.git]
/
src
/
mc
/
memory_map.cpp
diff --git
a/src/mc/memory_map.cpp
b/src/mc/memory_map.cpp
index
db0fcce
..
f13f9af
100644
(file)
--- a/
src/mc/memory_map.cpp
+++ b/
src/mc/memory_map.cpp
@@
-1,13
+1,17
@@
-/* Copyright (c) 2008-201
4
. The SimGrid Team.
+/* Copyright (c) 2008-201
5
. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
-#include <stdlib.h>
+#include <cstdlib>
+#include <cstdio>
+#include <cstring>
#include <sys/types.h>
#include <sys/types.h>
+#include <xbt/base.h>
+
#include "mc_memory_map.h"
#include "mc_private.h"
#include "mc_memory_map.h"
#include "mc_private.h"
@@
-16,25
+20,30
@@
extern "C" {
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_memory_map, mc,
"Logging specific to algorithms for memory_map");
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_memory_map, mc,
"Logging specific to algorithms for memory_map");
-memory_map_t MC_get_memory_map(pid_t pid)
+}
+
+namespace simgrid {
+namespace mc {
+
+XBT_PRIVATE std::vector<VmMap> get_memory_map(pid_t pid)
{
/* Open the actual process's proc maps file and create the memory_map_t */
/* to be returned. */
char* path = bprintf("/proc/%i/maps", (int) pid);
{
/* Open the actual process's proc maps file and create the memory_map_t */
/* to be returned. */
char* path = bprintf("/proc/%i/maps", (int) pid);
- FILE *fp = fopen(path, "r");
- free(path);
+ FILE *fp = std::fopen(path, "r");
if(fp == NULL)
if(fp == NULL)
- perror("fopen failed");
+
std::
perror("fopen failed");
xbt_assert(fp,
"Cannot open %s to investigate the memory map of the process.", path);
xbt_assert(fp,
"Cannot open %s to investigate the memory map of the process.", path);
+ free(path);
setbuf(fp, NULL);
setbuf(fp, NULL);
-
memory_map_t ret = xbt_new0(s_memory_map_t, 1)
;
+
std::vector<VmMap> ret
;
/* Read one line at the time, parse it and add it to the memory map to be returned */
ssize_t read; /* Number of bytes readed */
char* line = NULL;
/* Read one line at the time, parse it and add it to the memory map to be returned */
ssize_t read; /* Number of bytes readed */
char* line = NULL;
- size_t n = 0; /* Amount of bytes to read by xbt_getline */
+ s
td::s
ize_t n = 0; /* Amount of bytes to read by xbt_getline */
while ((read = xbt_getline(&line, &n, fp)) != -1) {
//fprintf(stderr,"%s", line);
while ((read = xbt_getline(&line, &n, fp)) != -1) {
//fprintf(stderr,"%s", line);
@@
-49,7
+58,7
@@
memory_map_t MC_get_memory_map(pid_t pid)
int i;
for (i = 1; i < 6 && lfields[i - 1] != NULL; i++) {
int i;
for (i = 1; i < 6 && lfields[i - 1] != NULL; i++) {
- lfields[i] = strtok(NULL, " ");
+ lfields[i] = st
d::st
rtok(NULL, " ");
}
/* Check to see if we got the expected amount of columns */
}
/* Check to see if we got the expected amount of columns */
@@
-58,28
+67,28
@@
memory_map_t MC_get_memory_map(pid_t pid)
/* Ok we are good enough to try to get the info we need */
/* First get the start and the end address of the map */
/* Ok we are good enough to try to get the info we need */
/* First get the start and the end address of the map */
- char *tok = strtok(lfields[0], "-");
+ char *tok = st
d::st
rtok(lfields[0], "-");
if (tok == NULL)
xbt_abort();
if (tok == NULL)
xbt_abort();
- s_map_region_t memreg; /* temporal map region used for creating the map */
+ VmMap memreg;
char *endptr;
char *endptr;
- memreg.start_addr =
(void *) strtou
l(tok, &endptr, 16);
+ memreg.start_addr =
std::strtoul
l(tok, &endptr, 16);
/* Make sure that the entire string was an hex number */
if (*endptr != '\0')
xbt_abort();
/* Make sure that the entire string was an hex number */
if (*endptr != '\0')
xbt_abort();
- tok = strtok(NULL, "-");
+ tok = st
d::st
rtok(NULL, "-");
if (tok == NULL)
xbt_abort();
if (tok == NULL)
xbt_abort();
- memreg.end_addr =
(void *) strtou
l(tok, &endptr, 16);
+ memreg.end_addr =
std::strtoul
l(tok, &endptr, 16);
/* Make sure that the entire string was an hex number */
if (*endptr != '\0')
xbt_abort();
/* Get the permissions flags */
/* Make sure that the entire string was an hex number */
if (*endptr != '\0')
xbt_abort();
/* Get the permissions flags */
- if (strlen(lfields[1]) < 4)
+ if (st
d::st
rlen(lfields[1]) < 4)
xbt_abort();
memreg.prot = 0;
xbt_abort();
memreg.prot = 0;
@@
-109,13
+118,13
@@
memory_map_t MC_get_memory_map(pid_t pid)
memreg.flags |= MAP_SHARED;
/* Get the offset value */
memreg.flags |= MAP_SHARED;
/* Get the offset value */
- memreg.offset =
(void *) strtou
l(lfields[2], &endptr, 16);
+ memreg.offset =
std::strtoul
l(lfields[2], &endptr, 16);
/* Make sure that the entire string was an hex number */
if (*endptr != '\0')
xbt_abort();
/* Get the device major:minor bytes */
/* Make sure that the entire string was an hex number */
if (*endptr != '\0')
xbt_abort();
/* Get the device major:minor bytes */
- tok = strtok(lfields[3], ":");
+ tok = st
d::st
rtok(lfields[3], ":");
if (tok == NULL)
xbt_abort();
if (tok == NULL)
xbt_abort();
@@
-124,11
+133,11
@@
memory_map_t MC_get_memory_map(pid_t pid)
if (*endptr != '\0')
xbt_abort();
if (*endptr != '\0')
xbt_abort();
- tok = strtok(NULL, ":");
+ tok = st
d::st
rtok(NULL, ":");
if (tok == NULL)
xbt_abort();
if (tok == NULL)
xbt_abort();
- memreg.dev_minor = (char) strtoul(tok, &endptr, 16);
+ memreg.dev_minor = (char) st
d::st
rtoul(tok, &endptr, 16);
/* Make sure that the entire string was an hex number */
if (*endptr != '\0')
xbt_abort();
/* Make sure that the entire string was an hex number */
if (*endptr != '\0')
xbt_abort();
@@
-139,32
+148,21
@@
memory_map_t MC_get_memory_map(pid_t pid)
xbt_abort();
/* And finally get the pathname */
xbt_abort();
/* And finally get the pathname */
- memreg.pathname = xbt_strdup(lfields[5]);
+ if (lfields[5])
+ memreg.pathname = lfields[5];
/* Create space for a new map region in the region's array and copy the */
/* parsed stuff from the temporal memreg variable */
XBT_DEBUG("Found region for %s",
/* Create space for a new map region in the region's array and copy the */
/* parsed stuff from the temporal memreg variable */
XBT_DEBUG("Found region for %s",
- memreg.pathname ? memreg.pathname : "(null)");
- ret->regions = (map_region_t)
- xbt_realloc(ret->regions, sizeof(memreg) * (ret->mapsize + 1));
- memcpy(ret->regions + ret->mapsize, &memreg, sizeof(memreg));
- ret->mapsize++;
+ !memreg.pathname.empty() ? memreg.pathname.c_str() : "(null)");
+ ret.push_back(std::move(memreg));
}
}
- free(line);
- fclose(fp);
- return
ret
;
+
std::
free(line);
+
std::
fclose(fp);
+ return
std::move(ret)
;
}
}
-void MC_free_memory_map(memory_map_t map){
-
- int i;
- for(i=0; i< map->mapsize; i++){
- xbt_free(map->regions[i].pathname);
- }
- xbt_free(map->regions);
- xbt_free(map);
}
}
-
}
}