Modified: trunk/CHANGES (975 => 976)
--- trunk/CHANGES 2011-11-10 21:15:16 UTC (rev 975)
+++ trunk/CHANGES 2011-11-10 23:45:26 UTC (rev 976)
@@ -1,5 +1,9 @@
Darwin Build Scripts Change History
-----------------------------------
+Release 26.2 [9-Nov-2011]
+ - darwintrace: build failure on 10.6, undefined symbol __posix_spawn
+ - darwintrace: crash in darwintrace_make_environ
+
Release 26.1 [7-Nov-2011]
- darwintrace: compiler warning build fix
Modified: trunk/darwintrace/darwintrace.c (975 => 976)
--- trunk/darwintrace/darwintrace.c 2011-11-10 21:15:16 UTC (rev 975)
+++ trunk/darwintrace/darwintrace.c 2011-11-10 23:45:26 UTC (rev 976)
@@ -405,20 +405,22 @@
result[i] = strdup(DARWINTRACE_PLACEHOLDER);
}
++i;
-
+
if (darwintrace_dylib_path) {
- int add_dylib = (strstr(libs, darwintrace_dylib_path) == NULL);
- asprintf(&result[i],
- "%s%s%s%s",
- DYLD_INSERT_LIBRARIES,
- add_dylib ? darwintrace_dylib_path : "",
- (add_dylib && libs) ? ":" : "",
- libs ? libs : "");
+ if (libs && strstr(libs, darwintrace_dylib_path)) {
+ /* inserted libraries already contain dylib */
+ result[i] = strdup(DARWINTRACE_PLACEHOLDER);
+ } else {
+ /* otherwise set or insert the dylib path */
+ asprintf(&result[i], "%s%s%s%s",
+ DYLD_INSERT_LIBRARIES, darwintrace_dylib_path,
+ libs ? ":" : "", libs ? libs : "");
+ }
} else {
result[i] = strdup(DARWINTRACE_PLACEHOLDER);
}
++i;
-
+
memcpy(&result[i], envp, count * sizeof(char *));
while (result[i] != NULL) {
@@ -573,7 +575,11 @@
}
DARWINTRACE_INTERPOSE(darwintrace_execve, execve)
-extern int __posix_spawn(pid_t * __restrict, const char * __restrict,
+#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && \
+ __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_7
+/* weak import __posix_spawn which only exists on 10.7 or later */
+extern __attribute__((weak_import))
+int __posix_spawn(pid_t * __restrict, const char * __restrict,
void *,
char *const argv[ __restrict], char *const envp[ __restrict]);
@@ -592,6 +598,7 @@
return result;
}
DARWINTRACE_INTERPOSE(darwintrace_posix_spawn, __posix_spawn)
+#endif
/*
if darwintrace has been initialized, trap