@@ -1,4 +1,4 @@
-AM_CPPFLAGS = -I $(top_srcdir)/include
+AM_CPPFLAGS = -I $(top_srcdir)/include
# May be used by toolexeclibdir.
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
@@ -6,6 +6,11 @@ gcc_version := $(shell cat $(top_srcdir)
DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
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)
+if LIBBACKTRACE_SUPPORTED
+AM_CXXFLAGS += -DSANITIZER_LIBBACKTRACE -I $(top_srcdir)/../libbacktrace \
+ -I $(top_builddir)/libbacktrace \
+ -include $(top_srcdir)/libbacktrace/backtrace-rename.h
+endif
ACLOCAL_AMFLAGS = -I m4
noinst_LTLIBRARIES = libsanitizer_common.la
@@ -28,7 +28,11 @@ lsan_files = \
libsanitizer_lsan_la_SOURCES = $(sanitizer_lsan_files)
liblsan_la_SOURCES = $(lsan_files)
-liblsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la $(LIBSTDCXX_RAW_CXX_LDFLAGS)
+liblsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la
+if LIBBACKTRACE_SUPPORTED
+liblsan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
+endif
+liblsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
liblsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_liblsan)
# Work around what appears to be a GNU make bug handling MAKEFLAGS
@@ -39,7 +39,11 @@ tsan_files = \
tsan_rtl_amd64.S
libtsan_la_SOURCES = $(tsan_files)
-libtsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la $(LIBSTDCXX_RAW_CXX_LDFLAGS)
+libtsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la
+if LIBBACKTRACE_SUPPORTED
+libtsan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
+endif
+libtsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
libtsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libtsan)
# Work around what appears to be a GNU make bug handling MAKEFLAGS
@@ -22,6 +22,9 @@ libubsan_la_LIBADD = $(top_builddir)/san
if !USING_MAC_INTERPOSE
libubsan_la_LIBADD += $(top_builddir)/interception/libinterception.la
endif
+if LIBBACKTRACE_SUPPORTED
+libubsan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
+endif
libubsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
libubsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libubsan)
@@ -1,13 +1,15 @@
ACLOCAL_AMFLAGS = -I .. -I ../config
-if TSAN_SUPPORTED
-SUBDIRS = interception sanitizer_common lsan asan tsan ubsan
-else
-SUBDIRS = interception sanitizer_common lsan asan ubsan
+SUBDIRS = sanitizer_common
+if !USING_MAC_INTERPOSE
+SUBDIRS += interception
endif
-
-if USING_MAC_INTERPOSE
-SUBDIRS = sanitizer_common lsan asan ubsan
+if LIBBACKTRACE_SUPPORTED
+SUBDIRS += libbacktrace
+endif
+SUBDIRS += lsan asan ubsan
+if TSAN_SUPPORTED
+SUBDIRS += tsan
endif
## May be used by toolexeclibdir.
@@ -9,6 +9,8 @@ http://llvm.org/svn/llvm-project/compile
lib/interception
lib/asan
lib/tsan
+ lib/lsan
+ lib/ubsan
Trivial and urgent fixes (portability, build fixes, etc.) may go directly to the
GCC tree. All non-trivial changes, functionality improvements, etc. should go
@@ -0,0 +1,78 @@
+# Makefile.am -- Backtrace in libsanitizer Makefile.
+# Copyright (C) 2012-2013 Free Software Foundation, Inc.
+
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+
+# (1) Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+
+# (2) Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+
+# (3) The name of the author may not be used to
+# endorse or promote products derived from this software without
+# specific prior written permission.
+
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+ACLOCAL_AMFLAGS = -I ../.. -I ../../config
+
+AM_CPPFLAGS = -I $(top_srcdir)/../include -I $(top_srcdir)/../libgcc \
+ -I ../../libgcc -I .. -I $(top_srcdir) -I $(top_srcdir)/../libbacktrace
+
+WARN_FLAGS = -W -Wall -Wwrite-strings -Wmissing-format-attribute \
+ -Wcast-qual -Werror
+C_WARN_FLAGS = $(WARN_FLAGS) -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition
+CXX_WARN_FLAGS = $(WARN_FLAGS) -Wno-unused-parameter
+AM_CFLAGS = $(C_WARN_FLAGS)
+AM_CXXFLAGS = $(CXX_WARN_FLAGS) -fno-rtti -fno-exceptions
+
+noinst_LTLIBRARIES = libsanitizer_libbacktrace.la
+
+libsanitizer_libbacktrace_la_SOURCES = \
+ ../../libbacktrace/backtrace.h \
+ ../../libbacktrace/atomic.c \
+ ../../libbacktrace/dwarf.c \
+ ../../libbacktrace/fileline.c \
+ ../../libbacktrace/internal.h \
+ ../../libbacktrace/posix.c \
+ ../../libbacktrace/state.c \
+ bridge.cc
+
+FORMAT_FILES = \
+ ../../libbacktrace/elf.c \
+ ../../libbacktrace/unknown.c
+
+VIEW_FILES = \
+ ../../libbacktrace/read.c \
+ ../../libbacktrace/mmapio.c
+
+ALLOC_FILES = \
+ ../../libbacktrace/alloc.c \
+ ../../libbacktrace/mmap.c
+
+EXTRA_libsanitizer_libbacktrace_la_SOURCES = \
+ $(FORMAT_FILES) \
+ $(VIEW_FILES) \
+ $(ALLOC_FILES)
+
+libsanitizer_libbacktrace_la_LIBADD = \
+ $(FORMAT_FILE) \
+ $(VIEW_FILE) \
+ $(ALLOC_FILE)
+
+libsanitizer_libbacktrace_la_DEPENDENCIES = $(libsanitizer_libbacktrace_la_LIBADD)
@@ -0,0 +1,41 @@
+/* Ensure we don't pollute application namespace. */
+#define backtrace_alloc __asan_backtrace_alloc
+#define backtrace_close __asan_backtrace_close
+#define backtrace_create_state __asan_backtrace_create_state
+#define backtrace_dwarf_add __asan_backtrace_dwarf_add
+#define backtrace_free __asan_backtrace_free
+#define backtrace_get_view __asan_backtrace_get_view
+#define backtrace_initialize __asan_backtrace_initialize
+#define backtrace_open __asan_backtrace_open
+#define backtrace_pcinfo __asan_backtrace_pcinfo
+#define backtrace_release_view __asan_backtrace_release_view
+#define backtrace_syminfo __asan_backtrace_syminfo
+#define backtrace_vector_finish __asan_backtrace_vector_finish
+#define backtrace_vector_grow __asan_backtrace_vector_grow
+#define backtrace_vector_release __asan_backtrace_vector_release
+
+#ifndef __cplusplus
+
+#include <string.h>
+
+extern void *__asan_internal_memcpy (void *, const void *, size_t);
+extern void *__asan_internal_memset (void *, int, size_t);
+extern int __asan_internal_strcmp (const char *, const char *);
+extern size_t __asan_internal_strlen (const char *);
+extern size_t __asan_internal_strnlen (const char *, size_t);
+
+#undef memcpy
+#undef memset
+#undef strcmp
+#undef strlen
+#undef strnlen
+
+#define memcpy(x,y,z) __asan_internal_memcpy (x, y, z)
+#define memset(x,y,z) __asan_internal_memset (x, y, z)
+#define strcmp(x,y) __asan_internal_strcmp (x, y)
+#define strlen(x) __asan_internal_strlen (x)
+#ifdef HAVE_DECL_STRNLEN
+#define strnlen(x,y) __asan_internal_strnlen (x, y)
+#endif
+
+#endif
@@ -0,0 +1,61 @@
+/* backtrace-supported.h.in -- Whether stack backtrace is supported.
+ Copyright (C) 2012-2013 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+/* The file backtrace-supported.h.in is used by configure to generate
+ the file backtrace-supported.h. The file backtrace-supported.h may
+ be #include'd to see whether the backtrace library will be able to
+ get a backtrace and produce symbolic information. */
+
+
+/* BACKTRACE_SUPPORTED will be #define'd as 1 if the backtrace library
+ should work, 0 if it will not. Libraries may #include this to make
+ other arrangements. */
+
+#define BACKTRACE_SUPPORTED @BACKTRACE_SUPPORTED@
+
+/* BACKTRACE_USES_MALLOC will be #define'd as 1 if the backtrace
+ library will call malloc as it works, 0 if it will call mmap
+ instead. This may be used to determine whether it is safe to call
+ the backtrace functions from a signal handler. In general this
+ only applies to calls like backtrace and backtrace_pcinfo. It does
+ not apply to backtrace_simple, which never calls malloc. It does
+ not apply to backtrace_print, which always calls fprintf and
+ therefore malloc. */
+
+#define BACKTRACE_USES_MALLOC @BACKTRACE_USES_MALLOC@
+
+/* BACKTRACE_SUPPORTS_THREADS will be #define'd as 1 if the backtrace
+ library is configured with threading support, 0 if not. If this is
+ 0, the threaded parameter to backtrace_create_state must be passed
+ as 0. */
+
+#define BACKTRACE_SUPPORTS_THREADS @BACKTRACE_SUPPORTS_THREADS@
@@ -0,0 +1,72 @@
+/* bridge.cc -- extern "C" wrappers around sanitizer_common APIs.
+ Copyright (C) 2013 Free Software Foundation, Inc.
+ Written by Jakub Jelinek, Red Hat, Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ (1) Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE. */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "sanitizer_common/sanitizer_allocator_internal.h"
+
+extern "C"
+{
+
+void *
+__asan_internal_memcpy (void *dest, const void *src, size_t n)
+{
+ return __sanitizer::internal_memcpy (dest, src, n);
+}
+
+void *
+__asan_internal_memset (void *dest, int c, size_t n)
+{
+ return __sanitizer::internal_memset (dest, c, n);
+}
+
+int
+__asan_internal_strcmp (const char *s1, const char *s2)
+{
+ return __sanitizer::internal_strcmp (s1, s2);
+}
+
+size_t
+__asan_internal_strlen (const char *str)
+{
+ return __sanitizer::internal_strlen (str);
+}
+
+size_t
+__asan_internal_strnlen (const char *str, size_t n)
+{
+ return __sanitizer::internal_strnlen (str, n);
+}
+
+}
@@ -16,6 +16,8 @@ AC_ARG_ENABLE(version-specific-runtime-l
[version_specific_libs=no])
AC_MSG_RESULT($version_specific_libs)
+AC_USE_SYSTEM_EXTENSIONS
+
# 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
@@ -61,10 +63,16 @@ AC_SUBST(toolexeclibdir)
AC_PROG_CC
AC_PROG_CXX
AM_PROG_AS
+AC_PROG_RANLIB
AC_LIBTOOL_DLOPEN
AM_PROG_LIBTOOL
+AC_PROG_AWK
+case "$AWK" in
+"") AC_MSG_ERROR([can't build without awk]) ;;
+esac
+
AC_SUBST(enable_shared)
AC_SUBST(enable_static)
@@ -122,9 +130,177 @@ case "$host" in
esac
AM_CONDITIONAL(USING_MAC_INTERPOSE, $MAC_INTERPOSE)
-AC_CONFIG_FILES([Makefile libsanitizer.spec])
+backtrace_supported=yes
+
+# Test for __sync support.
+AC_CACHE_CHECK([__sync extensions],
+[libsanitizer_cv_sys_sync],
+[if test -n "${with_target_subdir}"; then
+ libsanitizer_cv_sys_sync=yes
+ else
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([int i;],
+ [__sync_bool_compare_and_swap (&i, i, i);
+ __sync_lock_test_and_set (&i, 1);
+ __sync_lock_release (&i);])],
+ [libsanitizer_cv_sys_sync=yes],
+ [libsanitizer_cv_sys_sync=no])
+ fi])
+if test "$libsanitizer_cv_sys_sync" = "yes"; then
+ AC_DEFINE([HAVE_SYNC_FUNCTIONS], 1,
+ [Define to 1 if you have the __sync functions])
+fi
+
+# Test for __atomic support.
+AC_CACHE_CHECK([__atomic extensions],
+[libsanitizer_cv_sys_atomic],
+[if test -n "${with_target_subdir}"; then
+ libsanitizer_cv_sys_atomic=yes
+ else
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([int i;],
+ [__atomic_load_n (&i, __ATOMIC_ACQUIRE);
+ __atomic_store_n (&i, 1, __ATOMIC_RELEASE);])],
+ [libsanitizer_cv_sys_atomic=yes],
+ [libsanitizer_cv_sys_atomic=no])
+ fi])
+if test "$libsanitizer_cv_sys_atomic" = "yes"; then
+ AC_DEFINE([HAVE_ATOMIC_FUNCTIONS], 1,
+ [Define to 1 if you have the __atomic functions])
+fi
+
+# The library needs to be able to read the executable itself. Compile
+# a file to determine the executable format. The awk script
+# filetype.awk prints out the file type.
+AC_CACHE_CHECK([output filetype],
+[libsanitizer_cv_sys_filetype],
+[filetype=
+AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([int i;], [int j;])],
+ [filetype=`${AWK} -f $srcdir/../libbacktrace/filetype.awk conftest.$ac_objext`],
+ [AC_MSG_FAILURE([compiler failed])])
+libsanitizer_cv_sys_filetype=$filetype])
+
+# Match the file type to decide what files to compile.
+FORMAT_FILE=
+case "$libsanitizer_cv_sys_filetype" in
+elf*) FORMAT_FILE="elf.lo" ;;
+*) AC_MSG_WARN([could not determine output file type])
+ FORMAT_FILE="unknown.lo"
+ backtrace_supported=no
+ ;;
+esac
+AC_SUBST(FORMAT_FILE)
+
+# ELF defines.
+elfsize=
+case "$libsanitizer_cv_sys_filetype" in
+elf32) elfsize=32 ;;
+elf64) elfsize=64 ;;
+esac
+AC_DEFINE_UNQUOTED([BACKTRACE_ELF_SIZE], [$elfsize], [ELF size: 32 or 64])
+
+BACKTRACE_SUPPORTED=0
+if test "$backtrace_supported" = "yes"; then
+ BACKTRACE_SUPPORTED=1
+fi
+AC_SUBST(BACKTRACE_SUPPORTED)
+
+GCC_HEADER_STDINT(gstdint.h)
+
+AC_CHECK_HEADERS(sys/mman.h)
+if test "$ac_cv_header_sys_mman_h" = "no"; then
+ have_mmap=no
+else
+ if test -n "${with_target_subdir}"; then
+ # When built as a GCC target library, we can't do a link test. We
+ # simply assume that if we have mman.h, we have mmap.
+ have_mmap=yes
+ else
+ AC_CHECK_FUNC(mmap, [have_mmap=yes], [have_mmap=no])
+ fi
+fi
+if test "$have_mmap" = "no"; then
+ VIEW_FILE=read.lo
+ ALLOC_FILE=alloc.lo
+else
+ VIEW_FILE=mmapio.lo
+ AC_PREPROC_IFELSE([
+#include <sys/mman.h>
+#if !defined(MAP_ANONYMOUS) && !defined(MAP_ANON)
+ #error no MAP_ANONYMOUS
+#endif
+], [ALLOC_FILE=mmap.lo], [ALLOC_FILE=alloc.lo])
+fi
+AC_SUBST(VIEW_FILE)
+AC_SUBST(ALLOC_FILE)
+
+BACKTRACE_USES_MALLOC=0
+if test "$ALLOC_FILE" = "alloc.lo"; then
+ BACKTRACE_USES_MALLOC=1
+fi
+AC_SUBST(BACKTRACE_USES_MALLOC)
+
+# Don't care about thread support
+BACKTRACE_SUPPORTS_THREADS=0
+AC_SUBST(BACKTRACE_SUPPORTS_THREADS)
+
+# Check for dl_iterate_phdr.
+AC_CHECK_HEADERS(link.h)
+if test "$ac_cv_header_link_h" = "no"; then
+ have_dl_iterate_phdr=no
+else
+ # When built as a GCC target library, we can't do a link test.
+ AC_EGREP_HEADER([dl_iterate_phdr], [link.h], [have_dl_iterate_phdr=yes],
+ [have_dl_iterate_phdr=no])
+ case "${host}" in
+ *-*-solaris2.10*)
+ # Avoid dl_iterate_phdr on Solaris 10, where it is in the
+ # header file but is only in -ldl.
+ have_dl_iterate_phdr=no ;;
+ esac
+fi
+if test "$have_dl_iterate_phdr" = "yes"; then
+ AC_DEFINE(HAVE_DL_ITERATE_PHDR, 1, [Define if dl_iterate_phdr is available.])
+fi
+
+# Check for the fcntl function.
+if test -n "${with_target_subdir}"; then
+ case "${host}" in
+ *-*-mingw*) have_fcntl=no ;;
+ *) have_fcntl=yes ;;
+ esac
+else
+ AC_CHECK_FUNC(fcntl, [have_fcntl=yes], [have_fcntl=no])
+fi
+if test "$have_fcntl" = "yes"; then
+ AC_DEFINE([HAVE_FCNTL], 1,
+ [Define to 1 if you have the fcntl function])
+fi
+
+AC_CHECK_DECLS(strnlen)
+
+# Check for getexecname function.
+if test -n "${with_target_subdir}"; then
+ case "${host}" in
+ *-*-solaris2*) have_getexecname=yes ;;
+ *) have_getexecname=no ;;
+ esac
+else
+ AC_CHECK_FUNC(getexecname, [have_getexecname=yes], [have_getexecname=no])
+fi
+if test "$have_getexecname" = "yes"; then
+ AC_DEFINE(HAVE_GETEXECNAME, 1, [Define if getexecname is available.])
+fi
+
+AM_CONDITIONAL(LIBBACKTRACE_SUPPORTED,
+ [test "x${BACKTRACE_SUPPORTED}x${BACKTRACE_USES_MALLOC}" = "x1x0"])
+
+AH_BOTTOM([#include "libbacktrace/backtrace-rename.h"])
+AC_CONFIG_FILES([Makefile libsanitizer.spec libbacktrace/backtrace-supported.h])
+AC_CONFIG_HEADER(config.h)
-AC_CONFIG_FILES(AC_FOREACH([DIR], [interception sanitizer_common lsan asan ubsan], [DIR/Makefile ]),
+AC_CONFIG_FILES(AC_FOREACH([DIR], [interception sanitizer_common libbacktrace lsan asan ubsan], [DIR/Makefile ]),
[cat > vpsed$$ << \_EOF
s!`test -f '$<' || echo '$(srcdir)/'`!!
_EOF
@@ -36,10 +36,12 @@ asan_files = \
asan_win.cc
libasan_la_SOURCES = $(asan_files)
-if USING_MAC_INTERPOSE
libasan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/lsan/libsanitizer_lsan.la
-else
-libasan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/lsan/libsanitizer_lsan.la $(top_builddir)/interception/libinterception.la
+if !USING_MAC_INTERPOSE
+libasan_la_LIBADD += $(top_builddir)/interception/libinterception.la
+endif
+if LIBBACKTRACE_SUPPORTED
+libasan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la
endif
libasan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS)
@@ -12,4 +12,4 @@ int main() {
}
/* { dg-output "heap-use-after-free.*(\n|\r\n|\r)" } */
-/* { dg-output " #0 0x\[0-9a-f\]+ \[(\]\[^/\]\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output " #0 0x\[0-9a-f\]+ \[(\]?\[^/\]\[^\n\r]*(\n|\r\n|\r)" } */