OLD | NEW |
1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 | 250 |
251 | 251 |
252 void* OS::Allocate(const size_t requested, | 252 void* OS::Allocate(const size_t requested, |
253 size_t* allocated, | 253 size_t* allocated, |
254 bool is_executable) { | 254 bool is_executable) { |
255 // TODO(805): Port randomization of allocated executable memory to Linux. | 255 // TODO(805): Port randomization of allocated executable memory to Linux. |
256 const size_t msize = RoundUp(requested, sysconf(_SC_PAGESIZE)); | 256 const size_t msize = RoundUp(requested, sysconf(_SC_PAGESIZE)); |
257 int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0); | 257 int prot = PROT_READ | PROT_WRITE | (is_executable ? PROT_EXEC : 0); |
258 void* mbase = mmap(NULL, msize, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | 258 void* mbase = mmap(NULL, msize, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); |
259 if (mbase == MAP_FAILED) { | 259 if (mbase == MAP_FAILED) { |
260 LOG(StringEvent("OS::Allocate", "mmap failed")); | 260 LOG(i::Isolate::Current(), |
| 261 StringEvent("OS::Allocate", "mmap failed")); |
261 return NULL; | 262 return NULL; |
262 } | 263 } |
263 *allocated = msize; | 264 *allocated = msize; |
264 UpdateAllocatedSpaceLimits(mbase, msize); | 265 UpdateAllocatedSpaceLimits(mbase, msize); |
265 return mbase; | 266 return mbase; |
266 } | 267 } |
267 | 268 |
268 | 269 |
269 void OS::Free(void* address, const size_t size) { | 270 void OS::Free(void* address, const size_t size) { |
270 // TODO(1240712): munmap has a return value which is ignored here. | 271 // TODO(1240712): munmap has a return value which is ignored here. |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 // This function assumes that the layout of the file is as follows: | 372 // This function assumes that the layout of the file is as follows: |
372 // hex_start_addr-hex_end_addr rwxp <unused data> [binary_file_name] | 373 // hex_start_addr-hex_end_addr rwxp <unused data> [binary_file_name] |
373 // If we encounter an unexpected situation we abort scanning further entries. | 374 // If we encounter an unexpected situation we abort scanning further entries. |
374 FILE* fp = fopen("/proc/self/maps", "r"); | 375 FILE* fp = fopen("/proc/self/maps", "r"); |
375 if (fp == NULL) return; | 376 if (fp == NULL) return; |
376 | 377 |
377 // Allocate enough room to be able to store a full file name. | 378 // Allocate enough room to be able to store a full file name. |
378 const int kLibNameLen = FILENAME_MAX + 1; | 379 const int kLibNameLen = FILENAME_MAX + 1; |
379 char* lib_name = reinterpret_cast<char*>(malloc(kLibNameLen)); | 380 char* lib_name = reinterpret_cast<char*>(malloc(kLibNameLen)); |
380 | 381 |
| 382 i::Isolate* isolate = ISOLATE; |
381 // This loop will terminate once the scanning hits an EOF. | 383 // This loop will terminate once the scanning hits an EOF. |
382 while (true) { | 384 while (true) { |
383 uintptr_t start, end; | 385 uintptr_t start, end; |
384 char attr_r, attr_w, attr_x, attr_p; | 386 char attr_r, attr_w, attr_x, attr_p; |
385 // Parse the addresses and permission bits at the beginning of the line. | 387 // Parse the addresses and permission bits at the beginning of the line. |
386 if (fscanf(fp, "%" V8PRIxPTR "-%" V8PRIxPTR, &start, &end) != 2) break; | 388 if (fscanf(fp, "%" V8PRIxPTR "-%" V8PRIxPTR, &start, &end) != 2) break; |
387 if (fscanf(fp, " %c%c%c%c", &attr_r, &attr_w, &attr_x, &attr_p) != 4) break; | 389 if (fscanf(fp, " %c%c%c%c", &attr_r, &attr_w, &attr_x, &attr_p) != 4) break; |
388 | 390 |
389 int c; | 391 int c; |
390 if (attr_r == 'r' && attr_w != 'w' && attr_x == 'x') { | 392 if (attr_r == 'r' && attr_w != 'w' && attr_x == 'x') { |
(...skipping 13 matching lines...) Expand all Loading... |
404 | 406 |
405 // Drop the newline character read by fgets. We do not need to check | 407 // Drop the newline character read by fgets. We do not need to check |
406 // for a zero-length string because we know that we at least read the | 408 // for a zero-length string because we know that we at least read the |
407 // '/' character. | 409 // '/' character. |
408 lib_name[strlen(lib_name) - 1] = '\0'; | 410 lib_name[strlen(lib_name) - 1] = '\0'; |
409 } else { | 411 } else { |
410 // No library name found, just record the raw address range. | 412 // No library name found, just record the raw address range. |
411 snprintf(lib_name, kLibNameLen, | 413 snprintf(lib_name, kLibNameLen, |
412 "%08" V8PRIxPTR "-%08" V8PRIxPTR, start, end); | 414 "%08" V8PRIxPTR "-%08" V8PRIxPTR, start, end); |
413 } | 415 } |
414 LOG(SharedLibraryEvent(lib_name, start, end)); | 416 LOG(isolate, SharedLibraryEvent(lib_name, start, end)); |
415 } else { | 417 } else { |
416 // Entry not describing executable data. Skip to end of line to setup | 418 // Entry not describing executable data. Skip to end of line to setup |
417 // reading the next entry. | 419 // reading the next entry. |
418 do { | 420 do { |
419 c = getc(fp); | 421 c = getc(fp); |
420 } while ((c != EOF) && (c != '\n')); | 422 } while ((c != EOF) && (c != '\n')); |
421 if (c == EOF) break; | 423 if (c == EOF) break; |
422 } | 424 } |
423 } | 425 } |
424 free(lib_name); | 426 free(lib_name); |
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1031 | 1033 |
1032 void Sampler::Stop() { | 1034 void Sampler::Stop() { |
1033 ASSERT(IsActive()); | 1035 ASSERT(IsActive()); |
1034 SignalSender::RemoveActiveSampler(this); | 1036 SignalSender::RemoveActiveSampler(this); |
1035 SetActive(false); | 1037 SetActive(false); |
1036 } | 1038 } |
1037 | 1039 |
1038 #endif // ENABLE_LOGGING_AND_PROFILING | 1040 #endif // ENABLE_LOGGING_AND_PROFILING |
1039 | 1041 |
1040 } } // namespace v8::internal | 1042 } } // namespace v8::internal |
OLD | NEW |