Author: [email protected]
Date: Wed Jun 17 17:22:52 2009
New Revision: 2213
Modified:
branches/bleeding_edge/SConstruct
branches/bleeding_edge/src/platform-macos.cc
Log:
Make some small Mac-specific modifications to V8 to make it work on MacOS X
10.4
rather than just 10.5 and up.
1: Set the right compile flags and predefines to get backward compatible
Unix
system calls.
2: Explicitly weak import the functions in execinfo.h and check at runtime
to
see if that library loaded before calling backtrace().
Original change submitted by [email protected] and reviewed at
http://codereview.chromium.org/126241.
Review URL: http://codereview.chromium.org/132002
Modified: branches/bleeding_edge/SConstruct
==============================================================================
--- branches/bleeding_edge/SConstruct (original)
+++ branches/bleeding_edge/SConstruct Wed Jun 17 17:22:52 2009
@@ -125,7 +125,7 @@
}
},
'os:macos': {
- 'CCFLAGS': ['-ansi'],
+ 'CCFLAGS': ['-ansi', '-mmacosx-version-min=10.4'],
},
'os:freebsd': {
'CPPPATH' : ['/usr/local/include'],
@@ -641,7 +641,7 @@
def GetVersion():
version_components = GetVersionComponents()
-
+
if version_components[len(version_components) - 1] == '0':
version_components.pop()
return '.'.join(version_components)
@@ -649,10 +649,10 @@
def GetSpecificSONAME():
SONAME_PATTERN = re.compile(r"#define\s+SONAME\s+\"(.*)\"")
-
+
source = open(join(root_dir, 'src', 'version.cc')).read()
match = SONAME_PATTERN.search(source)
-
+
if match:
return match.group(1).strip()
else:
Modified: branches/bleeding_edge/src/platform-macos.cc
==============================================================================
--- branches/bleeding_edge/src/platform-macos.cc (original)
+++ branches/bleeding_edge/src/platform-macos.cc Wed Jun 17 17:22:52 2009
@@ -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
}
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---