X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6a374f711b364347b7adb9fa3bdf54b54e429b10..c8d6bade6ee8fff928228bec67e9b2e86484793d:/src/xbt/memory_map.cpp diff --git a/src/xbt/memory_map.cpp b/src/xbt/memory_map.cpp index 825393a2b8..0db9b1f962 100644 --- a/src/xbt/memory_map.cpp +++ b/src/xbt/memory_map.cpp @@ -54,13 +54,17 @@ XBT_PRIVATE std::vector get_memory_map(pid_t pid) char* line = nullptr; std::size_t n = 0; /* Amount of bytes to read by xbt_getline */ while ((read = xbt_getline(&line, &n, fp)) != -1) { + /** + * The lines that we read have this format: (This is just an example) + * 00602000-00603000 rw-p 00002000 00:28 1837264 + */ //fprintf(stderr,"%s", line); /* Wipeout the new line character */ line[read - 1] = '\0'; - /* Tokenize the line using spaces as delimiters and store each token in lfields array. We expect 5 tokens/fields */ + /* Tokenize the line using spaces as delimiters and store each token in lfields array. We expect 5 tokens for 6 fields */ char* lfields[6]; lfields[0] = strtok(line, " "); @@ -119,10 +123,14 @@ XBT_PRIVATE std::vector get_memory_map(pid_t pid) if (memreg.prot == 0) memreg.prot |= PROT_NONE; - if (lfields[1][4] == 'p') + if (lfields[1][3] == 'p') memreg.flags |= MAP_PRIVATE; - else if (lfields[1][4] == 's') + else if (lfields[1][3] == 's') memreg.flags |= MAP_SHARED; + else { + xbt_die("Flag was neither 'p' (private) nor 's' (shared). This should have never happened! Instead, the permissions column was set to: %s\n" + "This was the whole line that caused the trouble: %s", lfields[1], line); + } /* Get the offset value */ memreg.offset = std::strtoull(lfields[2], &endptr, 16);