From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 366AB3858020 for ; Fri, 2 Feb 2024 12:29:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 366AB3858020 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 366AB3858020 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706876970; cv=none; b=CgvKi8ERfuUkvikTu1wjfMWXzgM+ztkdPbAiGqaXB5dF151GpJ7gNord8wAYz38zFaqBReOkaj1bwvwpUAbwhgFskaWbFTg1srobFBMhhk+iwbbZiDi+EKR7I62nxsb9+wEHZHcTZDlCuErHYts34i8D7iQiKbt4l4lEGl/AFm8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706876970; c=relaxed/simple; bh=dIHPfYjfr5DNM8x+kJX9KpsY2wrg7OkvTbCaM6hmKi0=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=ItbD1K30q4MlS7+H/SDc/3X4DUGrqw5DVPr26wwuryyQtvrL2uoUWjEQ7qDDcoWlnnuA6HJRBCXR1Cs8qVfKCKlUCKF5euf23eqkOn0dL94zLgvkxA23I+wjAwrytk8gDluPGQmdRhKnKvLJYJN9oEKbsqZkDmv193Zh7XswORE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1706876967; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=d0Wy7nRgKcszDiojzBsTBsiq7ohhNzC5ZogywbdGC1k=; b=V6JykNICBX9sa/lpD90h3azge4+aTCBkIx+ipwqb6B6xXyFPqSpBXZAqpb5NmYjbYiUPFt YQ0Mk62jlmkBKcxHlPCLzaW+lDTbIFnkIea36L3h0IMRFQQ2qNL0OHtjWeOLp/qLa9QWm8 c06M7v8RhgtRdWYxSl+SNHThAASN7Tk= Received: from mail-yw1-f200.google.com (mail-yw1-f200.google.com [209.85.128.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-408-XyjDT6foMc65RSI327WnvA-1; Fri, 02 Feb 2024 07:29:26 -0500 X-MC-Unique: XyjDT6foMc65RSI327WnvA-1 Received: by mail-yw1-f200.google.com with SMTP id 00721157ae682-6041c45ce1cso29407747b3.1 for ; Fri, 02 Feb 2024 04:29:26 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706876966; x=1707481766; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=d0Wy7nRgKcszDiojzBsTBsiq7ohhNzC5ZogywbdGC1k=; b=uqYVJDq/zgQw1lXxQHyeL8dAAG4hJoOPyXqliYP+gjeaDSCBUXBH8+qfEn7dOmRp3R tsIyRMbcUrjxY+Fh9DLf4dbL5MS+/WTSY47h6sHt65MHtzKpUX08Hfoy0lYohuC0PzEQ AR9NBQp5+w1qZjNaZxb6KR+Vknn0JLQtw+n3a/+hltExOc7GKH9WCOcWuRNfeyVcoz41 dttJ69PsYrNwS3qHbJABzgadIptRfjaEj6Dmdf8Txif/YJi3I5HDg1Js7KU2dLmVGngY lbymuwg1vnCvyOHPZMddQs5kO7oBK2TaQ86TyDApmdTjlvyO2UIkEThIPyOBoNZuNjHX v13g== X-Gm-Message-State: AOJu0YzcXjew5ujrT1l25hxkXsYQq9yGX9Ms5lBcwA7HNKBIxzeomX04 7gjXWftbTyR6Ln3A2RdTuRHypKGjBjC3DrxlDfpB/pEZSsqCHZCa1TCYce+rw2DpZGztsLK7j8J mR49iqoRIkTSAg5YcWuvOnNbCsuzra/kB+6i78OIpuqsSxSDbsdkUvjnOpDQL2lXRywMMCi7YSr QGNd+A25uDbj6B853nfGkTks8/DrObDOxcuywn1oVC X-Received: by 2002:a0d:eb48:0:b0:5ff:e530:eebd with SMTP id u69-20020a0deb48000000b005ffe530eebdmr5576701ywe.19.1706876965670; Fri, 02 Feb 2024 04:29:25 -0800 (PST) X-Google-Smtp-Source: AGHT+IGf62mFZLRIX2qXAbJaGVvFRMFyZSBieM3BT5r3DAj5UZWp8qQ60VisQOS96qu56PJB/WTLjFwvffypXnNY4Vc= X-Received: by 2002:a0d:eb48:0:b0:5ff:e530:eebd with SMTP id u69-20020a0deb48000000b005ffe530eebdmr5576681ywe.19.1706876965195; Fri, 02 Feb 2024 04:29:25 -0800 (PST) MIME-Version: 1.0 References: <20240109124340.3886305-1-jwakely@redhat.com> In-Reply-To: <20240109124340.3886305-1-jwakely@redhat.com> From: Jonathan Wakely Date: Fri, 2 Feb 2024 12:29:09 +0000 Message-ID: Subject: Re: [PATCH][gcc-13] libstdc++: Add Filesystem TS and std::stacktrace symbols to libstdc++exp.a To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Cc: Matthias Klose X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-14.2 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,URIBL_BLACK autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Tue, 9 Jan 2024 at 12:44, Jonathan Wakely 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 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 @@ > > > > - > - -lstdc++fs > - Linking to libstdc++fs > - is required for use of the Filesystem library extensions in > - <experimental/filesystem>. > - > - > - > > -lstdc++exp > - Linking to libstdc++exp > - is required for use of the C++ Contracts extensions enabled by > - -fcontracts. > + Linking to libstdc++exp.a > + is required for use of experimental C++ library features. > + This currently provides support for the C++23 types defined in the > + <stacktrace> header, > + the Filesystem library extensions defined in the > + <experimental/filesystem> > + header, > + and the Contracts extensions enabled by -fcontracts. > > > > > - -lstdc++_libbacktrace > - Until C++23 support is non-experimental, linking to > - libstdc++_libbacktrace.a > - is required for use of the C++23 type > - std::stacktrace > - and related types in > - <stacktrace>. > + -lstdc++fs > + Linking to libstdc++fs.a > + is another way to use the Filesystem library extensions defined in the > + <experimental/filesystem> > + header. > + The libstdc++exp.a library > + also provides all the symbols contained in this library. > > > > @@ -1710,6 +1707,10 @@ A quick read of the relevant part of the GCC > and link with . The library implementation > is incomplete on non-POSIX platforms, specifically Windows is only > partially supported. > + Since GCC 14, libstdc++exp.a > + also contains the definitions for this library, > + so can be used instead of > + . > > > > 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 > -- > 2.43.0 >