diff options
Diffstat (limited to 'V8Binding/v8/src/platform-macos.cc')
-rw-r--r-- | V8Binding/v8/src/platform-macos.cc | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/V8Binding/v8/src/platform-macos.cc b/V8Binding/v8/src/platform-macos.cc index 880931e..b5a57e1 100644 --- a/V8Binding/v8/src/platform-macos.cc +++ b/V8Binding/v8/src/platform-macos.cc @@ -28,10 +28,11 @@ // Platform specific code for MacOS goes here. For the POSIX comaptible parts // the implementation is in platform-posix.cc. -#include <ucontext.h> #include <unistd.h> #include <sys/mman.h> #include <mach/mach_init.h> +#include <mach-o/dyld.h> +#include <mach-o/getsect.h> #include <AvailabilityMacros.h> @@ -205,7 +206,19 @@ PosixMemoryMappedFile::~PosixMemoryMappedFile() { void OS::LogSharedLibraryAddresses() { - // TODO(1233579): Implement. +#ifdef ENABLE_LOGGING_AND_PROFILING + unsigned int images_count = _dyld_image_count(); + for (unsigned int i = 0; i < images_count; ++i) { + const mach_header* header = _dyld_get_image_header(i); + if (header == NULL) continue; + unsigned int size; + char* code_ptr = getsectdatafromheader(header, SEG_TEXT, SECT_TEXT, &size); + if (code_ptr == NULL) continue; + const uintptr_t slide = _dyld_get_image_vmaddr_slide(i); + const uintptr_t start = reinterpret_cast<uintptr_t>(code_ptr) + slide; + LOG(SharedLibraryEvent(_dyld_get_image_name(i), start, start + size)); + } +#endif // ENABLE_LOGGING_AND_PROFILING } |