[PATCH] Add --with-system-libbacktrace
John Ericson <[email protected]>
| Newsgroups | gmane.comp.gcc.patches |
|---|---|
| Message-ID | <[email protected]> |
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