Comments
Patch
===================================================================
@@ -14,7 +14,11 @@ interception_files = \
interception_mac.cc \
interception_win.cc
-libinterception_la_SOURCES = $(interception_files)
+if USING_MACH_OVERRIDE
+libinterception_la_SOURCES = $(interception_files) mach_override/mach_override.c
+else
+libinterception_la_SOURCES = $(interception_files)
+endif
# Work around what appears to be a GNU make bug handling MAKEFLAGS
# values defined in terms of make variables, as is the case for CC and
===================================================================
@@ -22,6 +22,12 @@ AC_CANONICAL_SYSTEM
target_alias=${target_alias-$host_alias}
AC_SUBST(target_alias)
+case "$host" in
+ *-*-darwin*) MACH_OVERRIDE=true ;;
+ *) MACH_OVERRIDE=false ;;
+esac
+AM_CONDITIONAL(USING_MACH_OVERRIDE, $MACH_OVERRIDE)
+
AM_INIT_AUTOMAKE(foreign)
AM_ENABLE_MULTILIB(, ..)
===================================================================
@@ -22,6 +22,8 @@
case "${target}" in
x86_64-*-linux* | i?86-*-linux*)
;;
+ x86_64-*-darwin* | i?86-*-darwin*)
+ ;;
*)
UNSUPPORTED=1
;;
===================================================================
@@ -180,6 +180,9 @@ extern GTY(()) int darwin_ms_struct;
%{L*} %(link_libgcc) %o %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} \
%{fopenmp|ftree-parallelize-loops=*: \
%{static|static-libgcc|static-libstdc++|static-libgfortran: libgomp.a%s; : -lgomp } } \
+ %{faddress-sanitizer: \
+ %{static|static-libgcc|static-libgfortran: -framework CoreFoundation -lstdc++ libasan.a%s; \
+ static-libstdc++: -framework CoreFoundation libstdc++.a%s libasan.a%s; : -framework CoreFoundation -lasan } } \
%{fgnu-tm: \
%{static|static-libgcc|static-libstdc++|static-libgfortran: libitm.a%s; : -litm } } \
%{!nostdlib:%{!nodefaultlibs:\
The attached patch assumes that the current mach_override/mach_override.h and mach_override/mach_override.c files have been imported by the libsanitizer maintainers from llvm compiler-rt svn for use by darwin. The patch adds darwin to the supported target list in configure.tgt and defines USING_MACH_OVERRIDE for darwin in configure.ac. The definition of USING_MACH_OVERRIDE is used in Makefile.am as the test for appending mach_override/mach_override.c to libinterception_la_SOURCES. LINK_COMMAND_SPEC_A in gcc/config/darwin.h is modified to add an entry to handle faddress-sanitizer so that the required linkages are used for libasan. The static linkage of libasan.a in LINK_COMMAND_SPEC_A is handle separately for -static-libstdc++ (which requires libstdc++.a) and the -static, -static-gcc and -static-gfortran cases. Tested on x86_64-apple-darwin12 against the mach_override/mach_override.h and mach_override/mach_override.c from llvm compiler-rt svn for both -m32 and -m64 with the both use-after-free.c testcase and... make -k check RUNTESTFLAGS="asan.exp --target_board=unix'{-m32,-m64}'" without regressions. Jack ps Note that this patch assumes that both mach_override.h and mach_override.c reside in a mach_override subdirectory in interception as is the case in the llvm's compiler-rt. gcc/ 2012-11-15 Jack Howarth <howarth@bromo.med.uc.edu> * config/darwin.h (LINK_COMMAND_SPEC_A): Deal with -faddress-sanitizer. libsanitizer/ 2012-11-15 Jack Howarth <howarth@bromo.med.uc.edu> * configure.tgt: Add darwin to supported targets. * configure.ac: Define USING_MACH_OVERRIDE when on darwin. * interception/Makefile.am: Compile mach_override.c when USING_MACH_OVERRIDE defined. * configure: Regenerated. * interception/Makefile.in: Likewise.