This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: PR sanitizer/59136: llvm-symbolizer shouldn't be started always
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: jakub at redhat dot com, dodji at redhat dot com, kcc at google dot com
- Date: Sun, 24 Nov 2013 10:20:18 -0800
- Subject: PATCH: PR sanitizer/59136: llvm-symbolizer shouldn't be started always
- Authentication-results: sourceware.org; auth=none
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
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.lu@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