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

Reply via email to