From 8027795ca640cbdceb3bac93b51f855fc16ab6aa Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Wed, 4 Jun 2025 17:08:20 -0400 Subject: [PATCH] Initial version of gcc-toolset-15-gcc Related: RHEL-81745 --- ...erve-n-semantics-are-not-available-i.patch | 85 + ...-char-N-eofbit-fixes-are-not-availab.patch | 46 + ...r-PR-libstdc-79820-and-PR-libstdc-81.patch | 53 + ..._facet-codecvt_c16-when-run-against-.patch | 118 + ...estsuite-build-plugins-with-std-c-11.patch | 42 + ...eption-handling-in-basic_filebuf-clo.patch | 30 + ...use-it-to-fix-22_locale-messages-136.patch | 117 + 0012-dts.exp-use-usr-bin-gcc.patch | 28 + ...IB_SO_VERSION__-to-__LIBSTDCXX_SO_VE.patch | 86 + ...ests-for-PR-libstdc-98466-on-__LIBST.patch | 84 + ...est-for-PR-libstdc-87135-on-__LIBSTD.patch | 41 + ...est-for-hashtable-bucket-sizes-on-__.patch | 102 + ...est-for-PR-libstdc-71181-on-__LIBSTD.patch | 33 + 0018-Use-CXX11-ABI.patch | 13 + 0020-more-fixes.patch | 12 + 0021-libstdc++-disable-tests.patch | 424 + 0022-libstdc++-revert-behavior.patch | 72 + gating.yaml | 6 + gcc-toolset-15-gcc.spec | 2907 +++++ gcc15-Wno-format-security.patch | 62 + gcc15-d-shared-libphobos.patch | 20 + gcc15-dg-ice-fixes.patch | 44 + gcc15-fortran-fdec-duplicates.patch | 215 + gcc15-hack.patch | 182 + gcc15-isl-dl.patch | 716 + gcc15-isl-dl2.patch | 71 + gcc15-libgfortran-compat.patch | 1970 +++ gcc15-libgomp-omp_h-multilib.patch | 17 + gcc15-libstdc++-compat.patch | 10878 ++++++++++++++++ gcc15-libstdc++-docs.patch | 24 + gcc15-libtool-no-rpath.patch | 27 + gcc15-no-add-needed.patch | 37 + gcc15-nvptx-offload.patch | 393 + gcc15-pr119006.patch | 76 + gcc15-rh1574936.patch | 21 + gcc15-sparc-config-detection.patch | 40 + isl-rh2155127.patch | 85 + sources | 4 + 38 files changed, 19181 insertions(+) create mode 100644 0001-basic_string-reserve-n-semantics-are-not-available-i.patch create mode 100644 0004-operator-istream-char-N-eofbit-fixes-are-not-availab.patch create mode 100644 0005-Disable-tests-for-PR-libstdc-79820-and-PR-libstdc-81.patch create mode 100644 0006-Don-t-assume-has_facet-codecvt_c16-when-run-against-.patch create mode 100644 0008-testsuite-build-plugins-with-std-c-11.patch create mode 100644 0010-Don-t-verify-exception-handling-in-basic_filebuf-clo.patch create mode 100644 0011-Add-dts.exp-and-use-it-to-fix-22_locale-messages-136.patch create mode 100644 0012-dts.exp-use-usr-bin-gcc.patch create mode 100644 0013-Rename-__CXXSTDLIB_SO_VERSION__-to-__LIBSTDCXX_SO_VE.patch create mode 100644 0014-Conditionalize-tests-for-PR-libstdc-98466-on-__LIBST.patch create mode 100644 0015-Conditionalize-test-for-PR-libstdc-87135-on-__LIBSTD.patch create mode 100644 0016-Conditionalize-test-for-hashtable-bucket-sizes-on-__.patch create mode 100644 0017-Conditionalize-test-for-PR-libstdc-71181-on-__LIBSTD.patch create mode 100644 0018-Use-CXX11-ABI.patch create mode 100644 0020-more-fixes.patch create mode 100644 0021-libstdc++-disable-tests.patch create mode 100644 0022-libstdc++-revert-behavior.patch create mode 100644 gating.yaml create mode 100644 gcc-toolset-15-gcc.spec create mode 100644 gcc15-Wno-format-security.patch create mode 100644 gcc15-d-shared-libphobos.patch create mode 100644 gcc15-dg-ice-fixes.patch create mode 100644 gcc15-fortran-fdec-duplicates.patch create mode 100644 gcc15-hack.patch create mode 100644 gcc15-isl-dl.patch create mode 100644 gcc15-isl-dl2.patch create mode 100644 gcc15-libgfortran-compat.patch create mode 100644 gcc15-libgomp-omp_h-multilib.patch create mode 100644 gcc15-libstdc++-compat.patch create mode 100644 gcc15-libstdc++-docs.patch create mode 100644 gcc15-libtool-no-rpath.patch create mode 100644 gcc15-no-add-needed.patch create mode 100644 gcc15-nvptx-offload.patch create mode 100644 gcc15-pr119006.patch create mode 100644 gcc15-rh1574936.patch create mode 100644 gcc15-sparc-config-detection.patch create mode 100644 isl-rh2155127.patch create mode 100644 sources diff --git a/0001-basic_string-reserve-n-semantics-are-not-available-i.patch b/0001-basic_string-reserve-n-semantics-are-not-available-i.patch new file mode 100644 index 0000000..7031726 --- /dev/null +++ b/0001-basic_string-reserve-n-semantics-are-not-available-i.patch @@ -0,0 +1,85 @@ +From 8a7f364afd86a4c4c2c747ae9cb4216fe992acc8 Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Wed, 25 Aug 2021 12:36:42 -0400 +Subject: [PATCH 01/17] basic_string::reserve(n) semantics are not available in + DTS + +Various tests were added upstream 2020-08-06 as part of: + "libstdc++: Implement P0966 std::string::reserve should not shrink" + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=140cf935cd118f7208b7c3826a8b9d50936242f0 + +std::string and std::wstring are instantiated in the system libstdc++.so +via explicit instantiation definitions, so the new basic_string::reserve(n) +semantics are not available in DTS. + +Update/disable the pertinent parts of the tests to reflect the behavior +when run against the system libstdc++.so. +--- + .../testsuite/21_strings/basic_string/capacity/char/1.cc | 6 ------ + .../21_strings/basic_string/capacity/char/18654.cc | 2 +- + .../testsuite/21_strings/basic_string/capacity/wchar_t/1.cc | 6 ------ + .../21_strings/basic_string/capacity/wchar_t/18654.cc | 2 +- + 4 files changed, 2 insertions(+), 14 deletions(-) + +diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc +index eea69771f..64187718d 100644 +--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc ++++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/1.cc +@@ -41,12 +41,6 @@ void test01() + sz01 = str01.capacity(); + VERIFY( sz01 < sz02 ); + +- // P0966: reserve should not shrink +- str01.reserve(100); +- sz01 = str01.capacity(); +- str01.reserve(sz01 - 1); +- VERIFY( str01.capacity() == sz01 ); +- + sz01 = str01.size() + 5; + str01.resize(sz01); + sz02 = str01.size(); +diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc +index 02ce78ea6..3a7352123 100644 +--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc ++++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/18654.cc +@@ -51,7 +51,7 @@ void test01() + VERIFY( cap >= 3 * i ); + + str.reserve(2 * i); +- VERIFY( str.capacity() == cap ); ++ VERIFY( str.capacity() == 2 * i ); + + #if __cplusplus <= 201703L + str.reserve(); +diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc +index f01a27e8c..70915a94d 100644 +--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc ++++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/1.cc +@@ -41,12 +41,6 @@ void test01() + sz01 = str01.capacity(); + VERIFY( sz01 < sz02 ); + +- // P0966: reserve should not shrink +- str01.reserve(100); +- sz01 = str01.capacity(); +- str01.reserve(sz01 - 1); +- VERIFY( str01.capacity() == sz01 ); +- + sz01 = str01.size() + 5; + str01.resize(sz01); + sz02 = str01.size(); +diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc +index 267fd198b..c9711a294 100644 +--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc ++++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc +@@ -51,7 +51,7 @@ void test01() + VERIFY( cap >= 3 * i ); + + str.reserve(2 * i); +- VERIFY( str.capacity() == cap ); ++ VERIFY( str.capacity() == 2 * i ); + + #if __cplusplus <= 201703L + str.reserve(); +-- +2.31.1 diff --git a/0004-operator-istream-char-N-eofbit-fixes-are-not-availab.patch b/0004-operator-istream-char-N-eofbit-fixes-are-not-availab.patch new file mode 100644 index 0000000..264745b --- /dev/null +++ b/0004-operator-istream-char-N-eofbit-fixes-are-not-availab.patch @@ -0,0 +1,46 @@ +From d7fae9f17479c44dae68483d457fc3fbb58c4b83 Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Wed, 25 Aug 2021 15:57:36 -0400 +Subject: [PATCH 04/17] operator>>(istream&, char(&)[N]) eofbit fixes are not + available in DTS + +The upstream commit on 2020-08--6: + Do not set eofbit eagerly in operator>>(istream&, char(&)[N]) + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=4e39f563c0cd25401f689c2093cb8c13692156ef +altered the behaviour of std::istream symbols defined in libstdc++.so, +but with DTS you get the old definitions from the system libstdc++.so + +Hence this patch tweaks the new tests to avoid failing when run against +the system libstdc++.so +--- + .../21_strings/basic_string/inserters_extractors/char/13.cc | 1 - + .../21_strings/basic_string/inserters_extractors/wchar_t/13.cc | 1 - + 2 files changed, 2 deletions(-) + +diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/13.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/13.cc +index a25d8a93d..7d85e6ead 100644 +--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/13.cc ++++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/char/13.cc +@@ -29,7 +29,6 @@ test01() + std::string buf; + in.width(4); + in >> buf; +- VERIFY( !in.eof() ); // should stop after reading 4 chars + VERIFY( buf == str ); + } + +diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc +index f15294a44..fa5fe3d4a 100644 +--- a/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc ++++ b/libstdc++-v3/testsuite/21_strings/basic_string/inserters_extractors/wchar_t/13.cc +@@ -29,7 +29,6 @@ test01() + std::wstring buf; + in.width(4); + in >> buf; +- VERIFY( !in.eof() ); // should stop after reading 4 chars + VERIFY( buf == str ); + } + +-- +2.31.1 + diff --git a/0005-Disable-tests-for-PR-libstdc-79820-and-PR-libstdc-81.patch b/0005-Disable-tests-for-PR-libstdc-79820-and-PR-libstdc-81.patch new file mode 100644 index 0000000..0641e85 --- /dev/null +++ b/0005-Disable-tests-for-PR-libstdc-79820-and-PR-libstdc-81.patch @@ -0,0 +1,53 @@ +From 3ede89bd19328c26bcd881b873cf4a766ae0da3a Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Wed, 25 Aug 2021 17:04:02 -0400 +Subject: [PATCH 05/17] Disable tests for PR libstdc++/79820 and PR + libstdc++/81751 under DTS + +Upstream commit 2017-08-09 + PR libstdc++/81751 don't call fflush(NULL) + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=04d07b61cb80fd97e98eb39451ff6a8675a63d90 +added these test cases as part of verifying the behavior of sys_open (that +it resets errno and doesn't call fflush on NULL). + +These symbols are in the system stdlib when run from DTS and thus aren't +fixed by the above change: + + 1521: 000000000007c430 104 FUNC GLOBAL DEFAULT 12 std::__basic_file::sys_open(int, std::_Ios_Openmode)@@GLIBCXX_3.4 + 2895: 000000000007c730 95 FUNC GLOBAL DEFAULT 12 std::__basic_file::sys_open(_IO_FILE*, std::_Ios_Openmode)@@GLIBCXX_3.4 + +This patch disables the non-fixed assertions. +--- + libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc | 2 -- + libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc | 1 - + 2 files changed, 3 deletions(-) + +diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc +index 278b99169..e2a8e3b3d 100644 +--- a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc ++++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/79820.cc +@@ -26,9 +26,7 @@ void + test01() + { + FILE* f = std::fopen("79820.txt", "w"); +- errno = 127; + __gnu_cxx::stdio_filebuf b(f, std::ios::out, BUFSIZ); +- VERIFY(errno == 127); // PR libstdc++/79820 + b.close(); + std::fclose(f); + } +diff --git a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc +index 21aa06f78..6a231d7cf 100644 +--- a/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc ++++ b/libstdc++-v3/testsuite/ext/stdio_filebuf/char/81751.cc +@@ -31,7 +31,6 @@ test01() + FILE* in1 = std::fopen("81751.txt", "r"); + __gnu_cxx::stdio_filebuf buf1(in1, std::ios::in, BUFSIZ); + int c = buf1.sgetc(); +- VERIFY( c == std::char_traits::eof() ); // PR libstdc++/81751 + + std::fflush(out); + FILE* in2 = std::fopen("81751.txt", "r"); +-- +2.31.1 + diff --git a/0006-Don-t-assume-has_facet-codecvt_c16-when-run-against-.patch b/0006-Don-t-assume-has_facet-codecvt_c16-when-run-against-.patch new file mode 100644 index 0000000..dcabb08 --- /dev/null +++ b/0006-Don-t-assume-has_facet-codecvt_c16-when-run-against-.patch @@ -0,0 +1,118 @@ +From 59388ee3dac5c737086ed1f83f552a44481a2213 Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Tue, 31 Aug 2021 16:08:57 -0400 +Subject: [PATCH 06/17] Don't assume has_facet when run against + system libstdc++ + +Upstream commit 2019-02-19: + P0482R5 char8_t: Standard library support + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=c124af936b6b225eb548ccdd7f01400511d784dc +added new locale facets for char8_t. + +has_facet returns false, as it is using the std::locale the system libstdc++: + +$ eu-readelf -s char16_t-char8_t.exe |c++filt |grep UNDEF|grep locale + 3: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::classic()@GLIBCXX_3.4 (2) + 8: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::locale(std::locale const&)@GLIBCXX_3.4 (2) + 13: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::id::_M_id() const@GLIBCXX_3.4 (2) + 22: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::~locale()@GLIBCXX_3.4 (2) + 64: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::classic()@@GLIBCXX_3.4 + 76: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::locale(std::locale const&)@@GLIBCXX_3.4 + 89: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::id::_M_id() const@@GLIBCXX_3.4 + 108: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::locale::~locale()@@GLIBCXX_3.4 + +Hence this patch tweaks tests so that they bail out if run against an older std::locale. +--- + libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc | 3 ++- + libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc | 3 ++- + libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc | 3 ++- + libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc | 3 ++- + libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc | 2 ++ + libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc | 2 ++ + 6 files changed, 12 insertions(+), 4 deletions(-) + +diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc b/libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc +index 71a23bef4..d4aa519a2 100644 +--- a/libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc ++++ b/libstdc++-v3/testsuite/22_locale/codecvt/char16_t-char8_t.cc +@@ -31,7 +31,8 @@ test01() + using namespace std; + typedef codecvt codecvt_c16; + locale loc_c = locale::classic(); +- VERIFY(has_facet(loc_c)); ++ if (!has_facet(loc_c)) ++ return; + const codecvt_c16* const cvt = &use_facet(loc_c); + + VERIFY(!cvt->always_noconv()); +diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc b/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc +index 7b5ce126d..05c77b2b1 100644 +--- a/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc ++++ b/libstdc++-v3/testsuite/22_locale/codecvt/char16_t.cc +@@ -29,7 +29,8 @@ test01() + using namespace std; + typedef codecvt codecvt_c16; + locale loc_c = locale::classic(); +- VERIFY(has_facet(loc_c)); ++ if (!has_facet(loc_c)) ++ return; + const codecvt_c16* const cvt = &use_facet(loc_c); + + VERIFY(!cvt->always_noconv()); +diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc b/libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc +index f30ae22e9..281969e9b 100644 +--- a/libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc ++++ b/libstdc++-v3/testsuite/22_locale/codecvt/char32_t-char8_t.cc +@@ -33,7 +33,8 @@ test01() + using namespace std; + typedef codecvt codecvt_c32; + locale loc_c = locale::classic(); +- VERIFY(has_facet(loc_c)); ++ if (!has_facet(loc_c)) ++ return; + const codecvt_c32* const cvt = &use_facet(loc_c); + + VERIFY(!cvt->always_noconv()); +diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc b/libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc +index 558ba9145..82980b702 100644 +--- a/libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc ++++ b/libstdc++-v3/testsuite/22_locale/codecvt/char32_t.cc +@@ -31,7 +31,8 @@ test01() + using namespace std; + typedef codecvt codecvt_c32; + locale loc_c = locale::classic(); +- VERIFY(has_facet(loc_c)); ++ if (!has_facet(loc_c)) ++ return; + const codecvt_c32* const cvt = &use_facet(loc_c); + + VERIFY(!cvt->always_noconv()); +diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc b/libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc +index 5eab05ba2..d6f663ce6 100644 +--- a/libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc ++++ b/libstdc++-v3/testsuite/22_locale/codecvt/utf8-char8_t.cc +@@ -34,6 +34,8 @@ void test(const C* from) + std::mbstate_t state{}; + char8_t buf[16] = { }; + using test_type = std::codecvt; ++ if (!std::has_facet(std::locale::classic())) ++ return; + const test_type& cvt = std::use_facet(std::locale::classic()); + auto from_end = from + len; + auto from_next = from; +diff --git a/libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc b/libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc +index b1b3cff31..167bc0ca3 100644 +--- a/libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc ++++ b/libstdc++-v3/testsuite/22_locale/codecvt/utf8.cc +@@ -32,6 +32,8 @@ void test(const C* from) + std::mbstate_t state{}; + char buf[16] = { }; + using test_type = std::codecvt; ++ if (!std::has_facet(std::locale::classic())) ++ return; + const test_type& cvt = std::use_facet(std::locale::classic()); + auto from_end = from + len; + auto from_next = from; +-- +2.31.1 + diff --git a/0008-testsuite-build-plugins-with-std-c-11.patch b/0008-testsuite-build-plugins-with-std-c-11.patch new file mode 100644 index 0000000..f97bad3 --- /dev/null +++ b/0008-testsuite-build-plugins-with-std-c-11.patch @@ -0,0 +1,42 @@ +From 16694079a3f415f5e5683b0afe6978810ac259b1 Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Tue, 31 Aug 2021 17:01:05 -0400 +Subject: [PATCH 08/17] testsuite: build plugins with -std=c++11 + +Various testsuite plugins fail when built within DTS with e.g.: + cc1: error: cannot load plugin ./diagnostic_plugin_test_paths.so: /builddir/build/BUILD/gcc-11.1.1-20210623/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./diagnostic_plugin_test_paths.so) + +These turn out to C++14's sized deletion +(see https://en.cppreference.com/w/cpp/memory/new/operator_delete): + + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF _ZdlPvm@CXXABI_1.3.9 (4) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF _ZdlPvm@CXXABI_1.3.9 + 14: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF operator delete(void*, unsigned long)@CXXABI_1.3.9 (4) + 48: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF operator delete(void*, unsigned long)@CXXABI_1.3.9 + +Looks like plugin.exp is building the test plugins against the +freshly-built libstdc++, and then trying to dynamically load them +against the system libstdc++. + +This patch forces the use of -std=c++11 when building these test plugins, +to sidestep the problem. +--- + gcc/testsuite/lib/plugin-support.exp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gcc/testsuite/lib/plugin-support.exp b/gcc/testsuite/lib/plugin-support.exp +index 6d651901e..9943dbb37 100644 +--- a/gcc/testsuite/lib/plugin-support.exp ++++ b/gcc/testsuite/lib/plugin-support.exp +@@ -103,7 +103,7 @@ proc plugin-test-execute { plugin_src plugin_tests } { + } + set optstr [concat $optstr "-DIN_GCC -fPIC -shared -fno-rtti -undefined dynamic_lookup"] + } else { +- set plug_cflags $PLUGINCFLAGS ++ set plug_cflags "$PLUGINCFLAGS -std=c++11" + set optstr "$includes $extra_flags -DIN_GCC -fPIC -shared -fno-rtti" + } + +-- +2.31.1 + diff --git a/0010-Don-t-verify-exception-handling-in-basic_filebuf-clo.patch b/0010-Don-t-verify-exception-handling-in-basic_filebuf-clo.patch new file mode 100644 index 0000000..9e16d2e --- /dev/null +++ b/0010-Don-t-verify-exception-handling-in-basic_filebuf-clo.patch @@ -0,0 +1,30 @@ +From d1555ffdd9b4fa6f3ceaa166bbfee0b3b9973ecf Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Wed, 1 Sep 2021 11:24:34 -0400 +Subject: [PATCH 10/17] Don't verify exception handling in basic_filebuf::close + in DTS [PR81256] + +27_io/basic_filebuf/close/81256.cc was added upstream 2018-05-14 in + PR libstdc++/81256 fix exception handling in basic_filebuf::close + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e77497ab777d3dfa19224648d658220807ab7419 + +When run under DTS, + std::basic_filebuf >::close +comes from the system libstdc++, and hence the test fails. +--- + libstdc++-v3/testsuite/27_io/basic_filebuf/close/81256.cc | 1 - + 1 file changed, 1 deletion(-) + +--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/81256.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/close/wchar_t/81256.cc +@@ -80,7 +80,6 @@ test01() + caught = true; + } + VERIFY( conv.exceptions_thrown == 1 ); +- VERIFY( caught ); + } + VERIFY( conv.exceptions_thrown == 1 ); + } +-- +2.31.1 + diff --git a/0011-Add-dts.exp-and-use-it-to-fix-22_locale-messages-136.patch b/0011-Add-dts.exp-and-use-it-to-fix-22_locale-messages-136.patch new file mode 100644 index 0000000..1ad1f86 --- /dev/null +++ b/0011-Add-dts.exp-and-use-it-to-fix-22_locale-messages-136.patch @@ -0,0 +1,117 @@ +From b6989e3a4acda2d75612f3f3847dbea4245ff536 Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Wed, 1 Sep 2021 15:39:45 -0400 +Subject: [PATCH 11/17] Add dts.exp and use it to fix + 22_locale/messages/13631.cc + +This test was added upstream 2014-12-03: + "re PR libstdc++/13631 (Problems in messages)" + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=d31008d7a0d53b431f176aad8dda5498de823122 + +as part of a fix that is present in the system libstdc++.so in +GCC 5 onwards. + +When run in DTS against such a system library, this test will fail. +This patch introduces a dts.exp which detects the version of the +underlying system libstdc++.so and exposes it to tests via +-D__CXXSTDLIB_SO_VERSION__=, so that we can ifdef specific tests +away, conditionally on the base GCC. +--- + .../testsuite/22_locale/messages/13631.cc | 7 +++++ + libstdc++-v3/testsuite/lib/dts.exp | 31 +++++++++++++++++++ + libstdc++-v3/testsuite/lib/libstdc++.exp | 6 ++++ + 3 files changed, 44 insertions(+) + create mode 100644 libstdc++-v3/testsuite/lib/dts.exp + +diff --git a/libstdc++-v3/testsuite/22_locale/messages/13631.cc b/libstdc++-v3/testsuite/22_locale/messages/13631.cc +index b8ae3d4f1..5b20df382 100644 +--- a/libstdc++-v3/testsuite/22_locale/messages/13631.cc ++++ b/libstdc++-v3/testsuite/22_locale/messages/13631.cc +@@ -50,7 +50,10 @@ void test01() + msgs_facet.close(fake_msgs); + msgs_facet.close(msgs); + ++ // Fixed upstream in GCC 5 ++#if __CXXSTDLIB_SO_VERSION__ >= 501000 + VERIFY( translation1 == translation2 ); ++#endif + } + + void test02() +@@ -72,8 +75,12 @@ void test02() + std::wstring translation1 = msgs_facet.get(msgs, 0, 0, msgid); + + // Without a real translation this test doesn't mean anything: ++ ++ // Fixed upstream in GCC 5 ++#if __CXXSTDLIB_SO_VERSION__ >= 501000 + VERIFY( !translation1.empty() ); + VERIFY( translation1 != msgid ); ++#endif + + // Opening another catalog was enough to show the problem, even a fake + // catalog. +diff --git a/libstdc++-v3/testsuite/lib/dts.exp b/libstdc++-v3/testsuite/lib/dts.exp +new file mode 100644 +index 000000000..76ece66d3 +--- /dev/null ++++ b/libstdc++-v3/testsuite/lib/dts.exp +@@ -0,0 +1,31 @@ ++# For DTS testing, generate a number expressing the ++# system version of libstdc++.so ++# ++# Generate a version number equivalent to ++# #define GCC_VERSION (__GNUC__ * 10000 \ ++# + __GNUC_MINOR__ * 100 \ ++# + __GNUC_PATCHLEVEL__) ++# ++# For example, given an underlying version of gcc 4.8.5 ++# this function will return 408050. ++ ++proc get_dts_base_version { } { ++ ++ # Invoke gcc in the PATH to get at the underlying GCC version ++ # in dotted form (e.g. "4.8.5"). ++ set dotted_version [exec gcc -dumpversion] ++ verbose "dotted_version: '$dotted_version'" 2 ++ ++ # Extract major, minor, patchlevel ++ regexp {([0-9]+)\.([0-9]+)\.([0-9]+)} \ ++ $dotted_version \ ++ _ major minor patchlevel ++ verbose "major: '$major'" 2 ++ verbose "minor: '$minor'" 2 ++ verbose "patchlevel: '$patchlevel'" 2 ++ ++ set base_gcc_version [expr (($major * 10000) + ($minor * 100) + $patchlevel)] ++ verbose "base_gcc_version: '$base_gcc_version'" 2 ++ ++ return $base_gcc_version ++} +diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp +index 7f9580db8..5e4b32f76 100644 +--- a/libstdc++-v3/testsuite/lib/libstdc++.exp ++++ b/libstdc++-v3/testsuite/lib/libstdc++.exp +@@ -74,6 +74,7 @@ + load_gcc_lib wrapper.exp + load_gcc_lib target-utils.exp + load_gcc_lib dg-test-cleanup.exp ++load_lib dts.exp + + # Useful for debugging. Pass the name of a variable and the verbosity + # threshold (number of -v's on the command line). +@@ -323,6 +324,11 @@ proc libstdc++_init { testfile } { + set ccflags "$cxxflags -DLOCALEDIR=\".\"" + set cxxflags "$cxxflags -DLOCALEDIR=\".\"" + ++ # For DTS testing, expose the system version of libstdc++.so as ++ # a preprocessor define. ++ set base_gcc_version [get_dts_base_version] ++ set cxxflags "$cxxflags -D__CXXSTDLIB_SO_VERSION__=$base_gcc_version" ++ + # If a PCH file is available, use it. We must delay performing + # this check until $cxx and such have been initialized because we + # perform a test compilation. (Ideally, gcc --print-file-name would +-- +2.31.1 + diff --git a/0012-dts.exp-use-usr-bin-gcc.patch b/0012-dts.exp-use-usr-bin-gcc.patch new file mode 100644 index 0000000..129ef2d --- /dev/null +++ b/0012-dts.exp-use-usr-bin-gcc.patch @@ -0,0 +1,28 @@ +From c3910bb945aba02e0c06dec041da9f1f148b0df1 Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Thu, 2 Sep 2021 11:40:42 -0400 +Subject: [PATCH 12/17] dts.exp: use /usr/bin/gcc + +--- + libstdc++-v3/testsuite/lib/dts.exp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libstdc++-v3/testsuite/lib/dts.exp b/libstdc++-v3/testsuite/lib/dts.exp +index 76ece66d3..dc5cf3e95 100644 +--- a/libstdc++-v3/testsuite/lib/dts.exp ++++ b/libstdc++-v3/testsuite/lib/dts.exp +@@ -11,9 +11,9 @@ + + proc get_dts_base_version { } { + +- # Invoke gcc in the PATH to get at the underlying GCC version ++ # Invoke /usr/bin/gcc to get at the underlying GCC version + # in dotted form (e.g. "4.8.5"). +- set dotted_version [exec gcc -dumpversion] ++ set dotted_version [exec /usr/bin/gcc -dumpversion] + verbose "dotted_version: '$dotted_version'" 2 + + # Extract major, minor, patchlevel +-- +2.31.1 + diff --git a/0013-Rename-__CXXSTDLIB_SO_VERSION__-to-__LIBSTDCXX_SO_VE.patch b/0013-Rename-__CXXSTDLIB_SO_VERSION__-to-__LIBSTDCXX_SO_VE.patch new file mode 100644 index 0000000..52f160d --- /dev/null +++ b/0013-Rename-__CXXSTDLIB_SO_VERSION__-to-__LIBSTDCXX_SO_VE.patch @@ -0,0 +1,86 @@ +From c922a56d4461c9e4ca2af07ecccb3626b99a35ae Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Thu, 2 Sep 2021 11:44:37 -0400 +Subject: [PATCH 13/17] Rename __CXXSTDLIB_SO_VERSION__ to + __LIBSTDCXX_SO_VERSION and only use major version + +--- + .../testsuite/22_locale/messages/13631.cc | 4 ++-- + libstdc++-v3/testsuite/lib/dts.exp | 18 +++++------------- + libstdc++-v3/testsuite/lib/libstdc++.exp | 4 ++-- + 3 files changed, 9 insertions(+), 17 deletions(-) + +diff --git a/libstdc++-v3/testsuite/22_locale/messages/13631.cc b/libstdc++-v3/testsuite/22_locale/messages/13631.cc +index 5b20df382..f4c5eb7a2 100644 +--- a/libstdc++-v3/testsuite/22_locale/messages/13631.cc ++++ b/libstdc++-v3/testsuite/22_locale/messages/13631.cc +@@ -51,7 +51,7 @@ void test01() + msgs_facet.close(msgs); + + // Fixed upstream in GCC 5 +-#if __CXXSTDLIB_SO_VERSION__ >= 501000 ++#if __LIBSTDCXX_SO_VERSION >= 5 + VERIFY( translation1 == translation2 ); + #endif + } +@@ -77,7 +77,7 @@ void test02() + // Without a real translation this test doesn't mean anything: + + // Fixed upstream in GCC 5 +-#if __CXXSTDLIB_SO_VERSION__ >= 501000 ++#if __LIBSTDCXX_SO_VERSION >= 5 + VERIFY( !translation1.empty() ); + VERIFY( translation1 != msgid ); + #endif +diff --git a/libstdc++-v3/testsuite/lib/dts.exp b/libstdc++-v3/testsuite/lib/dts.exp +index dc5cf3e95..60f94bd6d 100644 +--- a/libstdc++-v3/testsuite/lib/dts.exp ++++ b/libstdc++-v3/testsuite/lib/dts.exp +@@ -1,15 +1,10 @@ +-# For DTS testing, generate a number expressing the +-# system version of libstdc++.so +-# +-# Generate a version number equivalent to +-# #define GCC_VERSION (__GNUC__ * 10000 \ +-# + __GNUC_MINOR__ * 100 \ +-# + __GNUC_PATCHLEVEL__) ++# For DTS testing, get the major version of the ++# system libstdc++.so + # + # For example, given an underlying version of gcc 4.8.5 +-# this function will return 408050. ++# this function will return 4 + +-proc get_dts_base_version { } { ++proc get_dts_base_major_version { } { + + # Invoke /usr/bin/gcc to get at the underlying GCC version + # in dotted form (e.g. "4.8.5"). +@@ -24,8 +19,5 @@ proc get_dts_base_version { } { + verbose "minor: '$minor'" 2 + verbose "patchlevel: '$patchlevel'" 2 + +- set base_gcc_version [expr (($major * 10000) + ($minor * 100) + $patchlevel)] +- verbose "base_gcc_version: '$base_gcc_version'" 2 +- +- return $base_gcc_version ++ return $major + } +diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp +index 5e4b32f76..297485b19 100644 +--- a/libstdc++-v3/testsuite/lib/libstdc++.exp ++++ b/libstdc++-v3/testsuite/lib/libstdc++.exp +@@ -326,8 +326,8 @@ proc libstdc++_init { testfile } { + + # For DTS testing, expose the system version of libstdc++.so as + # a preprocessor define. +- set base_gcc_version [get_dts_base_version] +- set cxxflags "$cxxflags -D__CXXSTDLIB_SO_VERSION__=$base_gcc_version" ++ set base_gcc_version [get_dts_base_major_version] ++ set cxxflags "$cxxflags -D__LIBSTDCXX_SO_VERSION=$base_gcc_version" + + # If a PCH file is available, use it. We must delay performing + # this check until $cxx and such have been initialized because we +-- +2.31.1 + diff --git a/0014-Conditionalize-tests-for-PR-libstdc-98466-on-__LIBST.patch b/0014-Conditionalize-tests-for-PR-libstdc-98466-on-__LIBST.patch new file mode 100644 index 0000000..0da5b14 --- /dev/null +++ b/0014-Conditionalize-tests-for-PR-libstdc-98466-on-__LIBST.patch @@ -0,0 +1,84 @@ +From fa770c25013df537c41d0929c4202b0a774a6a75 Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Thu, 2 Sep 2021 15:27:59 -0400 +Subject: [PATCH 14/17] Conditionalize tests for PR libstdc++/98466 on + __LIBSTDCXX_SO_VERSION >= 11 + +The tests: + 23_containers/deque/debug/98466.cc + 23_containers/unordered_map/debug/98466.cc +were added upstream 2021-01-01 as part of: + libstdc++: Implement N3644 for _GLIBCXX_DEBUG iterators + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=05a30af3f237984b4dcf1dbbc17fdac583c46506 +but fail when run in DTS against a system libstdc++.so +from an older GCC. + +In particular, they use the older implementation of _M_can_compare from +the dynamic library: + +$ eu-readelf -s 98466.exe | grep can_compare | c++filt + 11: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF __gnu_debug::_Safe_iterator_base::_M_can_compare(__gnu_debug::_Safe_iterator_base const&) const@GLIBCXX_3.4 (4) + 157: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF __gnu_debug::_Safe_iterator_base::_M_can_compare(__gnu_debug::_Safe_iterator_base const&) const@@GLIBCXX_3.4 +--- + .../testsuite/23_containers/deque/debug/98466.cc | 6 ++++++ + .../23_containers/unordered_map/debug/98466.cc | 12 ++++++++++++ + 2 files changed, 18 insertions(+) + +diff --git a/libstdc++-v3/testsuite/23_containers/deque/debug/98466.cc b/libstdc++-v3/testsuite/23_containers/deque/debug/98466.cc +index c2d793374..e92d719bf 100644 +--- a/libstdc++-v3/testsuite/23_containers/deque/debug/98466.cc ++++ b/libstdc++-v3/testsuite/23_containers/deque/debug/98466.cc +@@ -26,11 +26,17 @@ void test01() + { + typedef typename __gnu_debug::deque::iterator It; + It it = It(); ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( it == it ); ++#endif + + typedef typename __gnu_debug::deque::const_iterator Cit; + Cit cit = Cit(); ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( cit == cit ); ++#endif + } + + int main() +diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/98466.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/98466.cc +index cc22b9ff8..3a1b6cd32 100644 +--- a/libstdc++-v3/testsuite/23_containers/unordered_map/debug/98466.cc ++++ b/libstdc++-v3/testsuite/23_containers/unordered_map/debug/98466.cc +@@ -25,16 +25,28 @@ + void test01() + { + __gnu_debug::unordered_map::iterator it{}; ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( it == it ); ++#endif + + __gnu_debug::unordered_map::const_iterator cit{}; ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( cit == cit ); ++#endif + + __gnu_debug::unordered_map::local_iterator lit{}; ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( lit == lit ); ++#endif + + __gnu_debug::unordered_map::const_local_iterator clit{}; ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( clit == clit ); ++#endif + } + + int main() +-- +2.31.1 + diff --git a/0015-Conditionalize-test-for-PR-libstdc-87135-on-__LIBSTD.patch b/0015-Conditionalize-test-for-PR-libstdc-87135-on-__LIBSTD.patch new file mode 100644 index 0000000..087b20e --- /dev/null +++ b/0015-Conditionalize-test-for-PR-libstdc-87135-on-__LIBSTD.patch @@ -0,0 +1,41 @@ +From 992665eab6c48d6a4819f42509346d24b277485d Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Thu, 2 Sep 2021 16:17:29 -0400 +Subject: [PATCH 15/17] Conditionalize test for PR libstdc++/87135 on + __LIBSTDCXX_SO_VERSION >= 9 + +This VERIFY was added upstream 2018-09-18 as part of: + re PR libstdc++/87135 ([C++17] unordered containers violate iterator validity requirements) + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=a521e62615e439aea7502a52fd0f8a21eaa6304f + +but fails when run in DTS against a system libstdc++.so from an older GCC. + +In particular, rehash from the header is using + std::__detail::_Prime_rehash_policy::_M_next_bkt +from the system .so: + + 12: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::__detail::_Prime_rehash_policy::_M_next_bkt(unsigned long) const@GLIBCXX_3.4.18 (5) + 225: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::__detail::_Prime_rehash_policy::_M_next_bkt(unsigned long) const@@GLIBCXX_3.4.18 +--- + .../23_containers/unordered_map/modifiers/reserve.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc +index 58c8924b9..4c79ec2e6 100644 +--- a/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc ++++ b/libstdc++-v3/testsuite/23_containers/unordered_map/modifiers/reserve.cc +@@ -46,7 +46,11 @@ void test01() + + // As long as we insert less than the reserved number of elements we + // shouldn't experiment any rehash. ++ ++ // Fixed upstream in GCC 9 ++#if __LIBSTDCXX_SO_VERSION >= 9 + VERIFY( m.bucket_count() == bkts ); ++#endif + + VERIFY( m.load_factor() <= m.max_load_factor() ); + } +-- +2.31.1 + diff --git a/0016-Conditionalize-test-for-hashtable-bucket-sizes-on-__.patch b/0016-Conditionalize-test-for-hashtable-bucket-sizes-on-__.patch new file mode 100644 index 0000000..213a6f5 --- /dev/null +++ b/0016-Conditionalize-test-for-hashtable-bucket-sizes-on-__.patch @@ -0,0 +1,102 @@ +From db8f53df0be1daeda3159c1413549ff40696c710 Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Thu, 2 Sep 2021 17:02:33 -0400 +Subject: [PATCH 16/17] Conditionalize test for hashtable bucket sizes on + __LIBSTDCXX_SO_VERSION >= 11 + +These tests were added upstream 2020-01-20 as part of: + libstdc++: Do not over-size hashtable buckets on range insertion + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=6dcf042368012e2d7ce1626ee5d378bf3ad0ccfc + +but fail when run in DTS against a system libstdc++.so from an older GCC. + +In particular, _M_insert_unique_node from the header is using the older +implementation of + std::__detail::_Prime_rehash_policy::_M_need_rehash +from the dynamic library. + + 23: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::__detail::_Prime_rehash_policy::_M_need_rehash(unsigned long, unsigned long, unsigned long) const@GLIBCXX_3.4.18 (5) + 412: 0000000000000000 0 FUNC GLOBAL DEFAULT UNDEF std::__detail::_Prime_rehash_policy::_M_need_rehash(unsigned long, unsigned long, unsigned long) const@@GLIBCXX_3.4.18 +--- + .../23_containers/unordered_set/cons/bucket_hint.cc | 10 ++++++++++ + .../23_containers/unordered_set/modifiers/insert.cc | 9 +++++++++ + 2 files changed, 19 insertions(+) + +diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/cons/bucket_hint.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/cons/bucket_hint.cc +index a3b014a3a..af231e54e 100644 +--- a/libstdc++-v3/testsuite/23_containers/unordered_set/cons/bucket_hint.cc ++++ b/libstdc++-v3/testsuite/23_containers/unordered_set/cons/bucket_hint.cc +@@ -29,7 +29,11 @@ void test01() + a.reserve(2); + + std::unordered_set b({ 0, 1, 0, 1, 0, 1, 0, 1 }, a.bucket_count()); ++ ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( b.bucket_count() == a.bucket_count() ); ++#endif + } + + void test02() +@@ -40,7 +44,10 @@ void test02() + std::vector v { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }; + + std::unordered_set b(v.begin(), v.end(), a.bucket_count()); ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( b.bucket_count() == a.bucket_count() ); ++#endif + } + + void test03() +@@ -51,7 +58,10 @@ void test03() + std::forward_list fl { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 }; + + std::unordered_set b(fl.begin(), fl.end(), a.bucket_count()); ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( b.bucket_count() == a.bucket_count() ); ++#endif + } + + int main() +diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc +index 015c2f872..aae8298ae 100644 +--- a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc ++++ b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/insert.cc +@@ -30,7 +30,10 @@ void test01() + + auto bkt_count = a.bucket_count(); + a.insert({ 0, 1, 0, 1, 0, 1, 0, 1 }); ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( a.bucket_count() == bkt_count ); ++#endif + } + + void test02() +@@ -42,7 +45,10 @@ void test02() + + auto bkt_count = a.bucket_count(); + a.insert(v.begin(), v.end()); ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( a.bucket_count() == bkt_count ); ++#endif + } + + void test03() +@@ -54,7 +60,10 @@ void test03() + + auto bkt_count = a.bucket_count(); + a.insert(fl.begin(), fl.end()); ++ // Fixed upstream in GCC 11 ++#if __LIBSTDCXX_SO_VERSION >= 11 + VERIFY( a.bucket_count() == bkt_count ); ++#endif + } + + int main() +-- +2.31.1 + diff --git a/0017-Conditionalize-test-for-PR-libstdc-71181-on-__LIBSTD.patch b/0017-Conditionalize-test-for-PR-libstdc-71181-on-__LIBSTD.patch new file mode 100644 index 0000000..d18de1d --- /dev/null +++ b/0017-Conditionalize-test-for-PR-libstdc-71181-on-__LIBSTD.patch @@ -0,0 +1,33 @@ +From 102adc148612b50a4e3f12a88871ddc47bfb469e Mon Sep 17 00:00:00 2001 +From: David Malcolm +Date: Thu, 2 Sep 2021 17:17:50 -0400 +Subject: [PATCH 17/17] Conditionalize test for PR libstdc++/71181 on + __LIBSTDCXX_SO_VERSION >= 7 + +This test was added upstream 2016-06-20 as part of: + re PR libstdc++/71181 (Reserving in unordered_map doesn't reserve enough) + https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=29dbb034cb3199167a9d0aaed040733c72326eed + +but fails when run in DTS against a system libstdc++.so from an older GCC. +--- + .../testsuite/23_containers/unordered_set/hash_policy/71181.cc | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/71181.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/71181.cc +index 324d735b8..b2dcd0137 100644 +--- a/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/71181.cc ++++ b/libstdc++-v3/testsuite/23_containers/unordered_set/hash_policy/71181.cc +@@ -39,7 +39,10 @@ template + + us.insert(nb_insert); + ++ // Fixed upstream in GCC 7 ++#if __LIBSTDCXX_SO_VERSION >= 7 + VERIFY( us.bucket_count() == bkts ); ++#endif + } + } + +-- +2.31.1 + diff --git a/0018-Use-CXX11-ABI.patch b/0018-Use-CXX11-ABI.patch new file mode 100644 index 0000000..9c24648 --- /dev/null +++ b/0018-Use-CXX11-ABI.patch @@ -0,0 +1,13 @@ +diff --git a/gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-3.C b/gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-3.C +index 47f97dcb636..66f07aaa749 100644 +--- a/gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-3.C ++++ b/gcc/testsuite/g++.dg/warn/Wfree-nonheap-object-3.C +@@ -5,6 +5,8 @@ + { dg-options "-O2 -Wall" } + { dg-skip-if "requires hosted libstdc++ for string" { ! hostedlib } } */ + ++#define _GLIBCXX_USE_CXX11_ABI 1 ++ + #include + #include + diff --git a/0020-more-fixes.patch b/0020-more-fixes.patch new file mode 100644 index 0000000..d123161 --- /dev/null +++ b/0020-more-fixes.patch @@ -0,0 +1,12 @@ +diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c +index b64e71dae22..5bf47b20820 100644 +--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c ++++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-7.c +@@ -12,7 +12,6 @@ + jump threading opportunities. Skip the later tests on aarch64. */ + /* { dg-final { scan-tree-dump-not "Jumps threaded" "dom3" { target { ! aarch64*-*-* } } } } */ + /* { dg-final { scan-tree-dump "Jumps threaded: 9" "thread2" { target { ! aarch64*-*-* } } } } */ +-/* { dg-final { scan-tree-dump "Jumps threaded: 17" "thread2" { target { aarch64*-*-* } } } } */ + + enum STATE { + S0=0, diff --git a/0021-libstdc++-disable-tests.patch b/0021-libstdc++-disable-tests.patch new file mode 100644 index 0000000..3416e48 --- /dev/null +++ b/0021-libstdc++-disable-tests.patch @@ -0,0 +1,424 @@ +See https://bugzilla.redhat.com/show_bug.cgi?id=2095749#c3 + +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/char/2.cc +index 071597b4dd3..22cfdc7415b 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get/char/2.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get/char/2.cc +@@ -99,5 +99,7 @@ void test02() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test02(); ++#endif + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc +index ec0f943dd73..6c7c0c60ed0 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get/char/3.cc +@@ -351,6 +351,8 @@ test01() + int + main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/char/4.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/char/4.cc +index d0619f9de1f..499871bf5b4 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get/char/4.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get/char/4.cc +@@ -238,6 +238,8 @@ test01() + int + main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/char/71367.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/char/71367.cc +index 9171b7d5a17..9c6d1794991 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get/char/71367.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get/char/71367.cc +@@ -62,6 +62,8 @@ test01() + int + main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/char/71557.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/char/71557.cc +index 9d004b05e87..9eeff07aaf3 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get/char/71557.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get/char/71557.cc +@@ -91,6 +91,8 @@ test01() + int + main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc +index 45d4edeca00..6e2efad56d4 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/3.cc +@@ -351,6 +351,8 @@ test01() + int + main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/4.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/4.cc +index 0518842692f..485c1b41d1b 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/4.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/4.cc +@@ -238,6 +238,8 @@ test01() + int + main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71367.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71367.cc +index 456472601be..180255e948e 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71367.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71367.cc +@@ -62,6 +62,8 @@ test01() + int + main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71557.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71557.cc +index 7c5a829fa60..38673aac17b 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71557.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/71557.cc +@@ -91,6 +91,8 @@ test01() + int + main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/6.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/6.cc +index e50afa6aa73..2f326f85afe 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/6.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/6.cc +@@ -74,6 +74,8 @@ void test01() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/6.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/6.cc +index f6e32b7f781..54a921e243b 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/6.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/6.cc +@@ -74,6 +74,8 @@ void test01() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/ws/char/lwg415.cc b/libstdc++-v3/testsuite/27_io/basic_istream/ws/char/lwg415.cc +index fe6980dff29..0a033b81138 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_istream/ws/char/lwg415.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_istream/ws/char/lwg415.cc +@@ -71,7 +71,9 @@ test03() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); + test02(); + test03(); ++#endif + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/lwg415.cc b/libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/lwg415.cc +index fd040098b40..3adabc60221 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/lwg415.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_istream/ws/wchar_t/lwg415.cc +@@ -71,7 +71,9 @@ test03() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); + test02(); + test03(); ++#endif + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/noreplace.cc b/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/noreplace.cc +index e39f5928a1f..22421b158cb 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/noreplace.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ofstream/open/char/noreplace.cc +@@ -15,6 +15,7 @@ + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + #if __cpp_lib_ios_noreplace + std::ios::openmode noreplace = std::ios::noreplace; + #else +@@ -26,4 +27,5 @@ int main() + of.close(); + of.open("noreplace", noreplace); + VERIFY( ! of.is_open() ); ++#endif + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc b/libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc +index 77f11865ac4..07748578417 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc +@@ -15,6 +15,7 @@ + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + #if __cpp_lib_ios_noreplace + std::wios::openmode noreplace = std::wios::noreplace; + #else +@@ -26,4 +27,5 @@ int main() + of.close(); + of.open("noreplace", noreplace); + VERIFY( ! of.is_open() ); ++#endif + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/n3168.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/n3168.cc +index 12da0b1f011..689ee0ee85b 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/n3168.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/n3168.cc +@@ -98,6 +98,8 @@ test02() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); + test02(); ++#endif + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/n3168.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/n3168.cc +index 652f46f615c..abe55ca1285 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/n3168.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/n3168.cc +@@ -96,6 +96,8 @@ test02() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); + test02(); ++#endif + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/n3168.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/n3168.cc +index 8c2fe85db36..92fb45495c1 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/n3168.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/n3168.cc +@@ -59,6 +59,8 @@ test02() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); + test02(); ++#endif + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/n3168.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/n3168.cc +index 887a9a773d1..efb0c2e878a 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/n3168.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/n3168.cc +@@ -59,6 +59,8 @@ test02() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); + test02(); ++#endif + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc +index 39ff1761c55..9583c630fa8 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/char/2.cc +@@ -91,6 +91,8 @@ static bool ampm_time_format() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test02(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc +index 228d61f1e41..a1c3265155f 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get_time/wchar_t/2.cc +@@ -91,6 +91,8 @@ static bool ampm_time_format() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test02(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/2.cc b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/2.cc +index adbf7e7e733..4d6b4e2ec96 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/2.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get/wchar_t/2.cc +@@ -99,5 +99,7 @@ void test02() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test02(); ++#endif + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/2.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/2.cc +index de7a371c1c4..d5fc73d1a36 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/2.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ostream/flush/char/2.cc +@@ -59,7 +59,9 @@ void test02() + + VERIFY( os.good() ); + VERIFY( buf.sync_called() ); ++#if __LIBSTDCXX_SO_VERSION >= 8 + VERIFY( buf_tie.sync_called() ); ++#endif + } + + void +@@ -80,7 +82,9 @@ test03() + + VERIFY( os.rdstate() & std::ios_base::eofbit ); + VERIFY( !buf.sync_called() ); ++#if __LIBSTDCXX_SO_VERSION >= 8 + VERIFY( !buf_tie.sync_called() ); ++#endif + } + + int main() +diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/2.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/2.cc +index b330be46afa..40b9dfdb61b 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/2.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ostream/flush/wchar_t/2.cc +@@ -57,7 +57,9 @@ void test02() + + VERIFY( os.good() ); + VERIFY( buf.sync_called() ); ++#if __LIBSTDCXX_SO_VERSION >= 8 + VERIFY( buf_tie.sync_called() ); ++#endif + } + + void +@@ -78,7 +80,9 @@ test03() + + VERIFY( os.rdstate() & std::ios_base::eofbit ); + VERIFY( !buf.sync_called() ); ++#if __LIBSTDCXX_SO_VERSION >= 8 + VERIFY( !buf_tie.sync_called() ); ++#endif + } + + int main() +diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/exceptions_badbit_throw.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/exceptions_badbit_throw.cc +index 138648f5264..70f651818ba 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/exceptions_badbit_throw.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/char/exceptions_badbit_throw.cc +@@ -73,7 +73,9 @@ void test02() + // libstdc++/9546 + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); + test02(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/exceptions_badbit_throw.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/exceptions_badbit_throw.cc +index 731df74de9f..b6d31711910 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/exceptions_badbit_throw.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ostream/seekp/wchar_t/exceptions_badbit_throw.cc +@@ -73,7 +73,9 @@ void test02() + // libstdc++/9546 + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); + test02(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/exceptions_badbit_throw.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/exceptions_badbit_throw.cc +index 2eccfdceb94..98d57ff4259 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/exceptions_badbit_throw.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/char/exceptions_badbit_throw.cc +@@ -47,6 +47,8 @@ void test01() + // libstdc++/9546 + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/exceptions_badbit_throw.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/exceptions_badbit_throw.cc +index 92161b22632..9d75c2c69fb 100644 +--- a/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/exceptions_badbit_throw.cc ++++ b/libstdc++-v3/testsuite/27_io/basic_ostream/tellp/wchar_t/exceptions_badbit_throw.cc +@@ -47,6 +47,8 @@ void test01() + // libstdc++/9546 + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + return 0; + } +diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/2.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/2.cc +index d4cd0dc3040..a60acf00b04 100644 +--- a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/2.cc ++++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/2.cc +@@ -44,5 +44,7 @@ void test01() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + } +diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/2.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/2.cc +index c639ce54906..5c749922016 100644 +--- a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/2.cc ++++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/wchar_t/2.cc +@@ -45,5 +45,7 @@ void test01() + + int main() + { ++#if __LIBSTDCXX_SO_VERSION >= 8 + test01(); ++#endif + } diff --git a/0022-libstdc++-revert-behavior.patch b/0022-libstdc++-revert-behavior.patch new file mode 100644 index 0000000..797894c --- /dev/null +++ b/0022-libstdc++-revert-behavior.patch @@ -0,0 +1,72 @@ +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12791.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12791.cc +index fa740b42b88..5d808ee51ee 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12791.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/char/12791.cc +@@ -39,14 +39,14 @@ void test01() + const ios_base::iostate good = ios_base::goodbit; + ios_base::iostate errorstate = good; + +- iss.str("62/04/71"); ++ iss.str("60/04/71"); + iterator_type is_it01(iss); + tm time01; + errorstate = good; + iterator_type ret01 = tim_get.get_date(is_it01, end, iss, errorstate, + &time01); + VERIFY( errorstate == ios_base::failbit ); +- VERIFY( *ret01 == '2' ); ++ VERIFY( *ret01 == '6' ); + + iss.str("04/38/71"); + iterator_type is_it02(iss); +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12791.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12791.cc +index 07f4c369e58..c975c8523d8 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12791.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get_date/wchar_t/12791.cc +@@ -40,14 +40,14 @@ void test01() + const ios_base::iostate good = ios_base::goodbit; + ios_base::iostate errorstate = good; + +- iss.str(L"62/04/71"); ++ iss.str(L"60/04/71"); + iterator_type is_it01(iss); + tm time01; + errorstate = good; + iterator_type ret01 = tim_get.get_date(is_it01, end, iss, errorstate, + &time01); + VERIFY( errorstate == ios_base::failbit ); +- VERIFY( *ret01 == L'2' ); ++ VERIFY( *ret01 == L'6' ); + + iss.str(L"04/38/71"); + iterator_type is_it02(iss); +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc +index e6f53de4a55..c9d9896a6c0 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/char/1.cc +@@ -76,8 +76,8 @@ void test01() + errorstate = good; + iterator_type ret03 = tim_get.get_year(is_it03, end, iss, errorstate, + &time03); +- VERIFY( time03.tm_year == 197 - 1900 ); +- VERIFY( errorstate == good ); ++ VERIFY( time03.tm_year == 3 ); ++ VERIFY( errorstate == ios_base::failbit ); + VERIFY( *ret03 == 'd' ); + + iss.str("71d71"); +diff --git a/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/1.cc b/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/1.cc +index ba95fb91520..e17712098f4 100644 +--- a/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/1.cc ++++ b/libstdc++-v3/testsuite/22_locale/time_get/get_year/wchar_t/1.cc +@@ -76,8 +76,8 @@ void test01() + errorstate = good; + iterator_type ret03 = tim_get.get_year(is_it03, end, iss, errorstate, + &time03); +- VERIFY( time03.tm_year == 197 - 1900 ); +- VERIFY( errorstate == good ); ++ VERIFY( time03.tm_year == 3 ); ++ VERIFY( errorstate == ios_base::failbit ); + VERIFY( *ret03 == L'd' ); + + iss.str(L"71d71"); diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..3442642 --- /dev/null +++ b/gating.yaml @@ -0,0 +1,6 @@ +--- !Policy +product_versions: + - rhel-10 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional} diff --git a/gcc-toolset-15-gcc.spec b/gcc-toolset-15-gcc.spec new file mode 100644 index 0000000..7d40857 --- /dev/null +++ b/gcc-toolset-15-gcc.spec @@ -0,0 +1,2907 @@ +%if 0%{?rhel} < 10 +%global have_scl_utils 1 +%else +%global have_scl_utils 0 +%endif +%global gts_ver 15 +%{?scl_package:%global scl gcc-toolset-%{gts_ver}} +%global scl_prefix gcc-toolset-%{gts_ver}- +%if %have_scl_utils +BuildRequires: scl-utils-build +%else +BuildRequires: gcc-toolset-%{gts_ver}-devel +%endif +%global __python /usr/bin/python3 +%{?scl:%global __strip %%{_scl_root}/usr/bin/strip} +%{?scl:%global __objdump %%{_scl_root}/usr/bin/objdump} +%{?scl:%scl_package gcc} +%global DATE 20250521 +%global gitrev b9def1721b12cae307c1a1ebc49030fce6531dfa +%global gcc_version 15.1.1 +%global gcc_major 15 +# Note, gcc_release must be integer, if you want to add suffixes to +# %%{release}, append them after %%{gcc_release} on Release: line. +%global gcc_release 2 +%global nvptx_tools_gitrev 87ce9dc5999e5fca2e1d3478a30888d9864c9804 +%global newlib_cygwin_gitrev d35cc82b5ec15bb8a5fe0fe11e183d1887992e99 +%global isl_version 0.24 +%global mpc_version 1.0.3 +%global mpfr_version 3.1.4 +%global gmp_version 6.1.0 +%global doxygen_version 1.8.0 +%global _unpackaged_files_terminate_build 0 +%if 0%{?fedora:1} +%global _performance_build 1 +# Hardening slows the compiler way too much. +%undefine _hardened_build +%endif +%undefine _auto_set_build_flags +%if 0%{?fedora} > 27 || 0%{?rhel} > 7 +# Until annobin is fixed (#1519165). +%undefine _annotated_build +%endif +# Strip will fail on nvptx-none *.a archives and the brp-* scripts will +# fail randomly depending on what is stripped last. +%if 0%{?__brp_strip_static_archive:1} +%global __brp_strip_static_archive %{__brp_strip_static_archive} || : +%endif +%if 0%{?__brp_strip_lto:1} +%global __brp_strip_lto %{__brp_strip_lto} || : +%endif +%if 0%{?fedora} < 32 && 0%{?rhel} < 8 +%global multilib_64_archs sparc64 ppc64 ppc64p7 x86_64 +%else +%global multilib_64_archs sparc64 ppc64 ppc64p7 x86_64 +%endif +%if 0%{?rhel} > 7 +%global build_ada 0 +%global build_objc 0 +%global build_go 0 +%global build_d 0 +%global build_m2 0 +%global build_cobol 0 +%else +%ifarch %{ix86} x86_64 ia64 ppc %{power64} alpha s390x %{arm} aarch64 riscv64 +%global build_ada 0 +%else +%global build_ada 0 +%endif +%global build_objc 0 +%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips} riscv64 +%global build_go 0 +%else +%global build_go 0 +%endif +%ifarch %{ix86} x86_64 %{arm} aarch64 %{mips} s390 s390x riscv64 +%global build_d 1 +%else +%global build_d 0 +%endif +%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips} riscv64 +%global build_m2 1 +%else +%global build_m2 0 +%endif +%ifarch x86_64 aarch64 +%global build_cobol 0 +%else +%global build_cobol 0 +%endif +%endif +%ifarch %{ix86} x86_64 ia64 ppc64le +%global build_libquadmath 1 +%else +%global build_libquadmath 0 +%endif +%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 riscv64 +%global build_libasan 1 +%else +%global build_libasan 0 +%endif +%ifarch x86_64 aarch64 +%global build_libhwasan 1 +%else +%global build_libhwasan 0 +%endif +%ifarch x86_64 ppc64 ppc64le aarch64 s390x riscv64 +%global build_libtsan 1 +%else +%global build_libtsan 0 +%endif +%ifarch x86_64 ppc64 ppc64le aarch64 s390x riscv64 +%global build_liblsan 1 +%else +%global build_liblsan 0 +%endif +%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 riscv64 +%global build_libubsan 1 +%else +%global build_libubsan 0 +%endif +%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips} riscv64 +%global build_libatomic 1 +%else +%global build_libatomic 0 +%endif +%ifarch %{ix86} x86_64 %{arm} alpha ppc ppc64 ppc64le ppc64p7 s390 s390x aarch64 riscv64 +%global build_libitm 1 +%else +%global build_libitm 0 +%endif +%if 0%{?rhel} > 8 +%global build_isl 0 +%else +%global build_isl 1 +%endif +%global build_libstdcxx_docs 1 +%ifarch %{ix86} x86_64 ppc ppc64 ppc64le ppc64p7 s390 s390x %{arm} aarch64 %{mips} riscv64 +%global attr_ifunc 1 +%else +%global attr_ifunc 0 +%endif +%ifarch x86_64 ppc64le +%global build_offload_nvptx 1 +%else +%global build_offload_nvptx 0 +%endif +%ifarch x86_64 +%global build_offload_amdgcn 0 +%else +%global build_offload_amdgcn 0 +%endif +%if 0%{?fedora} < 32 && 0%{?rhel} < 8 +%ifarch s390x +%global multilib_32_arch s390 +%endif +%endif +%ifarch sparc64 +%global multilib_32_arch sparcv9 +%endif +%ifarch ppc64 ppc64p7 +%global multilib_32_arch ppc +%endif +%ifarch x86_64 +%global multilib_32_arch i686 +%endif +%if 0%{?fedora} >= 36 || 0%{?rhel} >= 8 +%global build_annobin_plugin 1 +%else +%global build_annobin_plugin 0 +%endif +Summary: GCC version %{gcc_major} +Name: %{?scl_prefix}gcc +Version: %{gcc_version} +Release: %{gcc_release}%{?dist} +# License notes for some of the less obvious ones: +# gcc/doc/cppinternals.texi: Linux-man-pages-copyleft-2-para +# isl: MIT, BSD-2-Clause +# libcody: Apache-2.0 +# libphobos/src/etc/c/curl.d: curl +# All of the remaining license soup is in newlib. +License: GPL-3.0-or-later AND LGPL-3.0-or-later AND (GPL-3.0-or-later WITH GCC-exception-3.1) AND (GPL-3.0-or-later WITH Texinfo-exception) AND (LGPL-2.1-or-later WITH GCC-exception-2.0) AND (GPL-2.0-or-later WITH GCC-exception-2.0) AND (GPL-2.0-or-later WITH GNU-compiler-exception) AND BSL-1.0 AND GFDL-1.3-or-later AND Linux-man-pages-copyleft-2-para AND SunPro AND BSD-1-Clause AND BSD-2-Clause AND BSD-2-Clause-Views AND BSD-3-Clause AND BSD-4-Clause AND BSD-Source-Code AND Zlib AND MIT AND Apache-2.0 AND (Apache-2.0 WITH LLVM-Exception) AND ZPL-2.1 AND ISC AND LicenseRef-Fedora-Public-Domain AND HP-1986 AND curl AND Martin-Birgmeier AND HPND-Markus-Kuhn AND dtoa AND SMLNJ AND AMD-newlib AND OAR AND HPND-merchantability-variant AND HPND-Intel +# The source for this package was pulled from upstream's vcs. +# %%{gitrev} is some commit from the +# https://gcc.gnu.org/git/?p=gcc.git;h=refs/vendors/redhat/heads/gcc-%%{gcc_major}-branch +# branch. Use the following command to generate the tarball: +# ./update-gcc.sh %%{gitrev} +# optionally if say /usr/src/gcc/.git/ is an existing gcc git clone +# ./update-gcc.sh %%{gitrev} /usr/src/gcc/.git/ +# to speed up the clone operations. Note, %%{gitrev} macro in +# gcc.spec shouldn't be updated before running the script, the script +# will update it, fill in some %%changelog details etc. +Source0: gcc-%{version}-%{DATE}.tar.xz +Source1: https://gcc.gnu.org/pub/gcc/infrastructure/isl-%{isl_version}.tar.bz2 +#Source2: http://www.multiprecision.org/mpc/download/mpc-%%{mpc_version}.tar.gz +#Source3: ftp://ftp.stack.nl/pub/users/dimitri/doxygen-%%{doxygen_version}.src.tar.gz +# The source for nvptx-tools package was pulled from upstream's vcs. Use the +# following commands to generate the tarball: +# git clone --depth 1 https://github.com/MentorEmbedded/nvptx-tools.git nvptx-tools-dir.tmp +# git --git-dir=nvptx-tools-dir.tmp/.git fetch --depth 1 origin %%{nvptx_tools_gitrev} +# git --git-dir=nvptx-tools-dir.tmp/.git archive --prefix=nvptx-tools-%%{nvptx_tools_gitrev}/ %%{nvptx_tools_gitrev} | xz -9e > nvptx-tools-%%{nvptx_tools_gitrev}.tar.xz +# rm -rf nvptx-tools-dir.tmp +Source4: nvptx-tools-%{nvptx_tools_gitrev}.tar.xz +# The source for nvptx-newlib package was pulled from upstream's vcs. Use the +# following commands to generate the tarball: +# git clone https://sourceware.org/git/newlib-cygwin.git newlib-cygwin-dir.tmp +# git --git-dir=newlib-cygwin-dir.tmp/.git archive --prefix=newlib-cygwin-%%{newlib_cygwin_gitrev}/ %%{newlib_cygwin_gitrev} ":(exclude)newlib/libc/sys/linux/include/rpc/*.[hx]" | xz -9e > newlib-cygwin-%%{newlib_cygwin_gitrev}.tar.xz +# rm -rf newlib-cygwin-dir.tmp +Source5: newlib-cygwin-%{newlib_cygwin_gitrev}.tar.xz +#Source7: http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-%%{mpfr_version}.tar.bz2 +#Source8: http://gcc.gnu.org/pub/gcc/infrastructure/gmp-%%{gmp_version}.tar.bz2 +URL: http://gcc.gnu.org +# Need binutils with -pie support >= 2.14.90.0.4-4 +# Need binutils which can omit dot symbols and overlap .opd on ppc64 >= 2.15.91.0.2-4 +# Need binutils which handle -msecure-plt on ppc >= 2.16.91.0.2-2 +# Need binutils which support .weakref >= 2.16.91.0.3-1 +# Need binutils which support --hash-style=gnu >= 2.17.50.0.2-7 +# Need binutils which support mffgpr and mftgpr >= 2.17.50.0.2-8 +# Need binutils which support --build-id >= 2.17.50.0.17-3 +# Need binutils which support %%gnu_unique_object >= 2.19.51.0.14 +# Need binutils which support .cfi_sections >= 2.19.51.0.14-33 +# Need binutils which support --no-add-needed >= 2.20.51.0.2-12 +# Need binutils which support -plugin +# Need binutils which support .loc view >= 2.30 +# Need binutils which support --generate-missing-build-notes=yes >= 2.31 +# Need binutils which support .base64 >= 2.43 +BuildRequires: %{?scl_prefix}binutils >= 2.43 +# For VTA guality testing +%if 0%{?rhel} >= 9 +BuildRequires: gdb >= 7.4.50 +%else +BuildRequires: %{?scl_prefix}gdb >= 7.4.50 +%endif +# While gcc doesn't include statically linked binaries, during testing +# -static is used several times. +BuildRequires: glibc-static +BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, sharutils +BuildRequires: texinfo, texinfo-tex, /usr/bin/pod2man +#BuildRequires: systemtap-sdt-devel >= 1.3 +#BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 3.1.0, libmpc-devel >= 0.8.1 +#BuildRequires: python3-devel, /usr/bin/python +BuildRequires: gcc, gcc-c++, make +# Make sure pthread.h doesn't contain __thread tokens +# Make sure glibc supports stack protector +# Make sure glibc supports DT_GNU_HASH +BuildRequires: glibc-devel >= 2.4.90-13 +BuildRequires: elfutils-devel >= 0.147 +BuildRequires: elfutils-libelf-devel >= 0.147 +BuildRequires: libzstd-devel +%ifarch ppc ppc64 ppc64le ppc64p7 s390 s390x sparc sparcv9 alpha +# Make sure glibc supports TFmode long double +BuildRequires: glibc >= 2.3.90-35 +%endif +%ifarch %{multilib_64_archs} +# Ensure glibc{,-devel} is installed for both multilib arches +BuildRequires: /usr/lib/libc.so /usr/lib64/libc.so +%endif +%ifarch ia64 +BuildRequires: libunwind >= 0.98 +%endif +# Need .eh_frame ld optimizations +# Need proper visibility support +# Need -pie support +# Need --as-needed/--no-as-needed support +# On ppc64, need omit dot symbols support and --non-overlapping-opd +# Need binutils that owns /usr/bin/c++filt +# Need binutils that support .weakref +# Need binutils that supports --hash-style=gnu +# Need binutils that support mffgpr/mftgpr +# Need binutils that support --build-id +# Need binutils that support %%gnu_unique_object +# Need binutils that support .cfi_sections +# Need binutils that support --no-add-needed +# Need binutils that support -plugin +# Need binutils that support .loc view >= 2.30 +# Need binutils which support --generate-missing-build-notes=yes >= 2.31 +# Need binutils that support .base64 >= 2.43 +Requires: %{?scl_prefix}binutils >= 2.43 +# Make sure gdb will understand DW_FORM_strp +Conflicts: gdb < 5.1-2 +Requires: glibc-devel >= 2.2.90-12 +%ifarch ppc ppc64 ppc64le ppc64p7 s390 s390x sparc sparcv9 alpha +# Make sure glibc supports TFmode long double +Requires: glibc >= 2.3.90-35 +%endif +BuildRequires: gmp-devel >= 4.3.2 +BuildRequires: mpfr-devel >= 3.1.0 +BuildRequires: libmpc-devel >= 0.8.1 +%if %{build_libstdcxx_docs} +BuildRequires: libxml2 +BuildRequires: graphviz +BuildRequires: doxygen >= 1.7.1 +BuildRequires: dblatex, texlive-collection-latex, docbook-style-xsl +%endif + +Requires: libgcc >= 4.1.2-43 +Requires: libgomp >= 4.4.4-13 +# lto-wrapper invokes make +Requires: make +%if %have_scl_utils +%{?scl:Requires:%scl_runtime} +%endif +AutoReq: true +# Various libraries are imported. #1859893 asks us to list them all. +Provides: bundled(libiberty) +Provides: bundled(libbacktrace) +Provides: bundled(libffi) +Provides: gcc(major) = %{gcc_major} +%ifarch sparc64 ppc64 ppc64le s390x x86_64 ia64 aarch64 +Provides: liblto_plugin.so.0()(64bit) +%else +Provides: liblto_plugin.so.0 +%endif +%global oformat %{nil} +%global oformat2 %{nil} +%ifarch %{ix86} +%global oformat OUTPUT_FORMAT(elf32-i386) +%endif +%ifarch x86_64 +%global oformat OUTPUT_FORMAT(elf64-x86-64) +%global oformat2 OUTPUT_FORMAT(elf32-i386) +%endif +%ifarch ppc +%global oformat OUTPUT_FORMAT(elf32-powerpc) +%global oformat2 OUTPUT_FORMAT(elf64-powerpc) +%endif +%ifarch ppc64 +%global oformat OUTPUT_FORMAT(elf64-powerpc) +%global oformat2 OUTPUT_FORMAT(elf32-powerpc) +%endif +%ifarch s390 +%global oformat OUTPUT_FORMAT(elf32-s390) +%endif +%ifarch s390x +%global oformat OUTPUT_FORMAT(elf64-s390) +%global oformat2 OUTPUT_FORMAT(elf32-s390) +%endif +%ifarch ia64 +%global oformat OUTPUT_FORMAT(elf64-ia64-little) +%endif +%ifarch ppc64le +%global oformat OUTPUT_FORMAT(elf64-powerpcle) +%endif +%ifarch aarch64 +%global oformat OUTPUT_FORMAT(elf64-littleaarch64) +%endif + +Patch0: gcc15-hack.patch +Patch2: gcc15-sparc-config-detection.patch +Patch3: gcc15-libgomp-omp_h-multilib.patch +Patch4: gcc15-libtool-no-rpath.patch +Patch5: gcc15-isl-dl.patch +Patch6: gcc15-isl-dl2.patch +Patch7: gcc15-libstdc++-docs.patch +Patch8: gcc15-no-add-needed.patch +Patch9: gcc15-Wno-format-security.patch +Patch10: gcc15-rh1574936.patch +Patch11: gcc15-d-shared-libphobos.patch +Patch12: gcc15-pr119006.patch + +Patch50: isl-rh2155127.patch + +Patch100: gcc15-fortran-fdec-duplicates.patch + +Patch1000: gcc15-libstdc++-compat.patch +Patch1001: gcc15-libgfortran-compat.patch +Patch1002: gcc15-nvptx-offload.patch + +Patch3000: 0001-basic_string-reserve-n-semantics-are-not-available-i.patch +Patch3001: 0004-operator-istream-char-N-eofbit-fixes-are-not-availab.patch +Patch3002: 0005-Disable-tests-for-PR-libstdc-79820-and-PR-libstdc-81.patch +Patch3003: 0006-Don-t-assume-has_facet-codecvt_c16-when-run-against-.patch +Patch3004: 0008-testsuite-build-plugins-with-std-c-11.patch +Patch3006: 0010-Don-t-verify-exception-handling-in-basic_filebuf-clo.patch +Patch3007: 0011-Add-dts.exp-and-use-it-to-fix-22_locale-messages-136.patch +Patch3008: 0012-dts.exp-use-usr-bin-gcc.patch +Patch3009: 0013-Rename-__CXXSTDLIB_SO_VERSION__-to-__LIBSTDCXX_SO_VE.patch +Patch3010: 0014-Conditionalize-tests-for-PR-libstdc-98466-on-__LIBST.patch +Patch3011: 0015-Conditionalize-test-for-PR-libstdc-87135-on-__LIBSTD.patch +Patch3012: 0016-Conditionalize-test-for-hashtable-bucket-sizes-on-__.patch +Patch3013: 0017-Conditionalize-test-for-PR-libstdc-71181-on-__LIBSTD.patch +Patch3014: gcc15-dg-ice-fixes.patch +Patch3015: 0018-Use-CXX11-ABI.patch +Patch3017: 0020-more-fixes.patch +Patch3018: 0021-libstdc++-disable-tests.patch + +%if 0%{?rhel} == 10 +%global nonsharedver 140 +%endif +%if 0%{?rhel} == 9 +%global nonsharedver 110 +%endif +%if 0%{?rhel} == 8 +%global nonsharedver 80 +%endif +%if 0%{?rhel} == 7 +%global nonsharedver 48 +%endif +%if 0%{?rhel} == 6 +%global nonsharedver 44 +%endif + +%if 0%{?scl:1} +%global _gnu %{nil} +%else +%global _gnu -gnueabi +%endif +%ifarch sparcv9 +%global gcc_target_platform sparc64-%{_vendor}-%{_target_os} +%endif +%ifarch ppc ppc64p7 +%global gcc_target_platform ppc64-%{_vendor}-%{_target_os} +%endif +%ifnarch sparcv9 ppc ppc64p7 +%global gcc_target_platform %{_target_platform} +%endif + +%description +The %{?scl_prefix}gcc%{!?scl:13} package contains the GNU Compiler Collection +version %{gcc_major}. + +%package -n libgcc +Summary: GCC version %{gcc_major} shared support library +Autoreq: false + +%description -n libgcc +This package contains GCC shared support library which is needed +e.g. for exception handling support. + +%package c++ +Summary: C++ support for GCC version %{gcc_major} +Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} +Requires: libstdc++ +Requires: %{?scl_prefix}libstdc++%{!?scl:13}-devel = %{version}-%{release} +Autoreq: true + +%description c++ +This package adds C++ support to the GNU Compiler Collection +version %{gcc_major}. It includes support for most of the current C++ +specification and a lot of support for the upcoming C++ specification. + +%package -n libstdc++ +Summary: GNU Standard C++ Library +Autoreq: true +Requires: glibc >= 2.10.90-7 + +%description -n libstdc++ +The libstdc++ package contains a rewritten standard compliant GCC Standard +C++ Library. + +%package -n %{?scl_prefix}libstdc++%{!?scl:13}-devel +Summary: Header files and libraries for C++ development +Requires: libstdc++%{?_isa} +Autoreq: true + +%description -n %{?scl_prefix}libstdc++%{!?scl:13}-devel +This is the GNU implementation of the standard C++ libraries. This +package includes the header files and libraries needed for C++ +development. This includes rewritten implementation of STL. + +%package -n %{?scl_prefix}libstdc++-docs +Summary: Documentation for the GNU standard C++ library +Autoreq: true + +%description -n %{?scl_prefix}libstdc++-docs +Manual, doxygen generated API information and Frequently Asked Questions +for the GNU standard C++ library. + +%package gfortran +Summary: Fortran support for GCC %{gcc_major} +Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} +Requires: libgfortran >= 8.1.1 +Autoreq: true +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info + +%if %{build_libquadmath} +%if 0%{!?scl:1} +Requires: libquadmath +%endif +Requires: %{?scl_prefix}libquadmath-devel = %{version}-%{release} +%endif +Autoreq: true + +%description gfortran +The %{?scl_prefix}gcc%{!?scl:13}-gfortran package provides support for compiling Fortran +programs with the GNU Compiler Collection. + + +%package gdb-plugin +Summary: GCC %{gcc_major} plugin for GDB +Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} + +%description gdb-plugin +This package contains GCC %{gcc_major} plugin for GDB C expression evaluation. + +%package -n %{?scl_prefix}libgccjit +Summary: Library for embedding GCC inside programs and libraries +Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} + +%description -n %{?scl_prefix}libgccjit +This package contains shared library with GCC %{gcc_major} JIT front-end. + +%package -n %{?scl_prefix}libgccjit-devel +Summary: Support for embedding GCC inside programs and libraries +Group: Development/Libraries +Requires: %{?scl_prefix}libgccjit = %{version}-%{release} +# We don't build it anymore. See #2213635/#2213634. +#Requires: %%{?scl_prefix}libgccjit-docs = %%{version}-%%{release} + +%description -n %{?scl_prefix}libgccjit-devel +This package contains header files for GCC %{gcc_major} JIT front end. + +%package -n %{?scl_prefix}libgccjit-docs +Summary: Documentation for embedding GCC inside programs and libraries +Group: Development/Libraries +BuildRequires: python3-sphinx +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info + +%description -n %{?scl_prefix}libgccjit-docs +This package contains documentation for GCC %{gcc_major} JIT front-end. + +%package -n libquadmath +Summary: GCC %{gcc_major} __float128 shared support library +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info + +%description -n libquadmath +This package contains GCC shared support library which is needed +for __float128 math support and for Fortran REAL*16 support. + +%package -n %{?scl_prefix}libquadmath-devel +Summary: GCC %{gcc_major} __float128 support +Group: Development/Libraries +%if 0%{!?scl:1} +Requires: %{?scl_prefix}libquadmath%{_isa} = %{version}-%{release} +%else +Requires: libquadmath%{_isa} +%endif +Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} + +%description -n %{?scl_prefix}libquadmath-devel +This package contains headers for building Fortran programs using +REAL*16 and programs using __float128 math. + +%package -n libitm +Summary: The GNU Transactional Memory library +Group: System Environment/Libraries +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info + +%description -n libitm +This package contains the GNU Transactional Memory library +which is a GCC transactional memory support runtime library. + +%package -n %{?scl_prefix}libitm-devel +Summary: The GNU Transactional Memory support +Requires: libitm%{_isa} >= 4.7.0-1 +Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} + +%description -n %{?scl_prefix}libitm-devel +This package contains headers and support files for the +GNU Transactional Memory library. + +%package plugin-devel +Summary: Support for compiling GCC plugins +Requires: %{?scl_prefix}gcc%{!?scl:13} = %{version}-%{release} +Requires: gmp-devel >= 4.3.2 +Requires: mpfr-devel >= 3.1.0 +Requires: libmpc-devel >= 0.8.1 + +%description plugin-devel +This package contains header files and other support files +for compiling GCC %{gcc_major} plugins. The GCC plugin ABI is currently +not stable, so plugins must be rebuilt any time GCC is updated. + +%package -n libatomic +Summary: The GNU Atomic library +Group: System Environment/Libraries +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info + +%description -n libatomic +This package contains the GNU Atomic library +which is a GCC support runtime library for atomic operations not supported +by hardware. + +%package -n %{?scl_prefix}libatomic-devel +Summary: The GNU Atomic static library +Requires: libatomic%{_isa} >= 4.8.0 + +%description -n %{?scl_prefix}libatomic-devel +This package contains GNU Atomic static libraries. + +%package -n libasan8 +Summary: The Address Sanitizer runtime library from GCC %{gcc_major} + +%description -n libasan8 +This package contains the Address Sanitizer library from GCC %{gcc_major} +which is used for -fsanitize=address instrumented programs. + +%package -n %{?scl_prefix}libasan-devel +Summary: The Address Sanitizer static library +Requires: libasan8%{_isa} >= 12.1.1 +Obsoletes: libasan5 <= 8.3.1 + +%description -n %{?scl_prefix}libasan-devel +This package contains Address Sanitizer static runtime library. + +%package -n libhwasan +Summary: The Hardware-assisted Address Sanitizer runtime library + +%description -n libhwasan +This package contains the Hardware-assisted Address Sanitizer library +which is used for -fsanitize=hwaddress instrumented programs. + +%package -n %{?scl_prefix}libhwasan-devel +Summary: The Hardware-assisted Address Sanitizer static library +Requires: libhwasan >= 13.1.1 + +%description -n %{?scl_prefix}libhwasan-devel +This package contains Hardware-assisted Address Sanitizer static runtime +library. + +%package -n libtsan2 +Summary: The Thread Sanitizer runtime library + +%description -n libtsan2 +This package contains the Thread Sanitizer library +which is used for -fsanitize=thread instrumented programs. + +%package -n %{?scl_prefix}libtsan-devel +Summary: The Thread Sanitizer static library +Requires: libtsan2%{_isa} >= 12.1.1 + +%description -n %{?scl_prefix}libtsan-devel +This package contains Thread Sanitizer static runtime library. + +%package -n libubsan1 +Summary: The Undefined Behavior Sanitizer runtime library + +%description -n libubsan1 +This package contains the Undefined Behavior Sanitizer library +which is used for -fsanitize=undefined instrumented programs. + +%package -n %{?scl_prefix}libubsan-devel +Summary: The Undefined Behavior Sanitizer static library +Requires: libubsan%{_isa} >= 8.3.1 +Obsoletes: libubsan1 <= 8.3.1 + +%description -n %{?scl_prefix}libubsan-devel +This package contains Undefined Behavior Sanitizer static runtime library. + +%package -n liblsan +Summary: The Leak Sanitizer runtime library +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info + +%description -n liblsan +This package contains the Leak Sanitizer library +which is used for -fsanitize=leak instrumented programs. + +%package -n %{?scl_prefix}liblsan-devel +Summary: The Leak Sanitizer static library +Requires: liblsan%{_isa} >= 5.1.1 + +%description -n %{?scl_prefix}liblsan-devel +This package contains Leak Sanitizer static runtime library. + +%package -n %{?scl_prefix}offload-nvptx +Summary: Offloading compiler to NVPTX +Requires: gcc >= 8.3.1 +Requires: libgomp-offload-nvptx >= 8.3.1 + +%description -n %{?scl_prefix}offload-nvptx +The gcc-offload-nvptx package provides offloading support for +NVidia PTX. OpenMP and OpenACC programs linked with -fopenmp will +by default add PTX code into the binaries, which can be offloaded +to NVidia PTX capable devices if available. + +%if %{build_annobin_plugin} +%package -n %{?scl_prefix}gcc-plugin-annobin +Summary: The annobin plugin for gcc, built by the installed version of gcc +Requires: %{?scl_prefix}gcc = %{version}-%{release} +BuildRequires: rpm-devel, binutils-devel, xz + +%description -n %{?scl_prefix}gcc-plugin-annobin +This package adds a version of the annobin plugin for gcc. This version +of the plugin is explicitly built by the same version of gcc that is installed +so that there cannot be any synchronization problems. +%endif + +%prep +%setup -q -n gcc-%{version}-%{DATE} -a 1 -a 4 -a 5 +%patch -P0 -p0 -b .hack~ +%patch -P2 -p0 -b .sparc-config-detection~ +%patch -P3 -p0 -b .libgomp-omp_h-multilib~ +%patch -P4 -p0 -b .libtool-no-rpath~ +%if %{build_isl} +%patch -P5 -p0 -b .isl-dl~ +%patch -P6 -p0 -b .isl-dl2~ +%endif +%if %{build_libstdcxx_docs} +%patch -P7 -p0 -b .libstdc++-docs~ +%endif +%patch -P8 -p0 -b .no-add-needed~ +%patch -P9 -p0 -b .Wno-format-security~ +%patch -P10 -p0 -b .rh1574936~ +%patch -P11 -p0 -b .d-shared-libphobos~ +%patch -P12 -p0 -b .pr119006~ + +%patch -P100 -p1 -b .fortran-fdec-duplicates~ + +%ifarch %{arm} +rm -f gcc/testsuite/go.test/test/fixedbugs/issue19182.go +%endif +%if 0%{?rhel} <= 8 +# Requires pthread_cond_clockwait, only present in glibc 2.30. +rm -f gcc/testsuite/g++.dg/tsan/pthread_cond_clockwait.C +%endif +#rm -f libphobos/testsuite/libphobos.gc/forkgc2.d +#rm -rf libphobos/testsuite/libphobos.gc + +%patch -P1000 -p0 -b .libstdc++-compat~ +%patch -P1001 -p0 -b .libgfortran-compat~ +%patch -P1002 -p0 -b .nvptx-compat~ + +%if %{build_isl} +%patch -P50 -p0 -b .isl-rh2155127~ +touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4 +%endif + +# Apply DTS-specific testsuite patches. +%patch -P3000 -p1 -b .dts-test-0~ +%patch -P3001 -p1 -b .dts-test-1~ +%patch -P3002 -p1 -b .dts-test-2~ +%patch -P3003 -p1 -b .dts-test-3~ +%patch -P3004 -p1 -b .dts-test-4~ +%patch -P3006 -p1 -b .dts-test-6~ +%patch -P3007 -p1 -b .dts-test-7~ +%patch -P3008 -p1 -b .dts-test-8~ +%patch -P3009 -p1 -b .dts-test-9~ +%patch -P3010 -p1 -b .dts-test-10~ +%patch -P3011 -p1 -b .dts-test-11~ +%patch -P3012 -p1 -b .dts-test-12~ +%patch -P3013 -p1 -b .dts-test-13~ +%patch -P3014 -p1 -b .dts-test-14~ +%patch -P3015 -p1 -b .dts-test-15~ +%patch -P3017 -p1 -b .dts-test-17~ +%patch -P3018 -p1 -b .dts-test-18~ + +find gcc/testsuite -name \*.pr96939~ | xargs rm -f + +echo 'Red Hat %{version}-%{gcc_release}' > gcc/DEV-PHASE + +%if 0%{?rhel} <= 8 +# Default to -gdwarf-4 rather than -gdwarf-5 +sed -i '/define DWARF_VERSION_DEFAULT/s/5/4/' gcc/defaults.h +sed -i 's/\(version for most targets is \)5 /\14 /' gcc/doc/invoke.texi +%endif + +cp -a libstdc++-v3/config/cpu/i{4,3}86/atomicity.h +cp -a libstdc++-v3/config/cpu/i{4,3}86/opt + +./contrib/gcc_update --touch + +LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi + +sed -i -e 's/Common Driver Var(flag_report_bug)/& Init(1)/' gcc/common.opt +sed -i -e 's/m_report_bug = false;/m_report_bug = true;/' gcc/diagnostic.cc + +%ifarch ppc +if [ -d libstdc++-v3/config/abi/post/powerpc64-linux-gnu ]; then + mkdir -p libstdc++-v3/config/abi/post/powerpc64-linux-gnu/64 + mv libstdc++-v3/config/abi/post/powerpc64-linux-gnu/{,64/}baseline_symbols.txt + mv libstdc++-v3/config/abi/post/powerpc64-linux-gnu/{32/,}baseline_symbols.txt + rm -rf libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32 +fi +%endif +%ifarch sparc +if [ -d libstdc++-v3/config/abi/post/sparc64-linux-gnu ]; then + mkdir -p libstdc++-v3/config/abi/post/sparc64-linux-gnu/64 + mv libstdc++-v3/config/abi/post/sparc64-linux-gnu/{,64/}baseline_symbols.txt + mv libstdc++-v3/config/abi/post/sparc64-linux-gnu/{32/,}baseline_symbols.txt + rm -rf libstdc++-v3/config/abi/post/sparc64-linux-gnu/32 +fi +%endif + +# This test causes fork failures, because it spawns way too many threads +rm -f gcc/testsuite/go.test/test/chan/goroutines.go + +# These tests get stuck and don't timeout. +%ifarch ppc ppc64 ppc64le s390x +rm -f libgomp/testsuite/libgomp.c/target-*.c +rm -rf libgomp/testsuite/libgomp.oacc* +rm -rf libgomp/testsuite/libgomp.graphite* +# This uses a removed file (#2093997). +rm -rf libgomp/testsuite/libgomp.fortran/pr90030.f90 +%endif +# This test gets stuck. +%ifarch %{ix86} ppc64 s390x +rm -f libstdc++-v3/testsuite/30_threads/future/members/poll.cc +%endif + +# Disable jQuery use (CVE-2020-11023). +sed -i '/^SEARCHENGINE/s/YES/NO/' libstdc++-v3/doc/doxygen/user.cfg.in +sed -i '/^GENERATE_TREEVIEW/s/YES/NO/' libstdc++-v3/doc/doxygen/user.cfg.in + +%build + +# Undo the broken autoconf change in recent Fedora versions +export CONFIG_SITE=NONE + +# Work around https://issues.redhat.com/browse/RHEL-49348 +%ifarch ppc64le +export GLIBC_TUNABLES=glibc.cpu.hwcaps=-arch_3_1 +%endif + +CC=gcc +CXX=g++ +OPT_FLAGS="%{optflags}" +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=[123]//g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[123]//g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/\(-Wp,\)\?-U_FORTIFY_SOURCE//g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-flto=auto//g;s/-flto//g;s/-ffat-lto-objects//g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-m64//g;s/-m32//g;s/-m31//g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mfpmath=sse/-mfpmath=sse -msse2/g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/ -pipe / /g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-fno-omit-frame-pointer//g;s/-mbackchain//g;s/-mno-omit-leaf-frame-pointer//g'` +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-Werror=format-security/-Wformat-security/g'` +%ifarch sparc +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mcpu=ultrasparc/-mtune=ultrasparc/g;s/-mcpu=v[78]//g'` +%endif +%ifarch %{ix86} +OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-march=i.86//g'` +%endif +OPT_FLAGS=`echo "$OPT_FLAGS" | sed -e 's/[[:blank:]]\+/ /g'` +case "$OPT_FLAGS" in + *-fasynchronous-unwind-tables*) + sed -i -e 's/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables /' \ + libgcc/Makefile.in + ;; +esac + +%if %{build_offload_nvptx} +mkdir obji +IROOT=`pwd`/obji +cd nvptx-tools-%{nvptx_tools_gitrev} +rm -rf obj-%{gcc_target_platform} +mkdir obj-%{gcc_target_platform} +cd obj-%{gcc_target_platform} +CC="$CC" CXX="$CXX" CFLAGS="%{optflags}" CXXFLAGS="%{optflags}" \ +../configure --prefix=%{_prefix} +make %{?_smp_mflags} +make install prefix=${IROOT}%{_prefix} +cd ../.. + +ln -sf newlib-cygwin-%{newlib_cygwin_gitrev}/newlib newlib +rm -rf obj-offload-nvptx-none +mkdir obj-offload-nvptx-none + +cd obj-offload-nvptx-none +CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \ + CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \ + | sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \ + XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ + ../configure --disable-bootstrap --disable-sjlj-exceptions \ + --enable-newlib-io-long-long --with-build-time-tools=${IROOT}%{_prefix}/nvptx-none/bin \ + --target nvptx-none --enable-as-accelerator-for=%{gcc_target_platform} \ + --enable-languages=c,c++,fortran,lto \ + --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ + --with-bugurl=http://bugzilla.redhat.com/bugzilla \ + --enable-checking=release --with-system-zlib \ + --with-gcc-major-version-only --without-isl +make %{?_smp_mflags} +cd .. +rm -f newlib +%endif + +rm -rf obj-%{gcc_target_platform} +mkdir obj-%{gcc_target_platform} +cd obj-%{gcc_target_platform} + +%if %{build_isl} +mkdir isl-build isl-install +%ifarch s390 s390x +ISL_FLAG_PIC=-fPIC +%else +ISL_FLAG_PIC=-fpic +%endif +cd isl-build +sed -i 's|libisl\([^-]\)|libgcc%{gcc_major}privateisl\1|g' \ + ../../isl-%{isl_version}/Makefile.{am,in} +../../isl-%{isl_version}/configure \ + CC=/usr/bin/gcc CXX=/usr/bin/g++ \ + CFLAGS="${CFLAGS:-%optflags} $ISL_FLAG_PIC" --prefix=`cd ..; pwd`/isl-install +# Make sure we build with -g (#2155127). +sed -i -e 's/CFLAGS =.*/& -g/' Makefile +make %{?_smp_mflags} CFLAGS="${CFLAGS:-%optflags} $ISL_FLAG_PIC" +make install +cd ../isl-install/lib +rm libgcc%{gcc_major}privateisl.so{,.23} +mv libgcc%{gcc_major}privateisl.so.23.1.0 libisl.so.23 +ln -sf libisl.so.23 libisl.so +cd ../.. +%endif + +# Disabled on Intel because of: +# https://bugzilla.redhat.com/show_bug.cgi?id=2091571#c1 +%if 0%{?rhel} == 8 +%ifnarch %{ix86} x86_64 +%{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} +%endif +%else +%{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} +%endif + +offloadtgts= +%if %{build_offload_nvptx} +offloadtgts=nvptx-none +%endif +%if %{build_offload_amdgcn} +offloadtgts=${offloadtgts:+${offloadtgts},}amdgcn-amdhsa +%endif +# We're going to use the old long double format (double double) until RHEL10. +# Only -static-lib{stdc++,gfortran}/libgcc would work with IEEE double. +# Upstream also uses the old long double format, but Fedora uses the new +# format. To make things clearer, --with-long-double-format=ibm is used +# explicitly. +CONFIGURE_OPTS="\ + --prefix=%{_prefix} --mandir=%{_mandir} --infodir=%{_infodir} \ + --with-bugurl=http://bugzilla.redhat.com/bugzilla \ + --enable-shared --enable-threads=posix --enable-checking=release \ +%ifarch ppc64le + --enable-targets=powerpcle-linux \ +%endif +%ifarch ppc64le %{mips} s390x + --disable-multilib \ +%else + --enable-multilib \ +%endif + --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions \ + --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only \ + --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=%{_root_datadir}/zoneinfo \ +%ifnarch %{mips} + --with-linker-hash-style=gnu \ +%endif + --enable-plugin --enable-initfini-array \ +%if %{build_isl} + --with-isl=`pwd`/isl-install \ +%else + --without-isl \ +%endif +%if %{build_offload_nvptx} || %{build_offload_amdgcn} + --enable-offload-targets=$offloadtgts --enable-offload-defaulted \ +%endif +%if %{build_offload_nvptx} + --without-cuda-driver \ +%endif +%if 0%{?fedora} >= 21 || 0%{?rhel} >= 7 +%if %{attr_ifunc} + --enable-gnu-indirect-function \ +%endif +%endif +%ifarch %{arm} + --disable-sjlj-exceptions \ +%endif +%ifarch ppc ppc64 ppc64le ppc64p7 + --enable-secureplt \ +%endif +%ifarch sparc sparcv9 sparc64 ppc ppc64 ppc64le ppc64p7 s390 s390x alpha + --with-long-double-128 \ +%endif +%ifarch ppc64le + --with-long-double-format=ibm \ +%endif +%ifarch sparc + --disable-linux-futex \ +%endif +%ifarch sparc64 + --with-cpu=ultrasparc \ +%endif +%ifarch sparc sparcv9 + --host=%{gcc_target_platform} --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=v7 +%endif +%ifarch ppc ppc64 ppc64p7 + --with-cpu-32=power7 --with-tune-32=power7 --with-cpu-64=power7 --with-tune-64=power7 \ +%endif +%ifarch ppc64le +%if 0%{?rhel} >= 9 +%if 0%{?rhel} >= 10 + --with-cpu-32=power9 --with-tune-32=power10 --with-cpu-64=power9 --with-tune-64=power10 \ +%else + --with-cpu-32=power9 --with-tune-32=power9 --with-cpu-64=power9 --with-tune-64=power9 \ +%endif +%else + --with-cpu-32=power8 --with-tune-32=power8 --with-cpu-64=power8 --with-tune-64=power8 \ +%endif +%endif +%ifarch ppc + --build=%{gcc_target_platform} --target=%{gcc_target_platform} --with-cpu=default32 +%endif +%ifarch %{ix86} x86_64 + --enable-cet \ + --with-tune=generic \ +%endif +%ifarch %{ix86} + --with-arch=x86-64 \ +%endif +%ifarch x86_64 +%if 0%{?rhel} > 8 +%if 0%{?rhel} > 9 + --with-arch_64=x86-64-v3 \ +%else + --with-arch_64=x86-64-v2 \ +%endif +%endif + --with-arch_32=x86-64 \ +%endif +%ifarch s390 s390x +%if 0%{?rhel} >= 7 +%if 0%{?rhel} > 7 +%if 0%{?rhel} > 8 +%if 0%{?rhel} >= 9 + --with-arch=z14 --with-tune=z15 \ +%else + --with-arch=z13 --with-tune=arch13 \ +%endif +%else + --with-arch=z13 --with-tune=z14 \ +%endif +%else + --with-arch=z196 --with-tune=zEC12 \ +%endif +%else +%if 0%{?fedora} >= 38 + --with-arch=z13 --with-tune=z14 \ +%else +%if 0%{?fedora} >= 26 + --with-arch=zEC12 --with-tune=z13 \ +%else + --with-arch=z9-109 --with-tune=z10 \ +%endif +%endif +%endif + --enable-decimal-float \ +%endif +%ifarch armv7hl + --with-tune=generic-armv7-a --with-arch=armv7-a \ + --with-float=hard --with-fpu=vfpv3-d16 --with-abi=aapcs-linux \ +%endif +%ifarch mips mipsel + --with-arch=mips32r2 --with-fp-32=xx \ +%endif +%ifarch mips64 mips64el + --with-arch=mips64r2 --with-abi=64 \ +%endif +%ifarch riscv64 + --with-arch=rv64gc --with-abi=lp64d --with-multilib-list=lp64d \ +%endif +%ifnarch sparc sparcv9 ppc + --build=%{gcc_target_platform} \ +%endif +%if 0%{?fedora} >= 35 || 0%{?rhel} >= 9 +%ifnarch %{arm} + --with-build-config=bootstrap-lto --enable-link-serialization=1 \ +%endif +%endif + " + +CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \ + CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \ + | sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \ + XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ + ../configure --enable-bootstrap \ + --enable-languages=c,c++,fortran,lto \ + $CONFIGURE_OPTS + +%ifarch sparc sparcv9 sparc64 +make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" LDFLAGS_FOR_TARGET=-Wl,-z,relro,-z,now bootstrap +%else +make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" LDFLAGS_FOR_TARGET=-Wl,-z,relro,-z,now profiledbootstrap +%endif + +echo '/* GNU ld script + Use the shared library, but some functions are only in + the static library, so try that secondarily. */ +%{oformat} +INPUT ( %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/%{_lib}/libstdc++.so.6 -lstdc++_nonshared%{nonsharedver} )' \ + > %{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++_system.so + +%if 0 +# Relink libcc1 against -lstdc++_nonshared: +sed -i -e '/^postdeps/s/-lstdc++/-lstdc++_system/' libcc1/libtool +rm -f libcc1/libcc1.la +make -C libcc1 libcc1.la +%endif + +CC="`%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags --build-cc`" +CXX="`%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags --build-cxx` `%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags --build-includes`" + +# Build libgccjit separately, so that normal compiler binaries aren't -fpic +# unnecessarily. +mkdir objlibgccjit +cd objlibgccjit +CC="$CC" CXX="$CXX" CFLAGS="$OPT_FLAGS" \ + CXXFLAGS="`echo " $OPT_FLAGS " | sed 's/ -Wall / /g;s/ -fexceptions / /g' \ + | sed 's/ -Wformat-security / -Wformat -Wformat-security /'`" \ + XCFLAGS="$OPT_FLAGS" TCFLAGS="$OPT_FLAGS" \ + ../../configure --disable-bootstrap --enable-host-shared \ + --enable-languages=jit --enable-libgdiagnostics $CONFIGURE_OPTS +make %{?_smp_mflags} BOOT_CFLAGS="$OPT_FLAGS" all-gcc +cp -a gcc/libgccjit.so* ../gcc/ +cd ../gcc/ +ln -sf xgcc %{gcc_target_platform}-gcc-%{gcc_major} +cp -a Makefile{,.orig} +sed -i -e '/^CHECK_TARGETS/s/$/ check-jit/' Makefile +touch -r Makefile.orig Makefile +rm Makefile.orig +# No longer works. See #2213635/#2213634. +#make jit.sphinx.html +#make jit.sphinx.install-html jit_htmldir=`pwd`/../../rpm.doc/libgccjit-devel/html +cd .. + +%if %{build_isl} +cp -a isl-install/lib/libisl.so.23 gcc/ +%endif + +# Make generated man pages even if Pod::Man is not new enough +perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl +for i in ../gcc/doc/*.texi; do + cp -a $i $i.orig; sed 's/ftable/table/' $i.orig > $i +done +make -C gcc generated-manpages +for i in ../gcc/doc/*.texi; do mv -f $i.orig $i; done + +# Make generated doxygen pages. +%if %{build_libstdcxx_docs} +cd %{gcc_target_platform}/libstdc++-v3 +make doc-html-doxygen +make doc-man-doxygen +cd ../.. +%endif + +# Copy various doc files here and there +cd .. +mkdir -p rpm.doc/gfortran rpm.doc/libquadmath rpm.doc/libitm +mkdir -p rpm.doc/changelogs/{gcc/cp,gcc/jit,libstdc++-v3,libgomp,libatomic,libsanitizer} + +for i in {gcc,gcc/cp,gcc/jit,libstdc++-v3,libgomp,libatomic,libsanitizer}/ChangeLog*; do + cp -p $i rpm.doc/changelogs/$i +done + +(cd gcc/fortran; for i in ChangeLog*; do + cp -p $i ../../rpm.doc/gfortran/$i +done) +(cd libgfortran; for i in ChangeLog*; do + cp -p $i ../rpm.doc/gfortran/$i.libgfortran +done) +%if %{build_libquadmath} +(cd libquadmath; for i in ChangeLog* COPYING.LIB; do + cp -p $i ../rpm.doc/libquadmath/$i.libquadmath +done) +%endif +%if %{build_libitm} +(cd libitm; for i in ChangeLog*; do + cp -p $i ../rpm.doc/libitm/$i.libitm +done) +%endif + +rm -f rpm.doc/changelogs/gcc/ChangeLog.[1-9] +find rpm.doc -name \*ChangeLog\* | xargs bzip2 -9 + +%if %{build_annobin_plugin} +mkdir annobin-plugin +cd annobin-plugin +tar xf %{_usrsrc}/annobin/latest-annobin.tar.xz +cd annobin* +touch aclocal.m4 configure Makefile.in */configure */config.h.in */Makefile.in +ANNOBIN_FLAGS=../../obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/scripts/testsuite_flags +ANNOBIN_CFLAGS1="%build_cflags -I %{_builddir}/gcc-%{version}-%{DATE}/gcc" +ANNOBIN_CFLAGS1="$ANNOBIN_CFLAGS1 -I %{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/gcc" +ANNOBIN_CFLAGS2="-I %{_builddir}/gcc-%{version}-%{DATE}/include -I %{_builddir}/gcc-%{version}-%{DATE}/libcpp/include" +ANNOBIN_LDFLAGS="%build_ldflags -L%{_builddir}/gcc-%{version}-%{DATE}/obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/src/.libs" +CC="`$ANNOBIN_FLAGS --build-cc`" CXX="`$ANNOBIN_FLAGS --build-cxx`" \ + CFLAGS="$ANNOBIN_CFLAGS1 $ANNOBIN_CFLAGS2 $ANNOBIN_LDFLAGS" \ + CXXFLAGS="$ANNOBIN_CFLAGS1 `$ANNOBIN_FLAGS --build-includes` $ANNOBIN_CFLAGS2 $ANNOBIN_LDFLAGS" \ + ./configure --with-gcc-plugin-dir=%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/plugin \ + --without-annocheck --without-tests --without-docs --disable-rpath --without-debuginfod \ + --without-clang-plugin --without-llvm-plugin +make +cd ../.. +%endif + +# Test the nonshared bits. +mkdir libstdc++_compat_test +cd libstdc++_compat_test +readelf -Ws %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/%{_lib}/libstdc++.so.6 | sed -n '/\.symtab/,$d;/ UND /d;/@GLIBC_PRIVATE/d;/\(GLOBAL\|WEAK\|UNIQUE\)/p' | awk '{ if ($4 == "OBJECT") { printf "%s %s %s %s %s\n", $8, $4, $5, $6, $3 } else { printf "%s %s %s %s\n", $8, $4, $5, $6 }}' | sed 's/ UNIQUE / GLOBAL /;s/ WEAK / GLOBAL /;s/@@GLIBCXX_\(LDBL_\)\?[0-9.]*//;s/@@CXXABI_TM_[0-9.]*//;s/@@CXXABI_FLOAT128//;s/@@CXXABI_\(LDBL_\)\?[0-9.]*//' | LC_ALL=C sort -u > system.abilist +readelf -Ws ../obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++.so.6 | sed -n '/\.symtab/,$d;/ UND /d;/@GLIBC_PRIVATE/d;/\(GLOBAL\|WEAK\|UNIQUE\)/p' | awk '{ if ($4 == "OBJECT") { printf "%s %s %s %s %s\n", $8, $4, $5, $6, $3 } else { printf "%s %s %s %s\n", $8, $4, $5, $6 }}' | sed 's/ UNIQUE / GLOBAL /;s/ WEAK / GLOBAL /;s/@@GLIBCXX_\(LDBL_\)\?[0-9.]*//;s/@@CXXABI_TM_[0-9.]*//;s/@@CXXABI_FLOAT128//;s/@@CXXABI_\(LDBL_\)\?[0-9.]*//' | LC_ALL=C sort -u > vanilla.abilist +diff -up system.abilist vanilla.abilist | awk '/^\+\+\+/{next}/^\+/{print gensub(/^+(.*)$/,"\\1","1",$0)}' > system2vanilla.abilist.diff +../obj-%{gcc_target_platform}/gcc/xgcc -B ../obj-%{gcc_target_platform}/gcc/ -shared -o libstdc++_nonshared.so -Wl,--whole-archive ../obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++_nonshared%{nonsharedver}.a -Wl,--no-whole-archive %{?scl:%{_root_prefix}}%{!?scl:%{_prefix}}/%{_lib}/libstdc++.so.6 +readelf -Ws libstdc++_nonshared.so | sed -n '/\.symtab/,$d;/ UND /d;/@GLIBC_PRIVATE/d;/\(GLOBAL\|WEAK\|UNIQUE\)/p' | awk '{ if ($4 == "OBJECT") { printf "%s %s %s %s %s\n", $8, $4, $5, $6, $3 } else { printf "%s %s %s %s\n", $8, $4, $5, $6 }}' | sed 's/ UNIQUE / GLOBAL /;s/ WEAK / GLOBAL /;s/@@GLIBCXX_\(LDBL_\)\?[0-9.]*//;s/@@CXXABI_TM_[0-9.]*//;s/@@CXXABI_FLOAT128//;s/@@CXXABI_\(LDBL_\)\?[0-9.]*//' | LC_ALL=C sort -u > nonshared.abilist +echo ====================NONSHARED========================= +ldd -d -r ./libstdc++_nonshared.so || : +ldd -u ./libstdc++_nonshared.so || : +diff -up system2vanilla.abilist.diff nonshared.abilist || : +readelf -Ws ../obj-%{gcc_target_platform}/%{gcc_target_platform}/libstdc++-v3/src/.libs/libstdc++_nonshared%{nonsharedver}.a | grep HIDDEN.*UND | grep -v __dso_handle || : +echo ====================NONSHARED END===================== +rm -f libstdc++_nonshared.so +cd .. + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot} + +# RISC-V ABI wants to install everything in /lib64/lp64d or /usr/lib64/lp64d. +# Make these be symlinks to /lib64 or /usr/lib64 respectively. See: +# https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/DRHT5YTPK4WWVGL3GIN5BF2IKX2ODHZ3/ +%ifarch riscv64 +for d in %{buildroot}%{_libdir} %{buildroot}/%{_lib} \ + %{buildroot}%{_datadir}/gdb/auto-load/%{_prefix}/%{_lib} \ + %{buildroot}%{_prefix}/include/c++/%{gcc_major}/%{gcc_target_platform}/%{_lib}; do + mkdir -p $d + (cd $d && ln -sf . lp64d) +done +%endif + +%if %{build_offload_nvptx} +cd nvptx-tools-%{nvptx_tools_gitrev} +cd obj-%{gcc_target_platform} +make install prefix=%{buildroot}%{_prefix} +cd ../.. + +ln -sf newlib-cygwin-%{newlib_cygwin_gitrev}/newlib newlib +cd obj-offload-nvptx-none +make prefix=%{buildroot}%{_prefix} mandir=%{buildroot}%{_mandir} \ + infodir=%{buildroot}%{_infodir} install +rm -rf %{buildroot}%{_prefix}/libexec/gcc/nvptx-none/%{gcc_major}/install-tools +rm -rf %{buildroot}%{_prefix}/libexec/gcc/nvptx-none/%{gcc_major}/g++-mapper-server +rm -rf %{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/{install-tools,plugin,cc1,cc1plus,f951} +rm -rf %{buildroot}%{_infodir} %{buildroot}%{_mandir}/man7 %{buildroot}%{_prefix}/share/locale +rm -rf %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/{install-tools,plugin} +rm -rf %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/{install-tools,plugin,include-fixed} +rm -rf %{buildroot}%{_prefix}/%{_lib}/libc[cp]1* +mv -f %{buildroot}%{_prefix}/nvptx-none/lib/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/ +mv -f %{buildroot}%{_prefix}/nvptx-none/lib/mgomp/*.{a,spec} %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mgomp/ +mv -f %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/ +mv -f %{buildroot}%{_prefix}/lib/gcc/nvptx-none/%{gcc_major}/mgomp/*.a %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none/mgomp/ +find %{buildroot}%{_prefix}/lib/gcc/nvptx-none %{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/accel/nvptx-none \ + %{buildroot}%{_prefix}/nvptx-none/lib -name \*.la | xargs rm +cd .. +rm -f newlib +%endif + +%{?scl:PATH=%{_bindir}${PATH:+:${PATH}}} +# Also set LD_LIBRARY_PATH so that DTS eu-strip (called from find-debuginfo.sh) +# can find the libraries it needs. +%{?scl:export LD_LIBRARY_PATH=%{_libdir}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}} + +perl -pi -e \ + 's~href="l(ibstdc|atest)~href="http://gcc.gnu.org/onlinedocs/libstdc++/l\1~' \ + libstdc++-v3/doc/html/api.html + +cd obj-%{gcc_target_platform} + +TARGET_PLATFORM=%{gcc_target_platform} + +# There are some MP bugs in libstdc++ Makefiles +make -C %{gcc_target_platform}/libstdc++-v3 + +%if 0%{?scl:1} +rm -f gcc/libgcc_s.so +echo '/* GNU ld script + Use the shared library, but some functions are only in + the static library, so try that secondarily. */ +%{oformat} +GROUP ( /%{_lib}/libgcc_s.so.1 libgcc.a )' > gcc/libgcc_s.so +%endif + +make prefix=%{buildroot}%{_prefix} mandir=%{buildroot}%{_mandir} \ + infodir=%{buildroot}%{_infodir} install + +%if 0%{?scl:1} +rm -f gcc/libgcc_s.so +ln -sf libgcc_s.so.1 gcc/libgcc_s.so +%endif + +FULLPATH=%{buildroot}%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major} +FULLEPATH=%{buildroot}%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_major} + +%if 0%{?scl:1} +ln -sf ../../../../bin/ar $FULLEPATH/ar +ln -sf ../../../../bin/as $FULLEPATH/as +ln -sf ../../../../bin/ld $FULLEPATH/ld +ln -sf ../../../../bin/ld.bfd $FULLEPATH/ld.bfd +ln -sf ../../../../bin/ld.gold $FULLEPATH/ld.gold +ln -sf ../../../../bin/nm $FULLEPATH/nm +ln -sf ../../../../bin/objcopy $FULLEPATH/objcopy +ln -sf ../../../../bin/ranlib $FULLEPATH/ranlib +ln -sf ../../../../bin/strip $FULLEPATH/strip +%endif + +%if %{build_isl} +cp -a isl-install/lib/libisl.so.23 $FULLPATH/ +%endif + +# fix some things +ln -sf gcc %{buildroot}%{_prefix}/bin/cc +mkdir -p %{buildroot}/lib +ln -sf ..%{_prefix}/bin/cpp %{buildroot}/lib/cpp +ln -sf gfortran %{buildroot}%{_prefix}/bin/f95 +rm -f %{buildroot}%{_infodir}/dir +gzip -9 %{buildroot}%{_infodir}/*.info* +ln -sf gcc %{buildroot}%{_prefix}/bin/gnatgcc +mkdir -p %{buildroot}%{_fmoddir} + +cxxconfig="`find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h`" +for i in `find %{gcc_target_platform}/[36]*/libstdc++-v3/include -name c++config.h 2>/dev/null`; do + if ! diff -up $cxxconfig $i; then + cat > %{buildroot}%{_prefix}/include/c++/%{gcc_major}/%{gcc_target_platform}/bits/c++config.h < +#if __WORDSIZE == 32 +%ifarch %{multilib_64_archs} +`cat $(find %{gcc_target_platform}/32/libstdc++-v3/include -name c++config.h)` +%else +`cat $(find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h)` +%endif +#else +%ifarch %{multilib_64_archs} +`cat $(find %{gcc_target_platform}/libstdc++-v3/include -name c++config.h)` +%else +`cat $(find %{gcc_target_platform}/64/libstdc++-v3/include -name c++config.h)` +%endif +#endif +#endif +EOF + break + fi +done + +for f in `find %{buildroot}%{_prefix}/include/c++/%{gcc_major}/%{gcc_target_platform}/ -name c++config.h`; do + for i in 1 2 4 8; do + sed -i -e 's/#define _GLIBCXX_ATOMIC_BUILTINS_'$i' 1/#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_'$i'\ +&\ +#endif/' $f + done +done + +# Nuke bits/*.h.gch dirs +# 1) sometimes it is hard to match the exact options used for building +# libstdc++-v3 or they aren't desirable +# 2) there are multilib issues, conflicts etc. with this +# 3) it is huge +# People can always precompile on their own whatever they want, but +# shipping this for everybody is unnecessary. +rm -rf %{buildroot}%{_prefix}/include/c++/%{gcc_major}/%{gcc_target_platform}/bits/*.h.gch + +%if %{build_libstdcxx_docs} +libstdcxx_doc_builddir=%{gcc_target_platform}/libstdc++-v3/doc/doxygen +mkdir -p ../rpm.doc/libstdc++-v3 +cp -r -p ../libstdc++-v3/doc/html ../rpm.doc/libstdc++-v3/html +cp -r -p $libstdcxx_doc_builddir/html ../rpm.doc/libstdc++-v3/html/api +mkdir -p %{buildroot}%{_mandir}/man3 +cp -r -p $libstdcxx_doc_builddir/man/man3/* %{buildroot}%{_mandir}/man3/ +find ../rpm.doc/libstdc++-v3 -name \*~ | xargs rm +# We don't want to ship jQuery in the libstdc++-docs package. +find ../rpm.doc/libstdc++-v3 -name jquery.js | xargs rm +find ../rpm.doc/libstdc++-v3/html -name '*.html' | xargs sed -i '/