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 = {
}
},
'os:macos': {
'CCFLAGS': ['-ansi'],
'CCFLAGS': ['-ansi', '-mmacosx-version-min=10.4'],
},
'os:freebsd': {
'CPPPATH' : ['/usr/local/include'],
......@@ -641,7 +641,7 @@ def GetVersionComponents():
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 GetVersion():
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:
......
......@@ -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
}
......
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