diff options
Diffstat (limited to 'deps/v8/src/platform-macos.cc')
-rw-r--r-- | deps/v8/src/platform-macos.cc | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/deps/v8/src/platform-macos.cc b/deps/v8/src/platform-macos.cc index 3e0e2841bc..5a0eae2533 100644 --- a/deps/v8/src/platform-macos.cc +++ b/deps/v8/src/platform-macos.cc @@ -35,10 +35,6 @@ #include <AvailabilityMacros.h> -#ifdef MAC_OS_X_VERSION_10_5 -# include <execinfo.h> // backtrace, backtrace_symbols -#endif - #include <pthread.h> #include <semaphore.h> #include <signal.h> @@ -58,6 +54,17 @@ #include "platform.h" +// Manually define these here as weak imports, rather than including execinfo.h. +// This lets us launch on 10.4 which does not have these calls. +extern "C" { + extern int backtrace(void**, int) __attribute__((weak_import)); + extern char** backtrace_symbols(void* const*, int) + __attribute__((weak_import)); + extern void backtrace_symbols_fd(void* const*, int, int) + __attribute__((weak_import)); +} + + namespace v8 { namespace internal { @@ -214,9 +221,10 @@ int OS::ActivationFrameAlignment() { int OS::StackWalk(Vector<StackFrame> frames) { -#ifndef MAC_OS_X_VERSION_10_5 - return 0; -#else + // If weak link to execinfo lib has failed, ie because we are on 10.4, abort. + if (backtrace == NULL) + return 0; + int frames_size = frames.length(); void** addresses = NewArray<void*>(frames_size); int frames_count = backtrace(addresses, frames_size); @@ -244,7 +252,6 @@ int OS::StackWalk(Vector<StackFrame> frames) { free(symbols); return frames_count; -#endif } |