| 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
|
|
|