Index: src/platform-macos.cc |
=================================================================== |
--- src/platform-macos.cc (revision 2212) |
+++ src/platform-macos.cc (working copy) |
@@ -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::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 @@ |
free(symbols); |
return frames_count; |
-#endif |
} |