Index: src/platform-linux.cc |
=================================================================== |
--- src/platform-linux.cc (revision 2185) |
+++ src/platform-linux.cc (working copy) |
@@ -224,8 +224,8 @@ |
#ifdef ENABLE_LOGGING_AND_PROFILING |
-static unsigned StringToLong(char* buffer) { |
- return static_cast<unsigned>(strtol(buffer, NULL, 16)); // NOLINT |
+static uintptr_t StringToULong(char* buffer) { |
+ return strtoul(buffer, NULL, 16); // NOLINT |
} |
#endif |
@@ -242,13 +242,13 @@ |
addr_buffer[10] = 0; |
int result = read(fd, addr_buffer + 2, 8); |
if (result < 8) break; |
- unsigned start = StringToLong(addr_buffer); |
+ uintptr_t start = StringToULong(addr_buffer); |
result = read(fd, addr_buffer + 2, 1); |
if (result < 1) break; |
if (addr_buffer[2] != '-') break; |
result = read(fd, addr_buffer + 2, 8); |
if (result < 8) break; |
- unsigned end = StringToLong(addr_buffer); |
+ uintptr_t end = StringToULong(addr_buffer); |
char buffer[MAP_LENGTH]; |
int bytes_read = -1; |
do { |
@@ -262,10 +262,21 @@ |
// Ignore mappings that are not executable. |
if (buffer[3] != 'x') continue; |
char* start_of_path = index(buffer, '/'); |
- // There may be no filename in this line. Skip to next. |
- if (start_of_path == NULL) continue; |
- buffer[bytes_read] = 0; |
- LOG(SharedLibraryEvent(start_of_path, start, end)); |
+ // If there is no filename for this line then log it as an anonymous |
+ // mapping and use the address as its name. |
+ if (start_of_path == NULL) { |
+ // 40 is enough to print a 64 bit address range. |
+ ASSERT(sizeof(buffer) > 40); |
+ snprintf(buffer, |
+ sizeof(buffer), |
+ "%08" V8PRIxPTR "-%08" V8PRIxPTR, |
+ start, |
+ end); |
+ LOG(SharedLibraryEvent(buffer, start, end)); |
+ } else { |
+ buffer[bytes_read] = 0; |
+ LOG(SharedLibraryEvent(start_of_path, start, end)); |
+ } |
} |
close(fd); |
#endif |