Commit 529c3a0a authored by iposva@chromium.org's avatar iposva@chromium.org

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 maf@google.com and reviewed at http://codereview.chromium.org/126241.
Review URL: http://codereview.chromium.org/132002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2213 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent bc1aa934
...@@ -125,7 +125,7 @@ LIBRARY_FLAGS = { ...@@ -125,7 +125,7 @@ LIBRARY_FLAGS = {
} }
}, },
'os:macos': { 'os:macos': {
'CCFLAGS': ['-ansi'], 'CCFLAGS': ['-ansi', '-mmacosx-version-min=10.4'],
}, },
'os:freebsd': { 'os:freebsd': {
'CPPPATH' : ['/usr/local/include'], 'CPPPATH' : ['/usr/local/include'],
...@@ -641,7 +641,7 @@ def GetVersionComponents(): ...@@ -641,7 +641,7 @@ def GetVersionComponents():
def GetVersion(): def GetVersion():
version_components = GetVersionComponents() version_components = GetVersionComponents()
if version_components[len(version_components) - 1] == '0': if version_components[len(version_components) - 1] == '0':
version_components.pop() version_components.pop()
return '.'.join(version_components) return '.'.join(version_components)
...@@ -649,10 +649,10 @@ def GetVersion(): ...@@ -649,10 +649,10 @@ def GetVersion():
def GetSpecificSONAME(): def GetSpecificSONAME():
SONAME_PATTERN = re.compile(r"#define\s+SONAME\s+\"(.*)\"") SONAME_PATTERN = re.compile(r"#define\s+SONAME\s+\"(.*)\"")
source = open(join(root_dir, 'src', 'version.cc')).read() source = open(join(root_dir, 'src', 'version.cc')).read()
match = SONAME_PATTERN.search(source) match = SONAME_PATTERN.search(source)
if match: if match:
return match.group(1).strip() return match.group(1).strip()
else: else:
......
...@@ -35,10 +35,6 @@ ...@@ -35,10 +35,6 @@
#include <AvailabilityMacros.h> #include <AvailabilityMacros.h>
#ifdef MAC_OS_X_VERSION_10_5
# include <execinfo.h> // backtrace, backtrace_symbols
#endif
#include <pthread.h> #include <pthread.h>
#include <semaphore.h> #include <semaphore.h>
#include <signal.h> #include <signal.h>
...@@ -58,6 +54,17 @@ ...@@ -58,6 +54,17 @@
#include "platform.h" #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 v8 {
namespace internal { namespace internal {
...@@ -214,9 +221,10 @@ int OS::ActivationFrameAlignment() { ...@@ -214,9 +221,10 @@ int OS::ActivationFrameAlignment() {
int OS::StackWalk(Vector<StackFrame> frames) { int OS::StackWalk(Vector<StackFrame> frames) {
#ifndef MAC_OS_X_VERSION_10_5 // If weak link to execinfo lib has failed, ie because we are on 10.4, abort.
return 0; if (backtrace == NULL)
#else return 0;
int frames_size = frames.length(); int frames_size = frames.length();
void** addresses = NewArray<void*>(frames_size); void** addresses = NewArray<void*>(frames_size);
int frames_count = backtrace(addresses, frames_size); int frames_count = backtrace(addresses, frames_size);
...@@ -244,7 +252,6 @@ int OS::StackWalk(Vector<StackFrame> frames) { ...@@ -244,7 +252,6 @@ int OS::StackWalk(Vector<StackFrame> frames) {
free(symbols); free(symbols);
return frames_count; return frames_count;
#endif
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment