[gcc-13] libstdc++: Add Filesystem TS and std::stacktrace symbols to libstdc++exp.a

Message ID 20240109124340.3886305-1-jwakely@redhat.com
State Accepted
Headers
Series [gcc-13] libstdc++: Add Filesystem TS and std::stacktrace symbols to libstdc++exp.a |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Jonathan Wakely Jan. 9, 2024, 12:33 p.m. UTC
  I was talking to Matthias Klose about enabling libstdc++_libbacktrace.a
for Ubuntu's gcc package and I realised that it would be preferable if
the gcc-13 branch had those libbacktrace symbols in libstdc++exp.a. I
already did that for trunk with r14-3812-gb96b554592c5cb and trunk no
longer installs libstdc++_libbacktrace.a at all.

Removing libstdc++_libbacktrace.a for GCC 13.3 would be inappropriate
for a stable release branch, so this partial backport duplicates the
libstdc++_libbacktrace.a symbols in libstdc++exp.a but still installs
libstdc++_libbacktrace.a as well.  This gives users a smoother
transition from GCC 13 to GCC 14. They can continue using
-lstdc++_libbacktrace with GCC 13, or they can switch to
-lstdc++exp now and be ready for GCC 14.

Any objections?

Tested x86_64-linux.

If I push this I'll also add a 13.3 section to the bottom of
https://gcc.gnu.org/gcc-13/changes.html#13.2 documenting it.

-- >8 --

This consolidates the three static archives for extensions into one, so
that -lstdc++exp can be used to provide the definitions of all unstable
library features.

For this gcc-13 backport libstdc++_libbacktrace.a is still installed,
but its contents are duplicated in libstdc++exp.a. This means that users
can start using -lstdc++exp with GCC 13.3 if they want, but existing
Makefiles can continue to use -lstdc++_libbacktrace for any GCC 13.x
release.

The libstdc++fs.a archive is still installed, but its contents are
duplicated in libstdc++exp.a now. This means -lstdc++exp can be used
instead of -lstdc++fs. For targets using the GNU linker we should
consider replacing libstdc++fs.a with a linker script that does
INPUT(libstdc++exp.a).

The tests for <experimental/filesystem> could be changed to use
-lstdc++exp instead of -lstdc++fs, which would allow removing
src/filesystem/.libs from the LDFLAGS in scripts/testsuite_flags.in,
but that can be done at a later date.

libstdc++-v3/ChangeLog:

	* doc/html/manual/*: Regenerate.
	* doc/xml/manual/using.xml: Update documentation on linking.
	* scripts/testsuite_flags.in: Adjust LDFLAGS to find
	libstdc++exp instead of libstdc++_libbacktrace.
	* src/c++20/Makefile.am: Fix comment.
	* src/c++20/Makefile.in: Regenerate.
	* src/experimental/Makefile.am: Use LIBADD to include other
	libraries.
	* src/experimental/Makefile.in: Regenerate.
	* testsuite/19_diagnostics/stacktrace/current.cc: Adjust
	dg-options to use -lstdc++exp.
	* testsuite/19_diagnostics/stacktrace/entry.cc: Likewise.
	* testsuite/19_diagnostics/stacktrace/stacktrace.cc: Likewise.
	* testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc:
	Likewise.

(cherry picked from commit b96b554592c5cbb6a2c1797ffcb5706fd295f4fd)
---
 libstdc++-v3/doc/html/manual/using.html       | 26 +++++++------
 .../html/manual/using_dynamic_or_shared.html  |  4 ++
 libstdc++-v3/doc/xml/manual/using.xml         | 37 ++++++++++---------
 libstdc++-v3/scripts/testsuite_flags.in       |  8 ++--
 libstdc++-v3/src/c++20/Makefile.am            |  2 +-
 libstdc++-v3/src/c++20/Makefile.in            |  2 +-
 libstdc++-v3/src/experimental/Makefile.am     | 18 +++++++++
 libstdc++-v3/src/experimental/Makefile.in     | 13 ++++++-
 .../19_diagnostics/stacktrace/current.cc      |  2 +-
 .../19_diagnostics/stacktrace/entry.cc        |  2 +-
 .../19_diagnostics/stacktrace/stacktrace.cc   |  2 +-
 .../vector/debug/assign4_backtrace_neg.cc     |  2 +-
 12 files changed, 77 insertions(+), 41 deletions(-)
  

Comments

Jonathan Wakely Feb. 2, 2024, 12:29 p.m. UTC | #1
On Tue, 9 Jan 2024 at 12:44, Jonathan Wakely <jwakely@redhat.com> wrote:
>
> I was talking to Matthias Klose about enabling libstdc++_libbacktrace.a
> for Ubuntu's gcc package and I realised that it would be preferable if
> the gcc-13 branch had those libbacktrace symbols in libstdc++exp.a. I
> already did that for trunk with r14-3812-gb96b554592c5cb and trunk no
> longer installs libstdc++_libbacktrace.a at all.
>
> Removing libstdc++_libbacktrace.a for GCC 13.3 would be inappropriate
> for a stable release branch, so this partial backport duplicates the
> libstdc++_libbacktrace.a symbols in libstdc++exp.a but still installs
> libstdc++_libbacktrace.a as well.  This gives users a smoother
> transition from GCC 13 to GCC 14. They can continue using
> -lstdc++_libbacktrace with GCC 13, or they can switch to
> -lstdc++exp now and be ready for GCC 14.

This didn't actually work though, see
https://gcc.gnu.org/pipermail/gcc-patches/2024-February/644822.html
for the explanation and fix, which I'll backport to gcc-13.

>
> Any objections?
>
> Tested x86_64-linux.
>
> If I push this I'll also add a 13.3 section to the bottom of
> https://gcc.gnu.org/gcc-13/changes.html#13.2 documenting it.
>
> -- >8 --
>
> This consolidates the three static archives for extensions into one, so
> that -lstdc++exp can be used to provide the definitions of all unstable
> library features.
>
> For this gcc-13 backport libstdc++_libbacktrace.a is still installed,
> but its contents are duplicated in libstdc++exp.a. This means that users
> can start using -lstdc++exp with GCC 13.3 if they want, but existing
> Makefiles can continue to use -lstdc++_libbacktrace for any GCC 13.x
> release.
>
> The libstdc++fs.a archive is still installed, but its contents are
> duplicated in libstdc++exp.a now. This means -lstdc++exp can be used
> instead of -lstdc++fs. For targets using the GNU linker we should
> consider replacing libstdc++fs.a with a linker script that does
> INPUT(libstdc++exp.a).
>
> The tests for <experimental/filesystem> could be changed to use
> -lstdc++exp instead of -lstdc++fs, which would allow removing
> src/filesystem/.libs from the LDFLAGS in scripts/testsuite_flags.in,
> but that can be done at a later date.
>
> libstdc++-v3/ChangeLog:
>
>         * doc/html/manual/*: Regenerate.
>         * doc/xml/manual/using.xml: Update documentation on linking.
>         * scripts/testsuite_flags.in: Adjust LDFLAGS to find
>         libstdc++exp instead of libstdc++_libbacktrace.
>         * src/c++20/Makefile.am: Fix comment.
>         * src/c++20/Makefile.in: Regenerate.
>         * src/experimental/Makefile.am: Use LIBADD to include other
>         libraries.
>         * src/experimental/Makefile.in: Regenerate.
>         * testsuite/19_diagnostics/stacktrace/current.cc: Adjust
>         dg-options to use -lstdc++exp.
>         * testsuite/19_diagnostics/stacktrace/entry.cc: Likewise.
>         * testsuite/19_diagnostics/stacktrace/stacktrace.cc: Likewise.
>         * testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc:
>         Likewise.
>
> (cherry picked from commit b96b554592c5cbb6a2c1797ffcb5706fd295f4fd)
> ---
>  libstdc++-v3/doc/html/manual/using.html       | 26 +++++++------
>  .../html/manual/using_dynamic_or_shared.html  |  4 ++
>  libstdc++-v3/doc/xml/manual/using.xml         | 37 ++++++++++---------
>  libstdc++-v3/scripts/testsuite_flags.in       |  8 ++--
>  libstdc++-v3/src/c++20/Makefile.am            |  2 +-
>  libstdc++-v3/src/c++20/Makefile.in            |  2 +-
>  libstdc++-v3/src/experimental/Makefile.am     | 18 +++++++++
>  libstdc++-v3/src/experimental/Makefile.in     | 13 ++++++-
>  .../19_diagnostics/stacktrace/current.cc      |  2 +-
>  .../19_diagnostics/stacktrace/entry.cc        |  2 +-
>  .../19_diagnostics/stacktrace/stacktrace.cc   |  2 +-
>  .../vector/debug/assign4_backtrace_neg.cc     |  2 +-
>  12 files changed, 77 insertions(+), 41 deletions(-)
>
> diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml
> index 3a507fc1671..7276cad0feb 100644
> --- a/libstdc++-v3/doc/xml/manual/using.xml
> +++ b/libstdc++-v3/doc/xml/manual/using.xml
> @@ -100,30 +100,27 @@
>        </entry>
>      </row>
>
> -    <row>
> -      <entry><literal>-lstdc++fs</literal></entry>
> -      <entry>Linking to <filename class="libraryfile">libstdc++fs</filename>
> -        is required for use of the Filesystem library extensions in
> -        <filename class="headerfile">&lt;experimental/filesystem&gt;</filename>.
> -      </entry>
> -    </row>
> -
>      <row>
>        <entry><literal>-lstdc++exp</literal></entry>
> -      <entry>Linking to <filename class="libraryfile">libstdc++exp</filename>
> -        is required for use of the C++ Contracts extensions enabled by
> -        <literal>-fcontracts</literal>.
> +      <entry>Linking to <filename class="libraryfile">libstdc++exp.a</filename>
> +        is required for use of experimental C++ library features.
> +        This currently provides support for the C++23 types defined in the
> +        <filename class="headerfile">&lt;stacktrace&gt;</filename> header,
> +        the Filesystem library extensions defined in the
> +        <filename class="headerfile">&lt;experimental/filesystem&gt;</filename>
> +        header,
> +        and the Contracts extensions enabled by <literal>-fcontracts</literal>.
>        </entry>
>      </row>
>
>      <row>
> -      <entry><literal>-lstdc++_libbacktrace</literal></entry>
> -      <entry>Until C++23 support is non-experimental, linking to
> -       <filename class="libraryfile">libstdc++_libbacktrace.a</filename>
> -       is required for use of the C++23 type
> -       <classname>std::stacktrace</classname>
> -       and related types in
> -       <filename class="headerfile">&lt;stacktrace&gt;</filename>.
> +      <entry><literal>-lstdc++fs</literal></entry>
> +      <entry>Linking to <filename class="libraryfile">libstdc++fs.a</filename>
> +        is another way to use the Filesystem library extensions defined in the
> +        <filename class="headerfile">&lt;experimental/filesystem&gt;</filename>
> +        header.
> +        The <filename class="libraryfile">libstdc++exp.a</filename> library
> +        also provides all the symbols contained in this library.
>        </entry>
>      </row>
>
> @@ -1710,6 +1707,10 @@ A quick read of the relevant part of the GCC
>        and link with <option>-lstdc++fs</option>. The library implementation
>        is incomplete on non-POSIX platforms, specifically Windows is only
>        partially supported.
> +      Since GCC 14, <filename class="libraryfile">libstdc++exp.a</filename>
> +      also contains the definitions for this library,
> +      so <option>-lstdc++exp</option> can be used instead of
> +      <option>-lstdc++fs</option>.
>      </para>
>
>      <para>
> diff --git a/libstdc++-v3/scripts/testsuite_flags.in b/libstdc++-v3/scripts/testsuite_flags.in
> index 18748f0f9ce..8bf4918287a 100755
> --- a/libstdc++-v3/scripts/testsuite_flags.in
> +++ b/libstdc++-v3/scripts/testsuite_flags.in
> @@ -78,14 +78,14 @@ case ${query} in
>        ;;
>      --cxxldflags)
>        FS_LDFLAGS=
> -      BT_LDFLAGS=
> +      EXP_LDFLAGS=
>        if [ -d ${BUILD_DIR}/src/filesystem/.libs ]; then
>          FS_LDFLAGS=-L${BUILD_DIR}/src/filesystem/.libs
>        fi
> -      if [ -d ${BUILD_DIR}/src/libbacktrace/.libs ]; then
> -        BT_LDFLAGS=-L${BUILD_DIR}/src/libbacktrace/.libs
> +      if [ -d ${BUILD_DIR}/src/experimental/.libs ]; then
> +        EXP_LDFLAGS=-L${BUILD_DIR}/src/experimental/.libs
>        fi
> -      SECTIONLDFLAGS="@SECTION_LDFLAGS@ @LIBICONV@ $FS_LDFLAGS $BT_LDFLAGS"
> +      SECTIONLDFLAGS="@SECTION_LDFLAGS@ @LIBICONV@ $FS_LDFLAGS $EXP_LDFLAGS"
>        echo ${SECTIONLDFLAGS}
>        ;;
>      *)
> diff --git a/libstdc++-v3/src/c++20/Makefile.am b/libstdc++-v3/src/c++20/Makefile.am
> index 0bc8a7b832a..e947855e6ae 100644
> --- a/libstdc++-v3/src/c++20/Makefile.am
> +++ b/libstdc++-v3/src/c++20/Makefile.am
> @@ -22,7 +22,7 @@
>
>  include $(top_srcdir)/fragment.am
>
> -# Convenience library for C++17 runtime.
> +# Convenience library for C++20 runtime.
>  noinst_LTLIBRARIES = libc++20convenience.la
>
>  headers =
> diff --git a/libstdc++-v3/src/experimental/Makefile.am b/libstdc++-v3/src/experimental/Makefile.am
> index 3b962e7d804..1c7cea7e846 100644
> --- a/libstdc++-v3/src/experimental/Makefile.am
> +++ b/libstdc++-v3/src/experimental/Makefile.am
> @@ -24,6 +24,18 @@ include $(top_srcdir)/fragment.am
>
>  toolexeclib_LTLIBRARIES = libstdc++exp.la
>
> +if ENABLE_FILESYSTEM_TS
> +filesystem_lib = $(top_builddir)/src/filesystem/libstdc++fs.la
> +else
> +filesystem_lib =
> +endif
> +
> +if ENABLE_BACKTRACE
> +backtrace_lib = $(top_builddir)/src/libbacktrace/libstdc++_libbacktrace.la
> +else
> +backtrace_lib =
> +endif
> +
>  headers =
>
>  sources = \
> @@ -33,6 +45,12 @@ sources = \
>
>  libstdc__exp_la_SOURCES = $(sources)
>
> +libstdc__exp_la_LIBADD = \
> +       $(filesystem_lib) $(backtrace_lib)
> +
> +libstdc__exp_la_DEPENDENCIES = \
> +       $(filesystem_lib) $(backtrace_lib)
> +
>  # 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
>  # set this option because CONFIG_CXXFLAGS has to be after
> diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc
> index 184e23b460e..f6c860fc7a4 100644
> --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc
> +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc
> @@ -1,4 +1,4 @@
> -// { dg-options "-std=gnu++23 -lstdc++_libbacktrace" }
> +// { dg-options "-std=gnu++23 -lstdc++exp" }
>  // { dg-do run { target c++23 } }
>  // { dg-require-effective-target stacktrace }
>
> diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc
> index a222c425b20..f0406953d03 100644
> --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc
> +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc
> @@ -1,4 +1,4 @@
> -// { dg-options "-std=gnu++23 -lstdc++_libbacktrace" }
> +// { dg-options "-std=gnu++23 -lstdc++exp" }
>  // { dg-do run { target c++23 } }
>  // { dg-require-effective-target stacktrace }
>
> diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc
> index 8dfdf4739be..0a358b7b8ff 100644
> --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc
> +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc
> @@ -1,4 +1,4 @@
> -// { dg-options "-std=gnu++23 -lstdc++_libbacktrace" }
> +// { dg-options "-std=gnu++23 -lstdc++exp" }
>  // { dg-do run { target c++23 } }
>  // { dg-require-effective-target stacktrace }
>
> diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc
> index 520788d5cb7..43a82fb1201 100644
> --- a/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc
> +++ b/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc
> @@ -1,5 +1,5 @@
>  // { dg-do run { xfail *-*-* } }
> -// { dg-options "-D_GLIBCXX_DEBUG_BACKTRACE -lstdc++_libbacktrace" }
> +// { dg-options "-D_GLIBCXX_DEBUG_BACKTRACE -lstdc++exp" }
>  // { dg-require-effective-target stacktrace }
>
>  #include <debug/vector>
> --
> 2.43.0
>
  

Patch

diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml
index 3a507fc1671..7276cad0feb 100644
--- a/libstdc++-v3/doc/xml/manual/using.xml
+++ b/libstdc++-v3/doc/xml/manual/using.xml
@@ -100,30 +100,27 @@ 
       </entry>
     </row>
 
-    <row>
-      <entry><literal>-lstdc++fs</literal></entry>
-      <entry>Linking to <filename class="libraryfile">libstdc++fs</filename>
-        is required for use of the Filesystem library extensions in
-        <filename class="headerfile">&lt;experimental/filesystem&gt;</filename>.
-      </entry>
-    </row>
-
     <row>
       <entry><literal>-lstdc++exp</literal></entry>
-      <entry>Linking to <filename class="libraryfile">libstdc++exp</filename>
-        is required for use of the C++ Contracts extensions enabled by
-        <literal>-fcontracts</literal>.
+      <entry>Linking to <filename class="libraryfile">libstdc++exp.a</filename>
+        is required for use of experimental C++ library features.
+        This currently provides support for the C++23 types defined in the
+        <filename class="headerfile">&lt;stacktrace&gt;</filename> header,
+        the Filesystem library extensions defined in the
+        <filename class="headerfile">&lt;experimental/filesystem&gt;</filename>
+        header,
+        and the Contracts extensions enabled by <literal>-fcontracts</literal>.
       </entry>
     </row>
 
     <row>
-      <entry><literal>-lstdc++_libbacktrace</literal></entry>
-      <entry>Until C++23 support is non-experimental, linking to
-	<filename class="libraryfile">libstdc++_libbacktrace.a</filename>
-	is required for use of the C++23 type
-	<classname>std::stacktrace</classname>
-	and related types in
-	<filename class="headerfile">&lt;stacktrace&gt;</filename>.
+      <entry><literal>-lstdc++fs</literal></entry>
+      <entry>Linking to <filename class="libraryfile">libstdc++fs.a</filename>
+        is another way to use the Filesystem library extensions defined in the
+        <filename class="headerfile">&lt;experimental/filesystem&gt;</filename>
+        header.
+        The <filename class="libraryfile">libstdc++exp.a</filename> library
+        also provides all the symbols contained in this library.
       </entry>
     </row>
 
@@ -1710,6 +1707,10 @@  A quick read of the relevant part of the GCC
       and link with <option>-lstdc++fs</option>. The library implementation
       is incomplete on non-POSIX platforms, specifically Windows is only
       partially supported.
+      Since GCC 14, <filename class="libraryfile">libstdc++exp.a</filename>
+      also contains the definitions for this library,
+      so <option>-lstdc++exp</option> can be used instead of
+      <option>-lstdc++fs</option>.
     </para>
 
     <para>
diff --git a/libstdc++-v3/scripts/testsuite_flags.in b/libstdc++-v3/scripts/testsuite_flags.in
index 18748f0f9ce..8bf4918287a 100755
--- a/libstdc++-v3/scripts/testsuite_flags.in
+++ b/libstdc++-v3/scripts/testsuite_flags.in
@@ -78,14 +78,14 @@  case ${query} in
       ;;
     --cxxldflags)
       FS_LDFLAGS=
-      BT_LDFLAGS=
+      EXP_LDFLAGS=
       if [ -d ${BUILD_DIR}/src/filesystem/.libs ]; then
         FS_LDFLAGS=-L${BUILD_DIR}/src/filesystem/.libs
       fi
-      if [ -d ${BUILD_DIR}/src/libbacktrace/.libs ]; then
-        BT_LDFLAGS=-L${BUILD_DIR}/src/libbacktrace/.libs
+      if [ -d ${BUILD_DIR}/src/experimental/.libs ]; then
+        EXP_LDFLAGS=-L${BUILD_DIR}/src/experimental/.libs
       fi
-      SECTIONLDFLAGS="@SECTION_LDFLAGS@ @LIBICONV@ $FS_LDFLAGS $BT_LDFLAGS"
+      SECTIONLDFLAGS="@SECTION_LDFLAGS@ @LIBICONV@ $FS_LDFLAGS $EXP_LDFLAGS"
       echo ${SECTIONLDFLAGS}
       ;;
     *)
diff --git a/libstdc++-v3/src/c++20/Makefile.am b/libstdc++-v3/src/c++20/Makefile.am
index 0bc8a7b832a..e947855e6ae 100644
--- a/libstdc++-v3/src/c++20/Makefile.am
+++ b/libstdc++-v3/src/c++20/Makefile.am
@@ -22,7 +22,7 @@ 
 
 include $(top_srcdir)/fragment.am
 
-# Convenience library for C++17 runtime.
+# Convenience library for C++20 runtime.
 noinst_LTLIBRARIES = libc++20convenience.la
 
 headers =
diff --git a/libstdc++-v3/src/experimental/Makefile.am b/libstdc++-v3/src/experimental/Makefile.am
index 3b962e7d804..1c7cea7e846 100644
--- a/libstdc++-v3/src/experimental/Makefile.am
+++ b/libstdc++-v3/src/experimental/Makefile.am
@@ -24,6 +24,18 @@  include $(top_srcdir)/fragment.am
 
 toolexeclib_LTLIBRARIES = libstdc++exp.la
 
+if ENABLE_FILESYSTEM_TS
+filesystem_lib = $(top_builddir)/src/filesystem/libstdc++fs.la
+else
+filesystem_lib =
+endif
+
+if ENABLE_BACKTRACE
+backtrace_lib = $(top_builddir)/src/libbacktrace/libstdc++_libbacktrace.la
+else
+backtrace_lib =
+endif
+
 headers =
 
 sources = \
@@ -33,6 +45,12 @@  sources = \
 
 libstdc__exp_la_SOURCES = $(sources)
 
+libstdc__exp_la_LIBADD = \
+	$(filesystem_lib) $(backtrace_lib)
+
+libstdc__exp_la_DEPENDENCIES = \
+	$(filesystem_lib) $(backtrace_lib)
+
 # 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
 # set this option because CONFIG_CXXFLAGS has to be after
diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc
index 184e23b460e..f6c860fc7a4 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=gnu++23 -lstdc++_libbacktrace" }
+// { dg-options "-std=gnu++23 -lstdc++exp" }
 // { dg-do run { target c++23 } }
 // { dg-require-effective-target stacktrace }
 
diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc
index a222c425b20..f0406953d03 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=gnu++23 -lstdc++_libbacktrace" }
+// { dg-options "-std=gnu++23 -lstdc++exp" }
 // { dg-do run { target c++23 } }
 // { dg-require-effective-target stacktrace }
 
diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc
index 8dfdf4739be..0a358b7b8ff 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc
@@ -1,4 +1,4 @@ 
-// { dg-options "-std=gnu++23 -lstdc++_libbacktrace" }
+// { dg-options "-std=gnu++23 -lstdc++exp" }
 // { dg-do run { target c++23 } }
 // { dg-require-effective-target stacktrace }
 
diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc
index 520788d5cb7..43a82fb1201 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc
@@ -1,5 +1,5 @@ 
 // { dg-do run { xfail *-*-* } }
-// { dg-options "-D_GLIBCXX_DEBUG_BACKTRACE -lstdc++_libbacktrace" }
+// { dg-options "-D_GLIBCXX_DEBUG_BACKTRACE -lstdc++exp" }
 // { dg-require-effective-target stacktrace }
 
 #include <debug/vector>