Hi, This patch adds --enable-llvm-symbolizer and disables llvm-symbolizer by default. Without it, GCC sanitizer is unusable on systems with unsupported /bin/llvm-symbolizer. OK to install?
Thanks. H.J. 2013-11-24 H.J. Lu <hongjiu...@intel.com> PR sanitizer/59136 * configure.ac: Add --enable-llvm-symbolizer. Disable llvm-symbolizer by default. AC_SUBST disable_llvm_symbolizer. * sanitizer_common/Makefile.am (DEFS): Add @disable_llvm_symbolizer@. * configure: Regenerated. * sanitizer_common/Makefile.in: Likewise. * sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc (Symbolizer::InitializeExternal): Return false if DISABLE_LLVM_SYMBOLIZER is defined. diff --git a/libsanitizer/configure b/libsanitizer/configure index 22f7fee..e360915 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -703,6 +703,7 @@ build_os build_vendor build_cpu build +disable_llvm_symbolizer target_alias host_alias build_alias @@ -745,6 +746,7 @@ ac_subst_files='' ac_user_opts=' enable_option_checking enable_version_specific_runtime_libs +enable_llvm_symbolizer enable_multilib enable_maintainer_mode enable_dependency_tracking @@ -1391,6 +1393,7 @@ Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory + --enable-llvm-symbolizer Enable llvm-symbolizer --enable-multilib build many library versions (default) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer @@ -2435,6 +2438,28 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $version_specific_libs" >&5 $as_echo "$version_specific_libs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-llvm-symbolizer" >&5 +$as_echo_n "checking for --enable-llvm-symbolizer... " >&6; } +# Check whether --enable-llvm-symbolizer was given. +if test "${enable_llvm_symbolizer+set}" = set; then : + enableval=$enable_llvm_symbolizer; case "$enableval" in + yes) enable_llvm_symbolizer=yes ;; + no) enable_llvm_symbolizer=no ;; + *) enable_llvm_symbolizer=no;; + esac +else + enable_llvm_symbolizer=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_llvm_symbolizer" >&5 +$as_echo "$enable_llvm_symbolizer" >&6; } +if test "$enable_llvm_symbolizer" = "no"; then + disable_llvm_symbolizer="-DDISABLE_LLVM_SYMBOLIZER" +else + disable_llvm_symbolizer= +fi + + # Do not delete or change the following two lines. For why, see # http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html ac_aux_dir= @@ -11119,7 +11144,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11122 "configure" +#line 11147 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11225,7 +11250,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11228 "configure" +#line 11253 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/libsanitizer/configure.ac b/libsanitizer/configure.ac index f769fdb..492a5e2 100644 --- a/libsanitizer/configure.ac +++ b/libsanitizer/configure.ac @@ -16,6 +16,23 @@ AC_ARG_ENABLE(version-specific-runtime-libs, [version_specific_libs=no]) AC_MSG_RESULT($version_specific_libs) +AC_MSG_CHECKING([for --enable-llvm-symbolizer]) +AC_ARG_ENABLE(llvm-symbolizer, +[ --enable-llvm-symbolizer Enable llvm-symbolizer], +[case "$enableval" in + yes) enable_llvm_symbolizer=yes ;; + no) enable_llvm_symbolizer=no ;; + *) enable_llvm_symbolizer=no;; + esac], +[enable_llvm_symbolizer=no]) +AC_MSG_RESULT($enable_llvm_symbolizer) +if test "$enable_llvm_symbolizer" = "no"; then + disable_llvm_symbolizer="-DDISABLE_LLVM_SYMBOLIZER" +else + disable_llvm_symbolizer= +fi +AC_SUBST(disable_llvm_symbolizer) + # Do not delete or change the following two lines. For why, see # http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html AC_CANONICAL_SYSTEM diff --git a/libsanitizer/sanitizer_common/Makefile.am b/libsanitizer/sanitizer_common/Makefile.am index c4c3c5e..713b129 100644 --- a/libsanitizer/sanitizer_common/Makefile.am +++ b/libsanitizer/sanitizer_common/Makefile.am @@ -3,7 +3,7 @@ AM_CPPFLAGS = -I $(top_srcdir)/include # May be used by toolexeclibdir. gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) -DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS @disable_llvm_symbolizer@ AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS) ACLOCAL_AMFLAGS = -I m4 diff --git a/libsanitizer/sanitizer_common/Makefile.in b/libsanitizer/sanitizer_common/Makefile.in index b54a28f..ff7570f 100644 --- a/libsanitizer/sanitizer_common/Makefile.in +++ b/libsanitizer/sanitizer_common/Makefile.in @@ -106,7 +106,7 @@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ -DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS @disable_llvm_symbolizer@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ @@ -176,6 +176,7 @@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ +disable_llvm_symbolizer = @disable_llvm_symbolizer@ docdir = @docdir@ dvidir = @dvidir@ enable_shared = @enable_shared@ diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc index 3406308..6bc047c 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc @@ -450,6 +450,9 @@ class Symbolizer : public SymbolizerInterface { } bool InitializeExternal(const char *path_to_symbolizer) { +#ifdef DISABLE_LLVM_SYMBOLIZER + return false; +#else if (!path_to_symbolizer || path_to_symbolizer[0] == '\0') { path_to_symbolizer = FindPathToBinary("llvm-symbolizer"); if (!path_to_symbolizer) @@ -462,6 +465,7 @@ class Symbolizer : public SymbolizerInterface { external_symbolizer_ = new(mem) ExternalSymbolizer(path_to_symbolizer, input_fd, output_fd); return true; +#endif } bool IsAvailable() { -- 1.8.3.1