Bug 1280637 - Make --enable-thread-sanitizer & friends do more work, r=glandium
MozReview-Commit-ID: KinAe8zLivJ
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -27,16 +27,17 @@ builtin(include, build/autoconf/zlib.m4)
builtin(include, build/autoconf/linux.m4)dnl
builtin(include, build/autoconf/winsdk.m4)dnl
builtin(include, build/autoconf/icu.m4)dnl
builtin(include, build/autoconf/ffi.m4)dnl
builtin(include, build/autoconf/clang-plugin.m4)dnl
builtin(include, build/autoconf/alloc.m4)dnl
builtin(include, build/autoconf/ios.m4)dnl
builtin(include, build/autoconf/jemalloc.m4)dnl
+builtin(include, build/autoconf/sanitize.m4)dnl
MOZ_PROG_CHECKMSYS()
# Read the user's .mozconfig script. We can't do this in
# configure.in: autoconf puts the argument parsing code above anything
# expanded from configure.in, and we need to get the configure options
# from .mozconfig in place before that argument parsing code.
MOZ_READ_MOZCONFIG(.)
new file mode 100644
--- /dev/null
+++ b/build/autoconf/sanitize.m4
@@ -0,0 +1,85 @@
+dnl This Source Code Form is subject to the terms of the Mozilla Public
+dnl License, v. 2.0. If a copy of the MPL was not distributed with this
+dnl file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+AC_DEFUN([MOZ_CONFIG_SANITIZE], [
+
+dnl ========================================================
+dnl = Use Address Sanitizer
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(address-sanitizer,
+[ --enable-address-sanitizer Enable Address Sanitizer (default=no)],
+ MOZ_ASAN=1,
+ MOZ_ASAN= )
+if test -n "$MOZ_ASAN"; then
+ MOZ_LLVM_HACKS=1
+ if test -n "$CLANG_CL"; then
+ # Look for clang_rt.asan_dynamic-i386.dll
+ MOZ_CLANG_RT_ASAN_LIB=clang_rt.asan_dynamic-i386.dll
+ # We use MOZ_PATH_PROG in order to get a Windows style path.
+ MOZ_PATH_PROG(MOZ_CLANG_RT_ASAN_LIB_PATH, $MOZ_CLANG_RT_ASAN_LIB)
+ if test -z "$MOZ_CLANG_RT_ASAN_LIB_PATH"; then
+ AC_MSG_ERROR([Couldn't find $MOZ_CLANG_RT_ASAN_LIB. It should be available in the same location as clang-cl.])
+ fi
+ AC_SUBST(MOZ_CLANG_RT_ASAN_LIB_PATH)
+ fi
+ CFLAGS="-fsanitize=address -Dxmalloc=myxmalloc -fPIC $CFLAGS"
+ CXXFLAGS="-fsanitize=address -Dxmalloc=myxmalloc -fPIC $CXXFLAGS"
+ LDFLAGS="-fsanitize=address $LDFLAGS"
+ AC_DEFINE(MOZ_ASAN)
+ MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
+fi
+AC_SUBST(MOZ_ASAN)
+
+dnl ========================================================
+dnl = Use Memory Sanitizer
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(memory-sanitizer,
+[ --enable-memory-sanitizer Enable Memory Sanitizer (default=no)],
+ MOZ_MSAN=1,
+ MOZ_MSAN= )
+if test -n "$MOZ_MSAN"; then
+ MOZ_LLVM_HACKS=1
+ CFLAGS="-fsanitize=memory -fsanitize-memory-track-origins $CFLAGS"
+ CXXFLAGS="-fsanitize=memory -fsanitize-memory-track-origins $CXXFLAGS"
+ LDFLAGS="-fsanitize=memory -fsanitize-memory-track-origins $LDFLAGS"
+ AC_DEFINE(MOZ_MSAN)
+ MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
+fi
+AC_SUBST(MOZ_MSAN)
+
+dnl ========================================================
+dnl = Use Thread Sanitizer
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(thread-sanitizer,
+[ --enable-thread-sanitizer Enable Thread Sanitizer (default=no)],
+ MOZ_TSAN=1,
+ MOZ_TSAN= )
+if test -n "$MOZ_TSAN"; then
+ MOZ_LLVM_HACKS=1
+ CFLAGS="-fsanitize=thread $CFLAGS"
+ CXXFLAGS="-fsanitize=thread $CXXFLAGS"
+ LDFLAGS="-fsanitize=thread $LDFLAGS"
+ AC_DEFINE(MOZ_TSAN)
+ MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
+fi
+AC_SUBST(MOZ_TSAN)
+
+# The LLVM symbolizer is used by all sanitizers
+AC_SUBST(LLVM_SYMBOLIZER)
+
+dnl ========================================================
+dnl = Enable hacks required for LLVM instrumentations
+dnl ========================================================
+MOZ_ARG_ENABLE_BOOL(llvm-hacks,
+[ --enable-llvm-hacks Enable workarounds required for several LLVM instrumentations (default=no)],
+ MOZ_LLVM_HACKS=1,
+ MOZ_LLVM_HACKS= )
+if test -n "$MOZ_LLVM_HACKS"; then
+ MOZ_NO_WLZDEFS=1
+ MOZ_CFLAGS_NSS=1
+fi
+AC_SUBST(MOZ_NO_WLZDEFS)
+AC_SUBST(MOZ_CFLAGS_NSS)
+
+])
--- a/build/unix/mozconfig.asan
+++ b/build/unix/mozconfig.asan
@@ -2,22 +2,16 @@ MOZ_AUTOMATION_L10N_CHECK=0
. "$topsrcdir/build/mozconfig.common"
# Use Clang as specified in manifest
export CC="$topsrcdir/clang/bin/clang -fgnu89-inline"
export CXX="$topsrcdir/clang/bin/clang++"
export LLVM_SYMBOLIZER="$topsrcdir/clang/bin/llvm-symbolizer"
-# Mandatory flags for ASan
-export ASANFLAGS="-fsanitize=address -Dxmalloc=myxmalloc -fPIC"
-export CFLAGS="$ASANFLAGS"
-export CXXFLAGS="$ASANFLAGS"
-export LDFLAGS="-fsanitize=address"
-
# Use a newer binutils, from the tooltool gcc package, if it's there
if [ -e "$topsrcdir/gcc/bin/ld" ]; then
export CC="$CC -B $topsrcdir/gcc/bin"
export CXX="$CXX -B $topsrcdir/gcc/bin"
fi
# Enable ASan specific code and build workarounds
ac_add_options --enable-address-sanitizer
--- a/build/unix/mozconfig.tsan
+++ b/build/unix/mozconfig.tsan
@@ -2,31 +2,26 @@ MOZ_AUTOMATION_L10N_CHECK=0
. "$topsrcdir/build/mozconfig.common"
# Use Clang as specified in manifest
export CC="$topsrcdir/clang/bin/clang"
export CXX="$topsrcdir/clang/bin/clang++"
export LLVM_SYMBOLIZER="$topsrcdir/clang/bin/llvm-symbolizer"
-# Mandatory flag for TSan
-export CFLAGS="-fsanitize=thread"
-export CXXFLAGS="-fsanitize=thread"
-export LDFLAGS="-fsanitize=thread"
-
# Use a newer binutils, from the tooltool gcc package, if it's there
if [ -e "$topsrcdir/gcc/bin/ld" ]; then
export CC="$CC -B $topsrcdir/gcc/bin"
export CXX="$CXX -B $topsrcdir/gcc/bin"
fi
# Enable TSan specific code and build workarounds
ac_add_options --enable-thread-sanitizer
-# The ThreadSanitizer is not compatible with sanboxing
+# The ThreadSanitizer is not compatible with sandboxing
# (see bug 1182565)
ac_add_options --disable-sandbox
# These are required by TSan
ac_add_options --disable-jemalloc
ac_add_options --disable-crashreporter
ac_add_options --disable-elf-hack
ac_add_options --enable-pie
--- a/js/src/aclocal.m4
+++ b/js/src/aclocal.m4
@@ -25,16 +25,17 @@ builtin(include, ../../build/autoconf/an
builtin(include, ../../build/autoconf/zlib.m4)dnl
builtin(include, ../../build/autoconf/linux.m4)dnl
builtin(include, ../../build/autoconf/winsdk.m4)dnl
builtin(include, ../../build/autoconf/icu.m4)dnl
builtin(include, ../../build/autoconf/ffi.m4)dnl
builtin(include, ../../build/autoconf/clang-plugin.m4)dnl
builtin(include, ../../build/autoconf/alloc.m4)dnl
builtin(include, ../../build/autoconf/jemalloc.m4)dnl
+builtin(include, ../../build/autoconf/sanitize.m4)dnl
builtin(include, ../../build/autoconf/ios.m4)dnl
define([__MOZ_AC_INIT_PREPARE], defn([AC_INIT_PREPARE]))
define([AC_INIT_PREPARE],
[if test -z "$srcdir"; then
srcdir=`dirname "[$]0"`
fi
srcdir="$srcdir/../.."
--- a/js/src/old-configure.in
+++ b/js/src/old-configure.in
@@ -586,71 +586,17 @@ dnl ====================================
if test -n "${CLANG_CC}${CLANG_CL}"; then
_WARNINGS_CFLAGS="-Qunused-arguments ${_WARNINGS_CFLAGS}"
CPPFLAGS="-Qunused-arguments ${CPPFLAGS}"
fi
if test -n "${CLANG_CXX}${CLANG_CL}"; then
_WARNINGS_CXXFLAGS="-Qunused-arguments ${_WARNINGS_CXXFLAGS}"
fi
-dnl ========================================================
-dnl = Use Address Sanitizer
-dnl ========================================================
-MOZ_ARG_ENABLE_BOOL(address-sanitizer,
-[ --enable-address-sanitizer Enable Address Sanitizer (default=no)],
- MOZ_ASAN=1,
- MOZ_ASAN= )
-if test -n "$MOZ_ASAN"; then
- MOZ_LLVM_HACKS=1
- AC_DEFINE(MOZ_ASAN)
- MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
-fi
-AC_SUBST(MOZ_ASAN)
-
-dnl ========================================================
-dnl = Use Memory Sanitizer
-dnl ========================================================
-MOZ_ARG_ENABLE_BOOL(memory-sanitizer,
-[ --enable-memory-sanitizer Enable Memory Sanitizer (default=no)],
- MOZ_MSAN=1,
- MOZ_MSAN= )
-if test -n "$MOZ_MSAN"; then
- MOZ_LLVM_HACKS=1
- AC_DEFINE(MOZ_MSAN)
- MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
-fi
-AC_SUBST(MOZ_MSAN)
-
-dnl ========================================================
-dnl = Use Thread Sanitizer
-dnl ========================================================
-MOZ_ARG_ENABLE_BOOL(thread-sanitizer,
-[ --enable-thread-sanitizer Enable Thread Sanitizer (default=no)],
- MOZ_TSAN=1,
- MOZ_TSAN= )
-if test -n "$MOZ_TSAN"; then
- MOZ_LLVM_HACKS=1
- AC_DEFINE(MOZ_TSAN)
- MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
-fi
-AC_SUBST(MOZ_TSAN)
-
-# The LLVM symbolizer is used by all sanitizers
-AC_SUBST(LLVM_SYMBOLIZER)
-
-dnl ========================================================
-dnl = Enable hacks required for LLVM instrumentations
-dnl ========================================================
-MOZ_ARG_ENABLE_BOOL(llvm-hacks,
-[ --enable-llvm-hacks Enable workarounds required for several LLVM instrumentations (default=no)],
- MOZ_LLVM_HACKS=1,
- MOZ_LLVM_HACKS= )
-if test -n "$MOZ_LLVM_HACKS"; then
- MOZ_NO_WLZDEFS=1
-fi
+MOZ_CONFIG_SANITIZE
dnl ========================================================
dnl = Enable treating compiler warnings as errors
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(warnings-as-errors,
[ --enable-warnings-as-errors
Enable treating warnings as errors],
MOZ_ENABLE_WARNINGS_AS_ERRORS=1,
--- a/old-configure.in
+++ b/old-configure.in
@@ -748,84 +748,17 @@ dnl ====================================
if test -n "${CLANG_CC}${CLANG_CL}"; then
_WARNINGS_CFLAGS="-Qunused-arguments ${_WARNINGS_CFLAGS}"
CPPFLAGS="-Qunused-arguments ${CPPFLAGS}"
fi
if test -n "${CLANG_CXX}${CLANG_CL}"; then
_WARNINGS_CXXFLAGS="-Qunused-arguments ${_WARNINGS_CXXFLAGS}"
fi
-dnl ========================================================
-dnl = Use Address Sanitizer
-dnl ========================================================
-MOZ_ARG_ENABLE_BOOL(address-sanitizer,
-[ --enable-address-sanitizer Enable Address Sanitizer (default=no)],
- MOZ_ASAN=1,
- MOZ_ASAN= )
-if test -n "$MOZ_ASAN"; then
- MOZ_LLVM_HACKS=1
- if test -n "$CLANG_CL"; then
- # Look for clang_rt.asan_dynamic-i386.dll
- MOZ_CLANG_RT_ASAN_LIB=clang_rt.asan_dynamic-i386.dll
- # We use MOZ_PATH_PROG in order to get a Windows style path.
- MOZ_PATH_PROG(MOZ_CLANG_RT_ASAN_LIB_PATH, $MOZ_CLANG_RT_ASAN_LIB)
- if test -z "$MOZ_CLANG_RT_ASAN_LIB_PATH"; then
- AC_MSG_ERROR([Couldn't find $MOZ_CLANG_RT_ASAN_LIB. It should be available in the same location as clang-cl.])
- fi
- AC_SUBST(MOZ_CLANG_RT_ASAN_LIB_PATH)
- fi
- AC_DEFINE(MOZ_ASAN)
- MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
-fi
-AC_SUBST(MOZ_ASAN)
-
-dnl ========================================================
-dnl = Use Memory Sanitizer
-dnl ========================================================
-MOZ_ARG_ENABLE_BOOL(memory-sanitizer,
-[ --enable-memory-sanitizer Enable Memory Sanitizer (default=no)],
- MOZ_MSAN=1,
- MOZ_MSAN= )
-if test -n "$MOZ_MSAN"; then
- MOZ_LLVM_HACKS=1
- AC_DEFINE(MOZ_MSAN)
- MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
-fi
-AC_SUBST(MOZ_MSAN)
-
-dnl ========================================================
-dnl = Use Thread Sanitizer
-dnl ========================================================
-MOZ_ARG_ENABLE_BOOL(thread-sanitizer,
-[ --enable-thread-sanitizer Enable Thread Sanitizer (default=no)],
- MOZ_TSAN=1,
- MOZ_TSAN= )
-if test -n "$MOZ_TSAN"; then
- MOZ_LLVM_HACKS=1
- AC_DEFINE(MOZ_TSAN)
- MOZ_PATH_PROG(LLVM_SYMBOLIZER, llvm-symbolizer)
-fi
-AC_SUBST(MOZ_TSAN)
-
-# The LLVM symbolizer is used by all sanitizers
-AC_SUBST(LLVM_SYMBOLIZER)
-
-dnl ========================================================
-dnl = Enable hacks required for LLVM instrumentations
-dnl ========================================================
-MOZ_ARG_ENABLE_BOOL(llvm-hacks,
-[ --enable-llvm-hacks Enable workarounds required for several LLVM instrumentations (default=no)],
- MOZ_LLVM_HACKS=1,
- MOZ_LLVM_HACKS= )
-if test -n "$MOZ_LLVM_HACKS"; then
- MOZ_NO_WLZDEFS=1
- MOZ_CFLAGS_NSS=1
-fi
-AC_SUBST(MOZ_NO_WLZDEFS)
-AC_SUBST(MOZ_CFLAGS_NSS)
+MOZ_CONFIG_SANITIZE
dnl ========================================================
dnl = Enable treating compiler warnings as errors
dnl ========================================================
MOZ_ARG_ENABLE_BOOL(warnings-as-errors,
[ --enable-warnings-as-errors
Enable treating warnings as errors],
MOZ_ENABLE_WARNINGS_AS_ERRORS=1,