We have other --with-system-* flags for using pre-installed libraries,
but not for libbacktrace. It might not be *prudent* to use a
libbacktrace other than the in-tree one, but that doesn't mean we should
make it impossible to *try*.
For most consumers this just swaps a relative path for -lbacktrace.
libstdc++, however, normally compiles the sources itself with every
symbol renamed. Using a pre-built libbacktrace for it is therefore a
larger change, as it entails exposing those symbols downstream, where
they may conflict with a libbacktrace the program links for itself.
The libstdc++ renaming, now being optional, is simply implemented by
using the normal identifiers in libstdc++'s own source files, and then
applying the same renaming trick that was previously used only on the
vendored libbacktrace to libstdc++ itself.
Note: I see I am not actually allowed to modify libgo this way, since it
is itself vendored. (One vendored source tree referring to a another
vendored source tree it happens to be vendored alongside with? The
horror!) I am doing so anyway, on the assumption that this patch will
be discussed before it lands, and one email is simpler.
config/ChangeLog:
* libbacktrace.m4: New file.
gcc/ChangeLog:
* configure.ac: Use GCC_WITH_SYSTEM_LIBBACKTRACE and
GCC_CHECK_SYSTEM_LIBBACKTRACE, and substitute BACKTRACEINC,
LIBBACKTRACE and LIBBACKTRACE_DEP.
* Makefile.in (BACKTRACEINC, LIBBACKTRACE): Take from configure.
(LIBBACKTRACE_DEP): New variable.
(LIBDEPS): Depend on it rather than on LIBBACKTRACE, which may
name an installed library.
* aclocal.m4: Regenerate.
* configure: Regenerate.
libgfortran/ChangeLog:
* configure.ac: Use GCC_WITH_SYSTEM_LIBBACKTRACE and
GCC_CHECK_SYSTEM_LIBBACKTRACE, and define the SYSTEM_LIBBACKTRACE
conditional.
* Makefile.am (LIBBACKTRACE_LIB, LIBBACKTRACE_INCLUDE): New
variables.
(libgfortran_la_LDFLAGS, AM_CPPFLAGS): Use them.
* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* configure: Regenerate.
ChangeLog:
* libgo/configure.ac: Use GCC_WITH_SYSTEM_LIBBACKTRACE and
GCC_CHECK_SYSTEM_LIBBACKTRACE, and define the SYSTEM_LIBBACKTRACE
conditional.
* libgo/Makefile.am (LIBBACKTRACE_LIB, LIBBACKTRACE_INCLUDE): New
variables.
(libgo_libadd, AM_CFLAGS): Use them.
* libgo/Makefile.in: Regenerate.
* libgo/aclocal.m4: Regenerate.
* libgo/configure: Regenerate.
libphobos/ChangeLog:
* m4/druntime/libraries.m4 (DRUNTIME_LIBRARIES_BACKTRACE): Use
GCC_WITH_SYSTEM_LIBBACKTRACE and GCC_CHECK_SYSTEM_LIBBACKTRACE,
and select the library and include path accordingly.
* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* configure: Regenerate.
* libdruntime/Makefile.in: Regenerate.
* src/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
libstdc++-v3/ChangeLog:
* acinclude.m4 (GLIBCXX_ENABLE_BACKTRACE): Use
GCC_WITH_SYSTEM_LIBBACKTRACE and GCC_CHECK_SYSTEM_LIBBACKTRACE.
Skip the capability probes when an installed library is used, and
define the ENABLE_SYSTEM_BACKTRACE and ENABLE_VENDORED_BACKTRACE
conditionals.
* src/Makefile.am (backtrace_dir, backtrace_supported_h): Build
the in-tree copy only under ENABLE_VENDORED_BACKTRACE.
* src/c++23/Makefile.am (AM_CXXFLAGS): Include
backtrace-rename.h when building that copy, so that the caller is
renamed along with it.
* src/c++23/stacktrace.cc: Declare and call libbacktrace by its
ordinary names; the renaming is now applied by the build.
* src/experimental/Makefile.am (backtrace_lib): Name -lbacktrace
when an installed library is used.
(backtrace_dep): New variable, empty in that case.
(libstdc__exp_la_DEPENDENCIES): Use it.
* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* configure: Regenerate.
* doc/Makefile.in: Regenerate.
* include/Makefile.in: Regenerate.
* libsupc++/Makefile.in: Regenerate.
* po/Makefile.in: Regenerate.
* python/Makefile.in: Regenerate.
* src/Makefile.in: Regenerate.
* src/c++11/Makefile.in: Regenerate.
* src/c++17/Makefile.in: Regenerate.
* src/c++20/Makefile.in: Regenerate.
* src/c++23/Makefile.in: Regenerate.
* src/c++26/Makefile.in: Regenerate.
* src/c++98/Makefile.in: Regenerate.
* src/experimental/Makefile.in: Regenerate.
* src/filesystem/Makefile.in: Regenerate.
* src/libbacktrace/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
Signed-off-by: John Ericson <[email protected]>
---
config/libbacktrace.m4 | 37 +++++++++
gcc/Makefile.in | 10 ++-
gcc/aclocal.m4 | 1 +
gcc/configure | 52 ++++++++++++-
gcc/configure.ac | 15 ++++
libgfortran/Makefile.am | 16 +++-
libgfortran/Makefile.in | 14 +++-
libgfortran/aclocal.m4 | 1 +
libgfortran/configure | 51 +++++++++++-
libgfortran/configure.ac | 6 ++
libgo/Makefile.am | 12 ++-
libgo/Makefile.in | 25 +++---
libgo/aclocal.m4 | 1 +
libgo/configure | 51 +++++++++++-
libgo/configure.ac | 4 +
libgo/testsuite/Makefile.in | 1 +
libphobos/Makefile.in | 1 +
libphobos/aclocal.m4 | 1 +
libphobos/configure | 49 +++++++++++-
libphobos/libdruntime/Makefile.in | 1 +
libphobos/m4/druntime/libraries.m4 | 12 ++-
libphobos/src/Makefile.in | 1 +
libphobos/testsuite/Makefile.in | 1 +
libstdc++-v3/Makefile.in | 1 +
libstdc++-v3/acinclude.m4 | 27 +++++++
libstdc++-v3/aclocal.m4 | 1 +
libstdc++-v3/configure | 94 +++++++++++++++++++++--
libstdc++-v3/doc/Makefile.in | 1 +
libstdc++-v3/include/Makefile.in | 1 +
libstdc++-v3/libsupc++/Makefile.in | 1 +
libstdc++-v3/po/Makefile.in | 1 +
libstdc++-v3/python/Makefile.in | 1 +
libstdc++-v3/src/Makefile.am | 6 +-
libstdc++-v3/src/Makefile.in | 17 ++--
libstdc++-v3/src/c++11/Makefile.in | 1 +
libstdc++-v3/src/c++17/Makefile.in | 1 +
libstdc++-v3/src/c++20/Makefile.in | 1 +
libstdc++-v3/src/c++23/Makefile.am | 8 ++
libstdc++-v3/src/c++23/Makefile.in | 18 +++--
libstdc++-v3/src/c++23/stacktrace.cc | 24 +++---
libstdc++-v3/src/c++26/Makefile.in | 1 +
libstdc++-v3/src/c++98/Makefile.in | 1 +
libstdc++-v3/src/experimental/Makefile.am | 9 ++-
libstdc++-v3/src/experimental/Makefile.in | 11 ++-
libstdc++-v3/src/filesystem/Makefile.in | 1 +
libstdc++-v3/src/libbacktrace/Makefile.in | 1 +
libstdc++-v3/testsuite/Makefile.in | 1 +
47 files changed, 517 insertions(+), 75 deletions(-)
create mode 100644 config/libbacktrace.m4
diff --git a/config/libbacktrace.m4 b/config/libbacktrace.m4
new file mode 100644
index 00000000000..a8bfff4914b
--- /dev/null
+++ b/config/libbacktrace.m4
@@ -0,0 +1,37 @@
+dnl Copyright (C) 2026 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License. As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl Support for linking an installed libbacktrace rather than the copy that
+dnl lives in the GCC tree.
+AC_DEFUN([GCC_WITH_SYSTEM_LIBBACKTRACE], [
+ AC_ARG_WITH([system-libbacktrace],
+ AS_HELP_STRING([--with-system-libbacktrace],
+ [link an installed libbacktrace instead of the copy in the GCC tree]),
+ [with_system_libbacktrace=$withval],
+ [with_system_libbacktrace=no])
+
+ dnl No e.g. paths supported at this time, just yes or no.
+ case "$with_system_libbacktrace" in
+ yes|no) ;;
+ *) AC_MSG_ERROR([--with-system-libbacktrace does not take an argument]) ;;
+ esac
+])
+
+dnl Insist the installed library is really there, so that its absence is
+dnl reported here rather than as an undefined reference at the end of a build.
+dnl
+dnl Separate from the option itself, because a component may not know whether
+dnl it needs libbacktrace at the point the option is parsed: libstdc++
+dnl resolves --enable-libstdcxx-backtrace=auto much later, and should
+dnl not demand a library it has decided *not* to use.
+AC_DEFUN([GCC_CHECK_SYSTEM_LIBBACKTRACE], [
+ AC_REQUIRE([GCC_WITH_SYSTEM_LIBBACKTRACE])
+ if test "x$with_system_libbacktrace" = xyes; then
+ AC_CHECK_HEADER([backtrace.h], [],
+ [AC_MSG_ERROR([--with-system-libbacktrace given, but backtrace.h not
found])])
+ fi
+])
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index ce5894767fe..efcd6dffd55 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -455,9 +455,11 @@ DECNUMINC = -I$(DECNUM) -I$(DECNUMFMT) -I../libdecnumber
LIBDECNUMBER = ../libdecnumber/libdecnumber.a
# The backtrace library.
-BACKTRACE = $(srcdir)/../libbacktrace
-BACKTRACEINC = -I$(BACKTRACE)
-LIBBACKTRACE = ../libbacktrace/.libs/libbacktrace.a
+# With --with-system-libbacktrace these come from configure as -lbacktrace
+# and the ordinary header path, and LIBBACKTRACE_DEP is empty.
+BACKTRACEINC = @BACKTRACEINC@
+LIBBACKTRACE = @LIBBACKTRACE@
+LIBBACKTRACE_DEP = @LIBBACKTRACE_DEP@
# Target to use when installing include directory. Either
# install-headers-tar, install-headers-cpio or install-headers-cp.
@@ -1149,7 +1151,7 @@ endif
# constructed with a ./ prefix, which GNU Make removes while processing
# prerequisites, so we need to strip it off.
LIBDEPS= libcommon.a $(CPPLIB) $(LIBIBERTY) $(LIBICONV_DEP) $(LIBDECNUMBER) \
- $(LIBBACKTRACE) $(LIBINTL_DEP:./%=%)
+ $(LIBBACKTRACE_DEP) $(LIBINTL_DEP:./%=%)
# Likewise, for use in the tools that must run on this machine
# even if we are cross-building GCC.
diff --git a/gcc/aclocal.m4 b/gcc/aclocal.m4
index e44fc5fb2ab..3dc9320c6d7 100644
--- a/gcc/aclocal.m4
+++ b/gcc/aclocal.m4
@@ -84,6 +84,7 @@ m4_include([../config/lead-dot.m4])
m4_include([../config/lib-ld.m4])
m4_include([../config/lib-link.m4])
m4_include([../config/lib-prefix.m4])
+m4_include([../config/libbacktrace.m4])
m4_include([../config/mmap.m4])
m4_include([../config/nls.m4])
m4_include([../config/override.m4])
diff --git a/gcc/configure b/gcc/configure
index f8501781474..0375079933e 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -878,6 +878,9 @@ c_strict_warn
strict_warn
c_loose_warn
loose_warn
+LIBBACKTRACE_DEP
+LIBBACKTRACE
+BACKTRACEINC
CPP
EGREP
GREP
@@ -977,6 +980,7 @@ with_dsymutil
with_as
with_windres
enable_largefile
+with_system_libbacktrace
enable_build_format_warnings
enable_werror_always
enable_checking
@@ -1875,6 +1879,9 @@ Optional Packages:
pathname)
--with-as arrange to use the specified as (full pathname)
--with-windres arrange to use the specified windres (full pathname)
+ --with-system-libbacktrace
+ link an installed libbacktrace instead of the copy
+ in the GCC tree
--with-stack-clash-protection-guard-size=size
Set the default stack clash protection guard size
for specific targets as a power of two in bytes.
@@ -7025,6 +7032,47 @@ fi
+
+
+
+# Check whether --with-system-libbacktrace was given.
+if test "${with_system_libbacktrace+set}" = set; then :
+ withval=$with_system_libbacktrace; with_system_libbacktrace=$withval
+else
+ with_system_libbacktrace=no
+fi
+
+
+ case "$with_system_libbacktrace" in
+ yes|no) ;;
+ *) as_fn_error $? "--with-system-libbacktrace does not take an argument"
"$LINENO" 5 ;;
+ esac
+
+
+
+ if test "x$with_system_libbacktrace" = xyes; then
+ ac_fn_cxx_check_header_mongrel "$LINENO" "backtrace.h"
"ac_cv_header_backtrace_h" "$ac_includes_default"
+if test "x$ac_cv_header_backtrace_h" = xyes; then :
+
+else
+ as_fn_error $? "--with-system-libbacktrace given, but backtrace.h not found"
"$LINENO" 5
+fi
+
+
+ fi
+
+if test "x$with_system_libbacktrace" = xyes; then
+ BACKTRACEINC=
+ LIBBACKTRACE=-lbacktrace
+ LIBBACKTRACE_DEP=
+else
+ BACKTRACEINC='-I$(srcdir)/../libbacktrace'
+ LIBBACKTRACE='../libbacktrace/.libs/libbacktrace.a'
+ LIBBACKTRACE_DEP='$(LIBBACKTRACE)'
+fi
+
+
+
if test x"$ac_cv_c_uint64_t" = x"no" -o x"$ac_cv_c_int64_t" = x"no"; then
as_fn_error $? "uint64_t or int64_t not found" "$LINENO" 5
fi
@@ -21921,7 +21969,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 21924 "configure"
+#line 21972 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -22027,7 +22075,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 22030 "configure"
+#line 22078 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 1773706e70a..646452011b6 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -525,6 +525,21 @@ AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)])
GCC_STDINT_TYPES
+
+GCC_WITH_SYSTEM_LIBBACKTRACE
+GCC_CHECK_SYSTEM_LIBBACKTRACE
+if test "x$with_system_libbacktrace" = xyes; then
+ BACKTRACEINC=
+ LIBBACKTRACE=-lbacktrace
+ LIBBACKTRACE_DEP=
+else
+ BACKTRACEINC='-I$(srcdir)/../libbacktrace'
+ LIBBACKTRACE='../libbacktrace/.libs/libbacktrace.a'
+ LIBBACKTRACE_DEP='$(LIBBACKTRACE)'
+fi
+AC_SUBST(BACKTRACEINC)
+AC_SUBST(LIBBACKTRACE)
+AC_SUBST(LIBBACKTRACE_DEP)
if test x"$ac_cv_c_uint64_t" = x"no" -o x"$ac_cv_c_int64_t" = x"no"; then
AC_MSG_ERROR([uint64_t or int64_t not found])
fi
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index e88c88d9e00..e84082793fc 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -48,11 +48,21 @@ gfor_cdir =
$(libdir)/gcc/$(target_alias)/$(gcc_version)/include
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \
$(lt_host_flags)
+if SYSTEM_LIBBACKTRACE
+LIBBACKTRACE_LIB = -lbacktrace
+LIBBACKTRACE_INCLUDE =
+else
+LIBBACKTRACE_LIB = ../libbacktrace/libbacktrace.la
+LIBBACKTRACE_INCLUDE = -I$(srcdir)/$(MULTISRCTOP)../libbacktrace \
+ -I$(MULTIBUILDTOP)../libbacktrace \
+ -I../libbacktrace
+endif
+
toolexeclib_LTLIBRARIES = libgfortran.la
toolexeclib_DATA = libgfortran.spec
libgfortran_la_LINK = $(LINK) $(libgfortran_la_LDFLAGS)
libgfortran_la_LDFLAGS = -version-info `grep -v '^\#'
$(srcdir)/libtool-version` \
- $(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \
+ $(LTLDFLAGS) $(LIBQUADLIB) $(LIBBACKTRACE_LIB) \
$(HWCAP_LDFLAGS) \
$(LIBM) $(extra_darwin_ldflags_libgfortran) \
$(version_arg) -Wc,-shared-libgcc
@@ -98,9 +108,7 @@ AM_CPPFLAGS = -iquote$(srcdir)/io
-I$(srcdir)/$(MULTISRCTOP)../gcc \
-I$(MULTIBUILDTOP)../../$(host_subdir)/gcc \
-I$(srcdir)/$(MULTISRCTOP)../libgcc \
-I$(MULTIBUILDTOP)../libgcc \
- -I$(srcdir)/$(MULTISRCTOP)../libbacktrace \
- -I$(MULTIBUILDTOP)../libbacktrace \
- -I../libbacktrace
+ $(LIBBACKTRACE_INCLUDE)
# Fortran rules for complex multiplication and division
AM_CFLAGS += -fcx-fortran-rules
diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index 8564b7de675..bf076af7130 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -166,6 +166,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/ax_pthread.m4
\
$(top_srcdir)/../config/gcc-plugin.m4 \
$(top_srcdir)/../config/hwcaps.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/override.m4 \
@@ -981,11 +982,18 @@ gfor_cdir =
$(libdir)/gcc/$(target_alias)/$(gcc_version)/include
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS)) \
$(lt_host_flags)
+@SYSTEM_LIBBACKTRACE_FALSE@LIBBACKTRACE_LIB = ../libbacktrace/libbacktrace.la
+@SYSTEM_LIBBACKTRACE_TRUE@LIBBACKTRACE_LIB = -lbacktrace
+@SYSTEM_LIBBACKTRACE_FALSE@LIBBACKTRACE_INCLUDE =
-I$(srcdir)/$(MULTISRCTOP)../libbacktrace \
+@SYSTEM_LIBBACKTRACE_FALSE@ -I$(MULTIBUILDTOP)../libbacktrace \
+@SYSTEM_LIBBACKTRACE_FALSE@ -I../libbacktrace
+
+@SYSTEM_LIBBACKTRACE_TRUE@LIBBACKTRACE_INCLUDE =
toolexeclib_LTLIBRARIES = libgfortran.la
toolexeclib_DATA = libgfortran.spec
libgfortran_la_LINK = $(LINK) $(libgfortran_la_LDFLAGS)
libgfortran_la_LDFLAGS = -version-info `grep -v '^\#'
$(srcdir)/libtool-version` \
- $(LTLDFLAGS) $(LIBQUADLIB) ../libbacktrace/libbacktrace.la \
+ $(LTLDFLAGS) $(LIBQUADLIB) $(LIBBACKTRACE_LIB) \
$(HWCAP_LDFLAGS) \
$(LIBM) $(extra_darwin_ldflags_libgfortran) \
$(version_arg) -Wc,-shared-libgcc
@@ -1021,9 +1029,7 @@ AM_CPPFLAGS = -iquote$(srcdir)/io
-I$(srcdir)/$(MULTISRCTOP)../gcc \
-I$(MULTIBUILDTOP)../../$(host_subdir)/gcc \
-I$(srcdir)/$(MULTISRCTOP)../libgcc \
-I$(MULTIBUILDTOP)../libgcc \
- -I$(srcdir)/$(MULTISRCTOP)../libbacktrace \
- -I$(MULTIBUILDTOP)../libbacktrace \
- -I../libbacktrace
+ $(LIBBACKTRACE_INCLUDE)
gfor_io_src = io/size_from_kind.c $(am__append_4)
gfor_io_headers = \
diff --git a/libgfortran/aclocal.m4 b/libgfortran/aclocal.m4
index c1e2f6dc502..713d72822e0 100644
--- a/libgfortran/aclocal.m4
+++ b/libgfortran/aclocal.m4
@@ -1173,6 +1173,7 @@ m4_include([../config/depstand.m4])
m4_include([../config/gcc-plugin.m4])
m4_include([../config/hwcaps.m4])
m4_include([../config/lead-dot.m4])
+m4_include([../config/libbacktrace.m4])
m4_include([../config/lthostflags.m4])
m4_include([../config/multi.m4])
m4_include([../config/override.m4])
diff --git a/libgfortran/configure b/libgfortran/configure
index 6d31fa11be2..dc77852c20d 100755
--- a/libgfortran/configure
+++ b/libgfortran/configure
@@ -704,6 +704,8 @@ HAVE_REAL_17_FALSE
HAVE_REAL_17_TRUE
toolexeclibdir
toolexecdir
+SYSTEM_LIBBACKTRACE_FALSE
+SYSTEM_LIBBACKTRACE_TRUE
EGREP
GREP
CPP
@@ -820,6 +822,7 @@ enable_maintainer_mode
enable_multilib
enable_dependency_tracking
with_toolexeclibdir
+with_system_libbacktrace
enable_cet
enable_symvers
with_gnu_ld
@@ -1497,6 +1500,9 @@ Optional Packages:
--with-toolexeclibdir=DIR
install libraries built with a cross compiler within
DIR
+ --with-system-libbacktrace
+ link an installed libbacktrace instead of the copy
+ in the GCC tree
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-pic try to use only PIC/non-PIC objects [default=use
both]
@@ -5186,6 +5192,43 @@ fi
+
+
+# Check whether --with-system-libbacktrace was given.
+if test "${with_system_libbacktrace+set}" = set; then :
+ withval=$with_system_libbacktrace; with_system_libbacktrace=$withval
+else
+ with_system_libbacktrace=no
+fi
+
+
+ case "$with_system_libbacktrace" in
+ yes|no) ;;
+ *) as_fn_error $? "--with-system-libbacktrace does not take an argument"
"$LINENO" 5 ;;
+ esac
+
+
+
+ if test "x$with_system_libbacktrace" = xyes; then
+ ac_fn_c_check_header_mongrel "$LINENO" "backtrace.h"
"ac_cv_header_backtrace_h" "$ac_includes_default"
+if test "x$ac_cv_header_backtrace_h" = xyes; then :
+
+else
+ as_fn_error $? "--with-system-libbacktrace given, but backtrace.h not found"
"$LINENO" 5
+fi
+
+
+ fi
+
+ if test "x$with_system_libbacktrace" = xyes; then
+ SYSTEM_LIBBACKTRACE_TRUE=
+ SYSTEM_LIBBACKTRACE_FALSE='#'
+else
+ SYSTEM_LIBBACKTRACE_TRUE='#'
+ SYSTEM_LIBBACKTRACE_FALSE=
+fi
+
+
# Calculate toolexeclibdir
# Also toolexecdir, though it's only used in toolexeclibdir
case ${version_specific_libs} in
@@ -13245,7 +13288,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 13248 "configure"
+#line 13291 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13351,7 +13394,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 13354 "configure"
+#line 13397 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -32919,6 +32962,10 @@ if test -z "${am__fastdepCC_TRUE}" && test -z
"${am__fastdepCC_FALSE}"; then
as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${SYSTEM_LIBBACKTRACE_TRUE}" && test -z
"${SYSTEM_LIBBACKTRACE_FALSE}"; then
+ as_fn_error $? "conditional \"SYSTEM_LIBBACKTRACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
index c5f84a031cd..ec333a43a3e 100644
--- a/libgfortran/configure.ac
+++ b/libgfortran/configure.ac
@@ -75,6 +75,12 @@ AC_USE_SYSTEM_EXTENSIONS
GCC_WITH_TOOLEXECLIBDIR
+GCC_WITH_SYSTEM_LIBBACKTRACE
+GCC_CHECK_SYSTEM_LIBBACKTRACE
+dnl This is separate from the top to because the other consumers of
+dnl those do not use an automake conditional like this.
+AM_CONDITIONAL(SYSTEM_LIBBACKTRACE, [test "x$with_system_libbacktrace" = xyes])
+
# Calculate toolexeclibdir
# Also toolexecdir, though it's only used in toolexeclibdir
case ${version_specific_libs} in
diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index d139d7818ec..1f4bd1c77de 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -46,10 +46,18 @@ AM_CPPFLAGS = -I $(srcdir)/runtime $(LIBFFIINCS)
$(PTHREAD_CFLAGS)
ACLOCAL_AMFLAGS = -I ./config -I ../config
+if SYSTEM_LIBBACKTRACE
+LIBBACKTRACE_LIB = -lbacktrace
+LIBBACKTRACE_INCLUDE =
+else
+LIBBACKTRACE_LIB = ../libbacktrace/libbacktrace.la
+LIBBACKTRACE_INCLUDE = -I $(srcdir)/../libbacktrace
+endif
+
AM_CFLAGS = -fexceptions -fnon-call-exceptions \
$(SPLIT_STACK) $(WARN_CFLAGS) \
$(STRINGOPS_FLAG) $(HWCAP_CFLAGS) $(OSCFLAGS) \
- -I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \
+ -I $(srcdir)/../libgcc $(LIBBACKTRACE_INCLUDE) \
-I $(MULTIBUILDTOP)../../gcc/include
AM_LDFLAGS =
@@ -841,7 +849,7 @@ libgo_ldflags = \
$(OSLDFLAGS)
libgo_libadd = \
- $(libgo_go_objs) ../libbacktrace/libbacktrace.la \
+ $(libgo_go_objs) $(LIBBACKTRACE_LIB) \
$(LIBATOMIC) $(LIBFFI) $(PTHREAD_LIBS) $(MATH_LIBS) $(NET_LIBS)
libgo_la_SOURCES = $(runtime_files)
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index 6e194d084da..9127544aa63 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -112,6 +112,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/../config/hwcaps.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/override.m4 \
$(top_srcdir)/../config/toolexeclibdir.m4 \
@@ -230,12 +231,14 @@ am__DEPENDENCIES_3 = $(addsuffix .lo,$(PACKAGES)) \
$(golangorg_x_net_route_lo) log/syslog/syslog_c.lo \
runtime/internal/atomic_c.lo sync/atomic_c.lo \
internal/cpu/cpu_gccgo.lo $(am__DEPENDENCIES_2)
-am__DEPENDENCIES_4 =
-am__DEPENDENCIES_5 = $(am__DEPENDENCIES_3) \
- ../libbacktrace/libbacktrace.la $(am__DEPENDENCIES_4) \
- $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_4) \
- $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_4)
-libgo_llgo_la_DEPENDENCIES = $(am__DEPENDENCIES_5)
+@SYSTEM_LIBBACKTRACE_FALSE@am__DEPENDENCIES_4 = \
+@SYSTEM_LIBBACKTRACE_FALSE@ ../libbacktrace/libbacktrace.la
+am__DEPENDENCIES_5 =
+am__DEPENDENCIES_6 = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) \
+ $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_5) \
+ $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_5) \
+ $(am__DEPENDENCIES_5)
+libgo_llgo_la_DEPENDENCIES = $(am__DEPENDENCIES_6)
@LIBGO_IS_LINUX_TRUE@@LIBGO_IS_X86_TRUE@am__objects_1 = \
@LIBGO_IS_LINUX_TRUE@@LIBGO_IS_X86_TRUE@ runtime/go-context.lo
am__objects_2 = $(am__objects_1)
@@ -265,7 +268,7 @@ libgo_llgo_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC
$(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libgo_llgo_la_LDFLAGS) $(LDFLAGS) -o $@
@GOC_IS_LLGO_TRUE@am_libgo_llgo_la_rpath = -rpath $(toolexeclibdir)
-libgo_la_DEPENDENCIES = $(am__DEPENDENCIES_5)
+libgo_la_DEPENDENCIES = $(am__DEPENDENCIES_6)
am_libgo_la_OBJECTS = $(am__objects_4)
libgo_la_OBJECTS = $(am_libgo_la_OBJECTS)
libgo_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -564,10 +567,14 @@ WARN_CFLAGS = $(WARN_FLAGS) $(WERROR)
# -I/-D flags to pass when compiling.
AM_CPPFLAGS = -I $(srcdir)/runtime $(LIBFFIINCS) $(PTHREAD_CFLAGS)
ACLOCAL_AMFLAGS = -I ./config -I ../config
+@SYSTEM_LIBBACKTRACE_FALSE@LIBBACKTRACE_LIB = ../libbacktrace/libbacktrace.la
+@SYSTEM_LIBBACKTRACE_TRUE@LIBBACKTRACE_LIB = -lbacktrace
+@SYSTEM_LIBBACKTRACE_FALSE@LIBBACKTRACE_INCLUDE = -I $(srcdir)/../libbacktrace
+@SYSTEM_LIBBACKTRACE_TRUE@LIBBACKTRACE_INCLUDE =
AM_CFLAGS = -fexceptions -fnon-call-exceptions \
$(SPLIT_STACK) $(WARN_CFLAGS) \
$(STRINGOPS_FLAG) $(HWCAP_CFLAGS) $(OSCFLAGS) \
- -I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \
+ -I $(srcdir)/../libgcc $(LIBBACKTRACE_INCLUDE) \
-I $(MULTIBUILDTOP)../../gcc/include
AM_LDFLAGS = $(am__append_1) $(am__append_2)
@@ -977,7 +984,7 @@ libgo_ldflags = \
$(OSLDFLAGS)
libgo_libadd = \
- $(libgo_go_objs) ../libbacktrace/libbacktrace.la \
+ $(libgo_go_objs) $(LIBBACKTRACE_LIB) \
$(LIBATOMIC) $(LIBFFI) $(PTHREAD_LIBS) $(MATH_LIBS) $(NET_LIBS)
libgo_la_SOURCES = $(runtime_files)
diff --git a/libgo/aclocal.m4 b/libgo/aclocal.m4
index 739b97a0275..aeee43c864a 100644
--- a/libgo/aclocal.m4
+++ b/libgo/aclocal.m4
@@ -1190,6 +1190,7 @@ AC_SUBST([am__untar])
m4_include([../config/depstand.m4])
m4_include([../config/hwcaps.m4])
m4_include([../config/lead-dot.m4])
+m4_include([../config/libbacktrace.m4])
m4_include([../config/multi.m4])
m4_include([../config/override.m4])
m4_include([../config/toolexeclibdir.m4])
diff --git a/libgo/configure b/libgo/configure
index fa290d43ba2..abc0f5ff002 100755
--- a/libgo/configure
+++ b/libgo/configure
@@ -634,6 +634,8 @@ am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
SYSROOT_CFLAGS_FOR_TARGET
+SYSTEM_LIBBACKTRACE_FALSE
+SYSTEM_LIBBACKTRACE_TRUE
HAVE_STATIC_LINK_FALSE
HAVE_STATIC_LINK_TRUE
HAVE_STAT_TIMESPEC_FALSE
@@ -860,6 +862,7 @@ with_toolexeclibdir
with_libffi
with_libatomic
with_system_libunwind
+with_system_libbacktrace
'
ac_precious_vars='build_alias
host_alias
@@ -1517,6 +1520,9 @@ Optional Packages:
--without-libffi don't use libffi
--without-libatomic don't use libatomic
--with-system-libunwind use installed libunwind
+ --with-system-libbacktrace
+ link an installed libbacktrace instead of the copy
+ in the GCC tree
Some influential environment variables:
CC C compiler command
@@ -11548,7 +11554,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11551 "configure"
+#line 11557 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11654,7 +11660,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11657 "configure"
+#line 11663 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -16179,6 +16185,43 @@ fi
+# Check whether --with-system-libbacktrace was given.
+if test "${with_system_libbacktrace+set}" = set; then :
+ withval=$with_system_libbacktrace; with_system_libbacktrace=$withval
+else
+ with_system_libbacktrace=no
+fi
+
+
+ case "$with_system_libbacktrace" in
+ yes|no) ;;
+ *) as_fn_error $? "--with-system-libbacktrace does not take an argument"
"$LINENO" 5 ;;
+ esac
+
+
+
+ if test "x$with_system_libbacktrace" = xyes; then
+ ac_fn_c_check_header_mongrel "$LINENO" "backtrace.h"
"ac_cv_header_backtrace_h" "$ac_includes_default"
+if test "x$ac_cv_header_backtrace_h" = xyes; then :
+
+else
+ as_fn_error $? "--with-system-libbacktrace given, but backtrace.h not found"
"$LINENO" 5
+fi
+
+
+ fi
+
+ if test "x$with_system_libbacktrace" = xyes; then
+ SYSTEM_LIBBACKTRACE_TRUE=
+ SYSTEM_LIBBACKTRACE_FALSE='#'
+else
+ SYSTEM_LIBBACKTRACE_TRUE='#'
+ SYSTEM_LIBBACKTRACE_FALSE=
+fi
+
+
+
+
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
@@ -16507,6 +16550,10 @@ if test -z "${HAVE_STATIC_LINK_TRUE}" && test -z
"${HAVE_STATIC_LINK_FALSE}"; th
as_fn_error $? "conditional \"HAVE_STATIC_LINK\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${SYSTEM_LIBBACKTRACE_TRUE}" && test -z
"${SYSTEM_LIBBACKTRACE_FALSE}"; then
+ as_fn_error $? "conditional \"SYSTEM_LIBBACKTRACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
diff --git a/libgo/configure.ac b/libgo/configure.ac
index 0004819d967..95e2688002b 100644
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -931,6 +931,10 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
LDFLAGS=$LDFLAGS_hold])
AM_CONDITIONAL(HAVE_STATIC_LINK, test "$libgo_cv_ld_static" = yes)
+GCC_WITH_SYSTEM_LIBBACKTRACE
+GCC_CHECK_SYSTEM_LIBBACKTRACE
+AM_CONDITIONAL(SYSTEM_LIBBACKTRACE, [test "x$with_system_libbacktrace" = xyes])
+
AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET)
AC_CACHE_SAVE
diff --git a/libgo/testsuite/Makefile.in b/libgo/testsuite/Makefile.in
index 0b5e7263dcc..d1bba0300a6 100644
--- a/libgo/testsuite/Makefile.in
+++ b/libgo/testsuite/Makefile.in
@@ -93,6 +93,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
$(top_srcdir)/../config/hwcaps.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/override.m4 \
$(top_srcdir)/../config/toolexeclibdir.m4 \
diff --git a/libphobos/Makefile.in b/libphobos/Makefile.in
index 207f66a12d5..15aac5d3182 100644
--- a/libphobos/Makefile.in
+++ b/libphobos/Makefile.in
@@ -113,6 +113,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/gcc-plugin.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/override.m4 \
$(top_srcdir)/../config/toolexeclibdir.m4 \
diff --git a/libphobos/aclocal.m4 b/libphobos/aclocal.m4
index 68326d0b285..2a8f6df1f0a 100644
--- a/libphobos/aclocal.m4
+++ b/libphobos/aclocal.m4
@@ -878,6 +878,7 @@ m4_include([../config/clang-plugin.m4])
m4_include([../config/enable.m4])
m4_include([../config/gcc-plugin.m4])
m4_include([../config/lead-dot.m4])
+m4_include([../config/libbacktrace.m4])
m4_include([../config/multi.m4])
m4_include([../config/override.m4])
m4_include([../config/toolexeclibdir.m4])
diff --git a/libphobos/configure b/libphobos/configure
index 25f2608fb72..10508aeb7c7 100755
--- a/libphobos/configure
+++ b/libphobos/configure
@@ -848,6 +848,7 @@ with_gcc_major_version_only
enable_werror
with_libatomic
with_libbacktrace
+with_system_libbacktrace
with_target_system_zlib
with_cross_host
enable_version_specific_runtime_libs
@@ -1521,6 +1522,9 @@ Optional Packages:
--without-libatomic Do not use libatomic in core.atomic (default: auto)
--without-libbacktrace Do not use libbacktrace in core.runtime (default:
auto)
+ --with-system-libbacktrace
+ link an installed libbacktrace instead of the copy
+ in the GCC tree
--with-target-system-zlib={yes,no,auto}
use installed libz (default: no)
--with-cross-host=HOST configuring with a cross compiler
@@ -12252,7 +12256,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12255 "configure"
+#line 12259 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12358,7 +12362,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12361 "configure"
+#line 12365 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -15582,12 +15586,49 @@ if test "${with_libbacktrace+set}" = set; then :
fi
+
+
+# Check whether --with-system-libbacktrace was given.
+if test "${with_system_libbacktrace+set}" = set; then :
+ withval=$with_system_libbacktrace; with_system_libbacktrace=$withval
+else
+ with_system_libbacktrace=no
+fi
+
+
+ case "$with_system_libbacktrace" in
+ yes|no) ;;
+ *) as_fn_error $? "--with-system-libbacktrace does not take an argument"
"$LINENO" 5 ;;
+ esac
+
+
if test "x$enable_libbacktrace" != "xno" && test "x$with_libbacktrace" !=
"xno"; then :
- LIBBACKTRACE=../../libbacktrace/libbacktrace.la
+
+
+ if test "x$with_system_libbacktrace" = xyes; then
+ ac_fn_c_check_header_mongrel "$LINENO" "backtrace.h"
"ac_cv_header_backtrace_h" "$ac_includes_default"
+if test "x$ac_cv_header_backtrace_h" = xyes; then :
+
+else
+ as_fn_error $? "--with-system-libbacktrace given, but backtrace.h not found"
"$LINENO" 5
+fi
+
+
+ fi
+
gdc_save_CPPFLAGS=$CPPFLAGS
- CPPFLAGS="$CPPFLAGS -I../libbacktrace "
+ if test "x$with_system_libbacktrace" = xyes; then :
+
+ LIBBACKTRACE=-lbacktrace
+
+else
+
+ LIBBACKTRACE=../../libbacktrace/libbacktrace.la
+ CPPFLAGS="$CPPFLAGS -I../libbacktrace "
+
+fi
ac_fn_c_check_header_mongrel "$LINENO" "backtrace-supported.h"
"ac_cv_header_backtrace_supported_h" "$ac_includes_default"
if test "x$ac_cv_header_backtrace_supported_h" = xyes; then :
diff --git a/libphobos/libdruntime/Makefile.in
b/libphobos/libdruntime/Makefile.in
index 1b5b4e6e826..3cc41131446 100644
--- a/libphobos/libdruntime/Makefile.in
+++ b/libphobos/libdruntime/Makefile.in
@@ -139,6 +139,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/gcc-plugin.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/override.m4 \
$(top_srcdir)/../config/toolexeclibdir.m4 \
diff --git a/libphobos/m4/druntime/libraries.m4
b/libphobos/m4/druntime/libraries.m4
index 8dd9c7da107..c002c837d85 100644
--- a/libphobos/m4/druntime/libraries.m4
+++ b/libphobos/m4/druntime/libraries.m4
@@ -145,11 +145,19 @@ AC_DEFUN([DRUNTIME_LIBRARIES_BACKTRACE],
AS_HELP_STRING([--without-libbacktrace],
[Do not use libbacktrace in core.runtime (default: auto)]))
+ GCC_WITH_SYSTEM_LIBBACKTRACE
+
AS_IF([test "x$enable_libbacktrace" != "xno" && test "x$with_libbacktrace"
!= "xno"], [
- LIBBACKTRACE=../../libbacktrace/libbacktrace.la
+ dnl Only here is it settled that the library is wanted at all.
+ GCC_CHECK_SYSTEM_LIBBACKTRACE
gdc_save_CPPFLAGS=$CPPFLAGS
- CPPFLAGS="$CPPFLAGS -I../libbacktrace "
+ AS_IF([test "x$with_system_libbacktrace" = xyes], [
+ LIBBACKTRACE=-lbacktrace
+ ], [
+ LIBBACKTRACE=../../libbacktrace/libbacktrace.la
+ CPPFLAGS="$CPPFLAGS -I../libbacktrace "
+ ])
AC_CHECK_HEADER(backtrace-supported.h, have_libbacktrace_h=true,
have_libbacktrace_h=false)
diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in
index c7dd55aac7b..1c7a33c8718 100644
--- a/libphobos/src/Makefile.in
+++ b/libphobos/src/Makefile.in
@@ -98,6 +98,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/gcc-plugin.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/override.m4 \
$(top_srcdir)/../config/toolexeclibdir.m4 \
diff --git a/libphobos/testsuite/Makefile.in b/libphobos/testsuite/Makefile.in
index 2f545f9d723..8d59d4135af 100644
--- a/libphobos/testsuite/Makefile.in
+++ b/libphobos/testsuite/Makefile.in
@@ -98,6 +98,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/gcc-plugin.m4 \
$(top_srcdir)/../config/lead-dot.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/override.m4 \
$(top_srcdir)/../config/toolexeclibdir.m4 \
diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in
index 915e9acbf2f..a4737cca65f 100644
--- a/libstdc++-v3/Makefile.in
+++ b/libstdc++-v3/Makefile.in
@@ -101,6 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4
index 8c44e618cb8..3cb74846db3 100644
--- a/libstdc++-v3/acinclude.m4
+++ b/libstdc++-v3/acinclude.m4
@@ -5250,6 +5250,10 @@ AC_DEFUN([GLIBCXX_ENABLE_BACKTRACE], [
[turns on libbacktrace support],
[permit yes|no|auto])
+ GCC_WITH_SYSTEM_LIBBACKTRACE
+
+ if test "x$with_system_libbacktrace" = xno; then
+
# Most of this is adapted from libsanitizer/configure.ac
BACKTRACE_CPPFLAGS="-D_GNU_SOURCE"
@@ -5425,6 +5429,8 @@ elf64) elfsize=64 ;;
esac
BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS -DBACKTRACE_ELF_SIZE=$elfsize"
+ fi
+
AC_MSG_CHECKING([whether to build libbacktrace support])
if test "$enable_libstdcxx_backtrace" = "auto"; then
case "$host" in
@@ -5436,6 +5442,14 @@ BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS
-DBACKTRACE_ELF_SIZE=$elfsize"
if test "$enable_libstdcxx_backtrace" = "yes"; then
BACKTRACE_SUPPORTED=1
+ if test "x$with_system_libbacktrace" = xyes; then
+
+ dnl Only here is it settled that the library is wanted at all; the option
+ dnl is parsed long before --enable-libstdcxx-backtrace=auto is resolved.
+ GCC_CHECK_SYSTEM_LIBBACKTRACE
+
+ else
+
AC_CHECK_HEADERS(sys/mman.h)
case "${host}" in
*-*-msdosdjgpp) # DJGPP has sys/man.h, but no mmap
@@ -5464,6 +5478,8 @@ BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS
-DBACKTRACE_ELF_SIZE=$elfsize"
BACKTRACE_USES_MALLOC=1
fi
+ fi
+
if test "$ac_has_gthreads" = "yes"; then
BACKTRACE_SUPPORTS_THREADS=1
else
@@ -5479,7 +5495,18 @@ BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS
-DBACKTRACE_ELF_SIZE=$elfsize"
BACKTRACE_USES_MALLOC=0
BACKTRACE_SUPPORTS_THREADS=0
fi
+ # Note that GLIBCXX_CONDITIONAL will define a variable regardless of
+ # shell control flow, this is why it is worth defining all 3 of these,
+ # rather than e.g. trying to define ENABLE_SYSTEM_BACKTRACE only if
+ # ENABLE_BACKTRACE was true.
GLIBCXX_CONDITIONAL(ENABLE_BACKTRACE, [test "$enable_libstdcxx_backtrace" =
yes])
+ GLIBCXX_CONDITIONAL(ENABLE_SYSTEM_BACKTRACE,
+ [test "$enable_libstdcxx_backtrace" = yes \
+ && test "x$with_system_libbacktrace" = xyes])
+ dnl Use ../libbacktrace
+ GLIBCXX_CONDITIONAL(ENABLE_VENDORED_BACKTRACE,
+ [test "$enable_libstdcxx_backtrace" = yes \
+ && test "x$with_system_libbacktrace" = xno])
])
dnl
diff --git a/libstdc++-v3/aclocal.m4 b/libstdc++-v3/aclocal.m4
index 0a19b02bf07..d7041264552 100644
--- a/libstdc++-v3/aclocal.m4
+++ b/libstdc++-v3/aclocal.m4
@@ -863,6 +863,7 @@ m4_include([../config/lead-dot.m4])
m4_include([../config/lib-ld.m4])
m4_include([../config/lib-link.m4])
m4_include([../config/lib-prefix.m4])
+m4_include([../config/libbacktrace.m4])
m4_include([../config/lthostflags.m4])
m4_include([../config/multi.m4])
m4_include([../config/no-executables.m4])
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 577640fcb75..adcb261679f 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -678,6 +678,10 @@ BUILD_INFO_TRUE
USE_STATIC_TZDATA_FALSE
USE_STATIC_TZDATA_TRUE
EH_POOL_FLAGS
+ENABLE_VENDORED_BACKTRACE_FALSE
+ENABLE_VENDORED_BACKTRACE_TRUE
+ENABLE_SYSTEM_BACKTRACE_FALSE
+ENABLE_SYSTEM_BACKTRACE_TRUE
ENABLE_BACKTRACE_FALSE
ENABLE_BACKTRACE_TRUE
BACKTRACE_SUPPORTS_THREADS
@@ -968,6 +972,7 @@ with_default_libstdcxx_abi
enable_libstdcxx_threads
enable_libstdcxx_filesystem_ts
enable_libstdcxx_backtrace
+with_system_libbacktrace
enable_libstdcxx_static_eh_pool
with_libstdcxx_eh_pool_obj_count
with_libstdcxx_zoneinfo
@@ -1715,6 +1720,9 @@ Optional Packages:
--with-system-libunwind use installed libunwind
--with-default-libstdcxx-abi
set the std::string ABI to use by default
+ --with-system-libbacktrace
+ link an installed libbacktrace instead of the copy
+ in the GCC tree
--with-libstdcxx-eh-pool-obj-count
the number of exceptions that can be allocated from
the pool if malloc fails
@@ -12679,7 +12687,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12682 "configure"
+#line 12690 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12785,7 +12793,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12788 "configure"
+#line 12796 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -16475,7 +16483,7 @@ $as_echo "$glibcxx_cv_atomic_word" >&6; }
# Fake what AC_COMPILE_IFELSE does.
cat > conftest.$ac_ext << EOF
-#line 16478 "configure"
+#line 16486 "configure"
#include "atomic_word.h"
int main()
{
@@ -16622,7 +16630,7 @@ $as_echo "mutex" >&6; }
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 16625 "configure"
+#line 16633 "configure"
int main()
{
_Decimal32 d1;
@@ -16663,7 +16671,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 16666 "configure"
+#line 16674 "configure"
template<typename T1, typename T2>
struct same
{ typedef T2 type; };
@@ -53669,6 +53677,24 @@ fi
+
+
+# Check whether --with-system-libbacktrace was given.
+if test "${with_system_libbacktrace+set}" = set; then :
+ withval=$with_system_libbacktrace; with_system_libbacktrace=$withval
+else
+ with_system_libbacktrace=no
+fi
+
+
+ case "$with_system_libbacktrace" in
+ yes|no) ;;
+ *) as_fn_error $? "--with-system-libbacktrace does not take an argument"
"$LINENO" 5 ;;
+ esac
+
+
+ if test "x$with_system_libbacktrace" = xno; then
+
# Most of this is adapted from libsanitizer/configure.ac
BACKTRACE_CPPFLAGS="-D_GNU_SOURCE"
@@ -53737,7 +53763,7 @@ $as_echo "$glibcxx_cv_libbacktrace_atomics" >&6; }
CXXFLAGS='-O0 -S'
cat > conftest.$ac_ext << EOF
-#line 53740 "configure"
+#line 53766 "configure"
#include <stddef.h>
int main()
{
@@ -54017,6 +54043,8 @@ elf64) elfsize=64 ;;
esac
BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS -DBACKTRACE_ELF_SIZE=$elfsize"
+ fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build
libbacktrace support" >&5
$as_echo_n "checking whether to build libbacktrace support... " >&6; }
if test "$enable_libstdcxx_backtrace" = "auto"; then
@@ -54030,6 +54058,24 @@ $as_echo "$enable_libstdcxx_backtrace" >&6; }
if test "$enable_libstdcxx_backtrace" = "yes"; then
BACKTRACE_SUPPORTED=1
+ if test "x$with_system_libbacktrace" = xyes; then
+
+
+
+ if test "x$with_system_libbacktrace" = xyes; then
+ ac_fn_c_check_header_mongrel "$LINENO" "backtrace.h"
"ac_cv_header_backtrace_h" "$ac_includes_default"
+if test "x$ac_cv_header_backtrace_h" = xyes; then :
+
+else
+ as_fn_error $? "--with-system-libbacktrace given, but backtrace.h not found"
"$LINENO" 5
+fi
+
+
+ fi
+
+
+ else
+
for ac_header in sys/mman.h
do :
ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h"
"ac_cv_header_sys_mman_h" "$ac_includes_default"
@@ -54078,6 +54124,8 @@ rm -f conftest.err conftest.i conftest.$ac_ext
BACKTRACE_USES_MALLOC=1
fi
+ fi
+
if test "$ac_has_gthreads" = "yes"; then
BACKTRACE_SUPPORTS_THREADS=1
else
@@ -54095,6 +54143,12 @@ $as_echo "#define HAVE_STACKTRACE 1" >>confdefs.h
BACKTRACE_USES_MALLOC=0
BACKTRACE_SUPPORTS_THREADS=0
fi
+ # Note that GLIBCXX_CONDITIONAL will define a variable regardless of
+ # shell control flow, this is why it is worth defining all 3 of these,
+ # rather than e.g. trying to define ENABLE_SYSTEM_BACKTRACE only if
+ # ENABLE_BACKTRACE was true.
+
+
@@ -55742,6 +55796,26 @@ else
fi
+ if test "$enable_libstdcxx_backtrace" = yes \
+ && test "x$with_system_libbacktrace" = xyes; then
+ ENABLE_SYSTEM_BACKTRACE_TRUE=
+ ENABLE_SYSTEM_BACKTRACE_FALSE='#'
+else
+ ENABLE_SYSTEM_BACKTRACE_TRUE='#'
+ ENABLE_SYSTEM_BACKTRACE_FALSE=
+fi
+
+
+ if test "$enable_libstdcxx_backtrace" = yes \
+ && test "x$with_system_libbacktrace" = xno; then
+ ENABLE_VENDORED_BACKTRACE_TRUE=
+ ENABLE_VENDORED_BACKTRACE_FALSE='#'
+else
+ ENABLE_VENDORED_BACKTRACE_TRUE='#'
+ ENABLE_VENDORED_BACKTRACE_FALSE=
+fi
+
+
if test "${embed_zoneinfo}" = yes; then
USE_STATIC_TZDATA_TRUE=
USE_STATIC_TZDATA_FALSE='#'
@@ -56276,6 +56350,14 @@ if test -z "${ENABLE_BACKTRACE_TRUE}" && test -z
"${ENABLE_BACKTRACE_FALSE}"; th
as_fn_error $? "conditional \"ENABLE_BACKTRACE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_SYSTEM_BACKTRACE_TRUE}" && test -z
"${ENABLE_SYSTEM_BACKTRACE_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_SYSTEM_BACKTRACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_VENDORED_BACKTRACE_TRUE}" && test -z
"${ENABLE_VENDORED_BACKTRACE_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_VENDORED_BACKTRACE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${USE_STATIC_TZDATA_TRUE}" && test -z
"${USE_STATIC_TZDATA_FALSE}"; then
as_fn_error $? "conditional \"USE_STATIC_TZDATA\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/libstdc++-v3/doc/Makefile.in b/libstdc++-v3/doc/Makefile.in
index 39a6988d485..0f1a5387b5d 100644
--- a/libstdc++-v3/doc/Makefile.in
+++ b/libstdc++-v3/doc/Makefile.in
@@ -101,6 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index d081481293f..ce10a24b0a5 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -101,6 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/libsupc++/Makefile.in
b/libstdc++-v3/libsupc++/Makefile.in
index db5e83803d5..55071d8b67d 100644
--- a/libstdc++-v3/libsupc++/Makefile.in
+++ b/libstdc++-v3/libsupc++/Makefile.in
@@ -103,6 +103,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in
index 54d8eff693b..127bcb7e61a 100644
--- a/libstdc++-v3/po/Makefile.in
+++ b/libstdc++-v3/po/Makefile.in
@@ -101,6 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/python/Makefile.in b/libstdc++-v3/python/Makefile.in
index 105a3a64de2..2217a7616d1 100644
--- a/libstdc++-v3/python/Makefile.in
+++ b/libstdc++-v3/python/Makefile.in
@@ -102,6 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am
index 35a497a1588..b34c8fd9075 100644
--- a/libstdc++-v3/src/Makefile.am
+++ b/libstdc++-v3/src/Makefile.am
@@ -29,7 +29,7 @@ else
filesystem_dir =
endif
-if ENABLE_BACKTRACE
+if ENABLE_VENDORED_BACKTRACE
backtrace_dir = libbacktrace
else
backtrace_dir =
@@ -81,7 +81,7 @@ vpath % $(top_srcdir)/src/c++26
if ENABLE_FILESYSTEM_TS
vpath % $(top_srcdir)/src/filesystem
endif
-if ENABLE_BACKTRACE
+if ENABLE_VENDORED_BACKTRACE
vpath % $(top_srcdir)/src/libbacktrace
endif
vpath % $(top_srcdir)/src/experimental
@@ -431,7 +431,7 @@ stamp-debug: $(foreach dir,.
$(SUBDIRS),debug/$(dir)/Makefile)
.SECONDARY: $(foreach dir,. $(SUBDIRS),debug/$(dir)/Makefile)
-if ENABLE_BACKTRACE
+if ENABLE_VENDORED_BACKTRACE
backtrace_supported_h = $(backtrace_dir)/backtrace-supported.h
debug_backtrace_supported_h = debug/$(backtrace_supported_h)
$(debug_backtrace_supported_h): $(backtrace_supported_h) stamp-debug
diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in
index 811d0a5ce4a..f4676db6f3d 100644
--- a/libstdc++-v3/src/Makefile.in
+++ b/libstdc++-v3/src/Makefile.in
@@ -102,6 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
@@ -489,8 +490,8 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES) $(CPPFLAGS)
@ENABLE_FILESYSTEM_TS_FALSE@@GLIBCXX_HOSTED_TRUE@filesystem_dir =
@ENABLE_FILESYSTEM_TS_TRUE@@GLIBCXX_HOSTED_TRUE@filesystem_dir = filesystem
@GLIBCXX_HOSTED_FALSE@filesystem_dir =
-@ENABLE_BACKTRACE_FALSE@@GLIBCXX_HOSTED_TRUE@backtrace_dir =
-@ENABLE_BACKTRACE_TRUE@@GLIBCXX_HOSTED_TRUE@backtrace_dir = libbacktrace
+@ENABLE_VENDORED_BACKTRACE_FALSE@@GLIBCXX_HOSTED_TRUE@backtrace_dir =
+@ENABLE_VENDORED_BACKTRACE_TRUE@@GLIBCXX_HOSTED_TRUE@backtrace_dir =
libbacktrace
@GLIBCXX_HOSTED_FALSE@backtrace_dir =
@GLIBCXX_HOSTED_FALSE@experimental_dir =
@GLIBCXX_HOSTED_TRUE@experimental_dir = experimental
@@ -692,9 +693,9 @@ CXXLINK = \
@GLIBCXX_BUILD_DEBUG_TRUE@STAMP_INSTALL_DEBUG = install-debug
@GLIBCXX_BUILD_DEBUG_FALSE@CLEAN_DEBUG =
@GLIBCXX_BUILD_DEBUG_TRUE@CLEAN_DEBUG = debug
-@ENABLE_BACKTRACE_TRUE@backtrace_supported_h =
$(backtrace_dir)/backtrace-supported.h
-@ENABLE_BACKTRACE_FALSE@debug_backtrace_supported_h =
-@ENABLE_BACKTRACE_TRUE@debug_backtrace_supported_h =
debug/$(backtrace_supported_h)
+@ENABLE_VENDORED_BACKTRACE_TRUE@backtrace_supported_h =
$(backtrace_dir)/backtrace-supported.h
+@ENABLE_VENDORED_BACKTRACE_FALSE@debug_backtrace_supported_h =
+@ENABLE_VENDORED_BACKTRACE_TRUE@debug_backtrace_supported_h =
debug/$(backtrace_supported_h)
all: all-recursive
.SUFFIXES:
@@ -1031,7 +1032,7 @@ vpath % $(top_srcdir)/src/c++20
vpath % $(top_srcdir)/src/c++23
vpath % $(top_srcdir)/src/c++26
@ENABLE_FILESYSTEM_TS_TRUE@vpath % $(top_srcdir)/src/filesystem
-@ENABLE_BACKTRACE_TRUE@vpath % $(top_srcdir)/src/libbacktrace
+@ENABLE_VENDORED_BACKTRACE_TRUE@vpath % $(top_srcdir)/src/libbacktrace
vpath % $(top_srcdir)/src/experimental
@[email protected]: compatibility-ldbl.cc
@GLIBCXX_LDBL_COMPAT_TRUE@ $(LTCXXCOMPILE64) $(LONG_DOUBLE_COMPAT_FLAGS)
-c $<
@@ -1154,8 +1155,8 @@ stamp-debug: $(foreach dir,.
$(SUBDIRS),debug/$(dir)/Makefile)
date > stamp-debug;
.SECONDARY: $(foreach dir,. $(SUBDIRS),debug/$(dir)/Makefile)
-@ENABLE_BACKTRACE_TRUE@$(debug_backtrace_supported_h):
$(backtrace_supported_h) stamp-debug
-@ENABLE_BACKTRACE_TRUE@ cp $< $@
+@ENABLE_VENDORED_BACKTRACE_TRUE@$(debug_backtrace_supported_h):
$(backtrace_supported_h) stamp-debug
+@ENABLE_VENDORED_BACKTRACE_TRUE@ cp $< $@
build-debug: stamp-debug $(debug_backtrace_supported_h)
$(MAKE) -C debug CXXFLAGS='$(DEBUG_FLAGS)' \
diff --git a/libstdc++-v3/src/c++11/Makefile.in
b/libstdc++-v3/src/c++11/Makefile.in
index bd684bb4209..729dd90c7f7 100644
--- a/libstdc++-v3/src/c++11/Makefile.in
+++ b/libstdc++-v3/src/c++11/Makefile.in
@@ -102,6 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/src/c++17/Makefile.in
b/libstdc++-v3/src/c++17/Makefile.in
index 6dff0d9491d..e694945860d 100644
--- a/libstdc++-v3/src/c++17/Makefile.in
+++ b/libstdc++-v3/src/c++17/Makefile.in
@@ -102,6 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/src/c++20/Makefile.in
b/libstdc++-v3/src/c++20/Makefile.in
index 067419d2e48..cbd2e3c1bcf 100644
--- a/libstdc++-v3/src/c++20/Makefile.in
+++ b/libstdc++-v3/src/c++20/Makefile.in
@@ -102,6 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/src/c++23/Makefile.am
b/libstdc++-v3/src/c++23/Makefile.am
index 92691c502a9..8a8f676e469 100644
--- a/libstdc++-v3/src/c++23/Makefile.am
+++ b/libstdc++-v3/src/c++23/Makefile.am
@@ -141,6 +141,14 @@ AM_CXXFLAGS = \
$(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS) \
-fimplicit-templates
+if ENABLE_VENDORED_BACKTRACE
+# stacktrace.cc declares and calls libbacktrace's entry points by their
+# ordinary names. But when we build the vendored copy as part of this
+# library, we want to rename to avoid collisions downstream. Include
+# this header on ourselves, too, for this reason.
+AM_CXXFLAGS += -include $(top_srcdir)/src/libbacktrace/backtrace-rename.h
+endif
+
AM_MAKEFLAGS = \
"gxx_include_dir=$(gxx_include_dir)"
diff --git a/libstdc++-v3/src/c++23/Makefile.in
b/libstdc++-v3/src/c++23/Makefile.in
index 0ce93f812d2..d7f7cb7d2e0 100644
--- a/libstdc++-v3/src/c++23/Makefile.in
+++ b/libstdc++-v3/src/c++23/Makefile.in
@@ -90,6 +90,12 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
+
+# stacktrace.cc declares and calls libbacktrace's entry points by their
+# ordinary names. But when we build the vendored copy as part of this
+# library, we want to rename to avoid collisions downstream. Include
+# this header on ourselves, too, for this reason.
+@ENABLE_VENDORED_BACKTRACE_TRUE@am__append_1 = -include
$(top_srcdir)/src/libbacktrace/backtrace-rename.h
subdir = src/c++23
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
@@ -103,6 +109,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
@@ -491,13 +498,10 @@ MODULES_FLAGS = -isystem
${glibcxx_srcdir}/include/backward -fmodules \
# set this option because CONFIG_CXXFLAGS has to be after
# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
# as the occasion calls for it.
-AM_CXXFLAGS = \
- -std=gnu++23 \
- $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \
- $(XTEMPLATE_FLAGS) $(VTV_CXXFLAGS) \
- $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS) \
- -fimplicit-templates
-
+AM_CXXFLAGS = -std=gnu++23 $(glibcxx_lt_pic_flag) \
+ $(glibcxx_compiler_shared_flag) $(XTEMPLATE_FLAGS) \
+ $(VTV_CXXFLAGS) $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) \
+ $(CONFIG_CXXFLAGS) -fimplicit-templates $(am__append_1)
AM_MAKEFLAGS = \
"gxx_include_dir=$(gxx_include_dir)"
diff --git a/libstdc++-v3/src/c++23/stacktrace.cc
b/libstdc++-v3/src/c++23/stacktrace.cc
index 10cfa44e4f5..9628e6a1bdd 100644
--- a/libstdc++-v3/src/c++23/stacktrace.cc
+++ b/libstdc++-v3/src/c++23/stacktrace.cc
@@ -25,29 +25,29 @@
#include <cstdlib>
#ifdef __cpp_lib_stacktrace // C++ >= 23 && hosted && HAVE_STACKTRACE
-struct __glibcxx_backtrace_state;
+struct backtrace_state;
extern "C"
{
-__glibcxx_backtrace_state*
-__glibcxx_backtrace_create_state(const char*, int,
+backtrace_state*
+backtrace_create_state(const char*, int,
void(*)(void*, const char*, int),
void*);
int
-__glibcxx_backtrace_simple(__glibcxx_backtrace_state*, int,
+backtrace_simple(backtrace_state*, int,
int (*) (void*, __UINTPTR_TYPE__),
void(*)(void*, const char*, int),
void*);
int
-__glibcxx_backtrace_pcinfo(__glibcxx_backtrace_state*, __UINTPTR_TYPE__,
+backtrace_pcinfo(backtrace_state*, __UINTPTR_TYPE__,
int (*)(void*, __UINTPTR_TYPE__,
const char*, int, const char*),
void(*)(void*, const char*, int),
void*);
int
-__glibcxx_backtrace_syminfo(__glibcxx_backtrace_state*, __UINTPTR_TYPE__ addr,
+backtrace_syminfo(backtrace_state*, __UINTPTR_TYPE__ addr,
void (*) (void*, __UINTPTR_TYPE__, const char*,
__UINTPTR_TYPE__, __UINTPTR_TYPE__),
void(*)(void*, const char*, int),
@@ -83,14 +83,14 @@ namespace
err_handler(void*, const char*, int)
{ }
- __glibcxx_backtrace_state*
+ backtrace_state*
init()
{
#if __GTHREADS && ! defined(__cpp_threadsafe_static_init)
# warning "std::stacktrace initialization will not be thread-safe"
#endif
- static __glibcxx_backtrace_state* state
- = __glibcxx_backtrace_create_state(nullptr, 1, err_handler, nullptr);
+ static backtrace_state* state
+ = backtrace_create_state(nullptr, 1, err_handler, nullptr);
return state;
}
}
@@ -134,7 +134,7 @@ stacktrace_entry::_Info::_M_populate(native_handle_type pc)
return function != nullptr;
};
const auto state = init();
- if (::__glibcxx_backtrace_pcinfo(state, pc, +cb, err_handler, this))
+ if (::backtrace_pcinfo(state, pc, +cb, err_handler, this))
return true;
// If we get here then backtrace_pcinfo did not give us a function name.
@@ -146,7 +146,7 @@ stacktrace_entry::_Info::_M_populate(native_handle_type pc)
{
static_cast<_Info*>(self)->_M_set_desc(symname);
};
- if (::__glibcxx_backtrace_syminfo(state, pc, +cb2, err_handler, this))
+ if (::backtrace_syminfo(state, pc, +cb2, err_handler, this))
return true;
}
return false;
@@ -162,7 +162,7 @@ __stacktrace_impl::_S_current(int (*cb) (void*,
__UINTPTR_TYPE__), void* obj,
{
const auto state = init();
// skip+2 because we don't want this function or its caller to be included.
- int r = ::__glibcxx_backtrace_simple(state, skip + 2, cb, err_handler, obj);
+ int r = ::backtrace_simple(state, skip + 2, cb, err_handler, obj);
// Could also use this to prevent tail-call optim: __asm ("" : "+g" (r));
return r;
}
diff --git a/libstdc++-v3/src/c++26/Makefile.in
b/libstdc++-v3/src/c++26/Makefile.in
index 13c3a03b236..b75efc25736 100644
--- a/libstdc++-v3/src/c++26/Makefile.in
+++ b/libstdc++-v3/src/c++26/Makefile.in
@@ -102,6 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/src/c++98/Makefile.in
b/libstdc++-v3/src/c++98/Makefile.in
index c8df597f40d..353622ab039 100644
--- a/libstdc++-v3/src/c++98/Makefile.in
+++ b/libstdc++-v3/src/c++98/Makefile.in
@@ -102,6 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/src/experimental/Makefile.am
b/libstdc++-v3/src/experimental/Makefile.am
index bad10b40e21..ac4a60e202c 100644
--- a/libstdc++-v3/src/experimental/Makefile.am
+++ b/libstdc++-v3/src/experimental/Makefile.am
@@ -31,9 +31,16 @@ filesystem_lib =
endif
if ENABLE_BACKTRACE
+if ENABLE_SYSTEM_BACKTRACE
+backtrace_lib = -lbacktrace
+backtrace_dep =
+else
backtrace_lib = $(top_builddir)/src/libbacktrace/libstdc++_libbacktrace.la
+backtrace_dep = $(backtrace_lib)
+endif
else
backtrace_lib =
+backtrace_dep =
endif
headers =
@@ -59,7 +66,7 @@ libstdc__exp_la_LIBADD = \
libstdc__exp_la_DEPENDENCIES = \
$(top_builddir)/src/c++23/libc++23convenience.la \
$(top_builddir)/src/c++26/libc++26convenience.la \
- $(filesystem_lib) $(backtrace_lib)
+ $(filesystem_lib) $(backtrace_dep)
# AM_CXXFLAGS needs to be in each subdirectory so that it can be
# modified in a per-library or per-sub-library way. Need to manually
diff --git a/libstdc++-v3/src/experimental/Makefile.in
b/libstdc++-v3/src/experimental/Makefile.in
index a9248197f8c..e2ad644bed1 100644
--- a/libstdc++-v3/src/experimental/Makefile.in
+++ b/libstdc++-v3/src/experimental/Makefile.in
@@ -102,6 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
@@ -151,7 +152,7 @@ am__uninstall_files_from_dir = { \
am__installdirs = "$(DESTDIR)$(toolexeclibdir)"
LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
@ENABLE_FILESYSTEM_TS_TRUE@am__DEPENDENCIES_1 =
$(top_builddir)/src/filesystem/libstdc++fsconvenience.la
-@ENABLE_BACKTRACE_TRUE@am__DEPENDENCIES_2 =
$(top_builddir)/src/libbacktrace/libstdc++_libbacktrace.la
+@ENABLE_BACKTRACE_TRUE@@ENABLE_SYSTEM_BACKTRACE_FALSE@am__DEPENDENCIES_2 =
$(top_builddir)/src/libbacktrace/libstdc++_libbacktrace.la
am__objects_1 = contract26.lo
am_libstdc__exp_la_OBJECTS = $(am__objects_1)
libstdc__exp_la_OBJECTS = $(am_libstdc__exp_la_OBJECTS)
@@ -455,7 +456,11 @@ toolexeclib_LTLIBRARIES = libstdc++exp.la
@ENABLE_FILESYSTEM_TS_FALSE@filesystem_lib =
@ENABLE_FILESYSTEM_TS_TRUE@filesystem_lib =
$(top_builddir)/src/filesystem/libstdc++fsconvenience.la
@ENABLE_BACKTRACE_FALSE@backtrace_lib =
-@ENABLE_BACKTRACE_TRUE@backtrace_lib =
$(top_builddir)/src/libbacktrace/libstdc++_libbacktrace.la
+@ENABLE_BACKTRACE_TRUE@@ENABLE_SYSTEM_BACKTRACE_FALSE@backtrace_lib =
$(top_builddir)/src/libbacktrace/libstdc++_libbacktrace.la
+@ENABLE_BACKTRACE_TRUE@@ENABLE_SYSTEM_BACKTRACE_TRUE@backtrace_lib =
-lbacktrace
+@ENABLE_BACKTRACE_FALSE@backtrace_dep =
+@ENABLE_BACKTRACE_TRUE@@ENABLE_SYSTEM_BACKTRACE_FALSE@backtrace_dep =
$(backtrace_lib)
+@ENABLE_BACKTRACE_TRUE@@ENABLE_SYSTEM_BACKTRACE_TRUE@backtrace_dep =
headers =
sources = \
contract26.cc
@@ -469,7 +474,7 @@ libstdc__exp_la_LIBADD = \
libstdc__exp_la_DEPENDENCIES = \
$(top_builddir)/src/c++23/libc++23convenience.la \
$(top_builddir)/src/c++26/libc++26convenience.la \
- $(filesystem_lib) $(backtrace_lib)
+ $(filesystem_lib) $(backtrace_dep)
# AM_CXXFLAGS needs to be in each subdirectory so that it can be
diff --git a/libstdc++-v3/src/filesystem/Makefile.in
b/libstdc++-v3/src/filesystem/Makefile.in
index b138a079deb..8ef1bb76e07 100644
--- a/libstdc++-v3/src/filesystem/Makefile.in
+++ b/libstdc++-v3/src/filesystem/Makefile.in
@@ -102,6 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/src/libbacktrace/Makefile.in
b/libstdc++-v3/src/libbacktrace/Makefile.in
index 6ce97c43395..0a798157e5c 100644
--- a/libstdc++-v3/src/libbacktrace/Makefile.in
+++ b/libstdc++-v3/src/libbacktrace/Makefile.in
@@ -133,6 +133,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
diff --git a/libstdc++-v3/testsuite/Makefile.in
b/libstdc++-v3/testsuite/Makefile.in
index 3aed09d1049..49e6e4903c9 100644
--- a/libstdc++-v3/testsuite/Makefile.in
+++ b/libstdc++-v3/testsuite/Makefile.in
@@ -101,6 +101,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/lib-ld.m4 \
$(top_srcdir)/../config/lib-link.m4 \
$(top_srcdir)/../config/lib-prefix.m4 \
+ $(top_srcdir)/../config/libbacktrace.m4 \
$(top_srcdir)/../config/lthostflags.m4 \
$(top_srcdir)/../config/multi.m4 \
$(top_srcdir)/../config/no-executables.m4 \
--
2.54.0