From e718b9dd900d6c371e286023064755ed42c9008d Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Wed, 23 Jun 2021 10:17:43 -0400 Subject: [PATCH] Drop patch that retained broken std::call_once symbols Resolves: #1937700 --- gcc.spec | 8 +- gcc11-pr99341-revert.patch | 176 ------------------------------------- 2 files changed, 5 insertions(+), 179 deletions(-) delete mode 100644 gcc11-pr99341-revert.patch diff --git a/gcc.spec b/gcc.spec index c2b0d3b..9d203c9 100644 --- a/gcc.spec +++ b/gcc.spec @@ -119,7 +119,7 @@ Summary: Various compilers (C, C++, Objective-C, ...) Name: gcc Version: %{gcc_version} -Release: %{gcc_release}%{?dist} +Release: %{gcc_release}.1%{?dist} # libgcc, libgfortran, libgomp, libstdc++ and crtstuff have # GCC Runtime Exception. License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD @@ -264,7 +264,6 @@ Patch9: gcc11-foffload-default.patch Patch10: gcc11-Wno-format-security.patch Patch11: gcc11-rh1574936.patch Patch12: gcc11-d-shared-libphobos.patch -Patch13: gcc11-pr99341-revert.patch Patch100: gcc11-fortran-fdec-duplicates.patch Patch101: gcc11-fortran-flogical-as-integer.patch @@ -787,7 +786,6 @@ to NVidia PTX capable devices if available. %patch11 -p0 -b .rh1574936~ %endif %patch12 -p0 -b .d-shared-libphobos~ -%patch13 -p0 -b .pr99341-revert~ %if 0%{?rhel} >= 9 %patch100 -p1 -b .fortran-fdec-duplicates~ @@ -3130,6 +3128,10 @@ end %endif %changelog +* Wed Jun 23 2021 David Malcolm 11.1.1-6.1 +- drop patch that retained broken std::call_once symbols + (#1937700, PR libstdc++/99341) + * Wed Jun 23 2021 Jakub Jelinek 11.1.1-6 - update from releases/gcc-11-branch - PRs c++/100876, c++/100879, c++/101106, c/100619, c/100783, fortran/95501, diff --git a/gcc11-pr99341-revert.patch b/gcc11-pr99341-revert.patch deleted file mode 100644 index c7419cb..0000000 --- a/gcc11-pr99341-revert.patch +++ /dev/null @@ -1,176 +0,0 @@ -libstdc++: Remove symbols for new std::call_once implementation [PR 99341] - -This removes the new symbols added for the new futex-based -std::call_once implementation. These symbols were new on trunk, so not -in any released version. However, they are already present in some -beta distro releases (Fedora Linux 34) and in Fedora Linux rawhide. This -change can be locally reverted by distros that need to keep the symbols -present until affected packages have been rebuilt. - -Revert: -2021-03-12 Jonathan Wakely - - PR libstdc++/99341 - * config/abi/post/aarch64-linux-gnu/baseline_symbols.txt: Remove - std::once_flag symbols. - * config/abi/post/ia64-linux-gnu/baseline_symbols.txt: Likewise. - * config/abi/post/m68k-linux-gnu/baseline_symbols.txt: Likewise. - * config/abi/post/riscv64-linux-gnu/baseline_symbols.txt: - Likewise. - * config/abi/pre/gnu.ver: Likewise. - * src/c++11/mutex.cc [_GLIBCXX_HAVE_LINUX_FUTEX] - (struct __once_flag_compat): Remove. - (_ZNSt9once_flag11_M_activateEv): Remove. - (_ZNSt9once_flag9_M_finishEb): Remove. - ---- libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt -+++ libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt -@@ -4086,6 +4086,8 @@ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@@GLIBCXX - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4 - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4 - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4 -+FUNC:_ZNSt9once_flag11_M_activateEv@@GLIBCXX_3.4.29 -+FUNC:_ZNSt9once_flag9_M_finishEb@@GLIBCXX_3.4.29 - FUNC:_ZNSt9strstream3strEv@@GLIBCXX_3.4 - FUNC:_ZNSt9strstream6freezeEb@@GLIBCXX_3.4 - FUNC:_ZNSt9strstreamC1EPciSt13_Ios_Openmode@@GLIBCXX_3.4 ---- libstdc++-v3/config/abi/post/ia64-linux-gnu/baseline_symbols.txt -+++ libstdc++-v3/config/abi/post/ia64-linux-gnu/baseline_symbols.txt -@@ -4086,6 +4086,8 @@ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@@GLIBCXX - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4 - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4 - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4 -+FUNC:_ZNSt9once_flag11_M_activateEv@@GLIBCXX_3.4.29 -+FUNC:_ZNSt9once_flag9_M_finishEb@@GLIBCXX_3.4.29 - FUNC:_ZNSt9strstream3strEv@@GLIBCXX_3.4 - FUNC:_ZNSt9strstream6freezeEb@@GLIBCXX_3.4 - FUNC:_ZNSt9strstreamC1EPciSt13_Ios_Openmode@@GLIBCXX_3.4 ---- libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt -+++ libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt -@@ -4086,6 +4086,8 @@ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Ej@@GLIBCXX - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4 - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4 - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4 -+FUNC:_ZNSt9once_flag11_M_activateEv@@GLIBCXX_3.4.29 -+FUNC:_ZNSt9once_flag9_M_finishEb@@GLIBCXX_3.4.29 - FUNC:_ZNSt9strstream3strEv@@GLIBCXX_3.4 - FUNC:_ZNSt9strstream6freezeEb@@GLIBCXX_3.4 - FUNC:_ZNSt9strstreamC1EPciSt13_Ios_Openmode@@GLIBCXX_3.4 ---- libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt -+++ libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt -@@ -4086,6 +4086,8 @@ FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEC2Em@@GLIBCXX - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4 - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4 - FUNC:_ZNSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4 -+FUNC:_ZNSt9once_flag11_M_activateEv@@GLIBCXX_3.4.29 -+FUNC:_ZNSt9once_flag9_M_finishEb@@GLIBCXX_3.4.29 - FUNC:_ZNSt9strstream3strEv@@GLIBCXX_3.4 - FUNC:_ZNSt9strstream6freezeEb@@GLIBCXX_3.4 - FUNC:_ZNSt9strstreamC1EPciSt13_Ios_Openmode@@GLIBCXX_3.4 ---- libstdc++-v3/config/abi/pre/gnu.ver -+++ libstdc++-v3/config/abi/pre/gnu.ver -@@ -2388,6 +2388,11 @@ GLIBCXX_3.4.29 { - _ZNKRSt7__cxx1118basic_stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EE3strEv; - _ZNSt7__cxx1118basic_stringstreamI[cw]St11char_traitsI[cw]ESaI[cw]EE3strEONS_12basic_stringI[cw]S2_S3_EE; - -+ # std::once_flag::_M_activate() -+ _ZNSt9once_flag11_M_activateEv; -+ # std::once_flag::_M_finish(bool) -+ _ZNSt9once_flag9_M_finishEb; -+ - # std::to_chars(char*, char*, [float|double|long double]) - _ZSt8to_charsPcS_[def]; - # std::to_chars(char*, char*, [float|double|long double], chars_format) ---- libstdc++-v3/src/c++11/mutex.cc -+++ libstdc++-v3/src/c++11/mutex.cc -@@ -26,6 +26,90 @@ - - #ifdef _GLIBCXX_HAS_GTHREADS - -+#if defined _GLIBCXX_SHARED && ! _GLIBCXX_INLINE_VERSION -+ -+#ifdef _GLIBCXX_HAVE_LINUX_FUTEX -+# include -+# include -+# include -+ -+namespace std _GLIBCXX_VISIBILITY(default) -+{ -+_GLIBCXX_BEGIN_NAMESPACE_VERSION -+ -+struct __once_flag_compat -+{ -+ enum _Bits : int { _Init = 0, _Active = 1, _Done = 2 }; -+ int _M_once = 0; -+ bool _M_activate(); -+ void _M_finish(bool returning) noexcept; -+}; -+ -+bool -+__once_flag_compat::_M_activate() -+{ -+ if (__gnu_cxx::__is_single_threaded()) -+ { -+ if (_M_once == _Bits::_Done) -+ return false; -+ _M_once = _Bits::_Active; -+ return true; -+ } -+ -+ while (true) -+ { -+ int expected = _Bits::_Init; -+ constexpr int active = _Bits::_Active; -+ if (__atomic_compare_exchange_n(&_M_once, &expected, active, false, -+ __ATOMIC_ACQ_REL, -+ __ATOMIC_ACQUIRE)) -+ { -+ // This thread is now doing an active execution. -+ return true; -+ } -+ -+ if (expected == _Bits::_Done) -+ return false; // A returning execution happened, this is passive. -+ -+ // Otherwise, an active execution is happening. Wait for it to finish. -+ constexpr int futex_wait = 128; // FUTEX_WAIT_PRIVATE -+ syscall (SYS_futex, &_M_once, futex_wait, expected, 0); -+ } -+} -+ -+void -+std::__once_flag_compat::_M_finish(bool returning) noexcept -+{ -+ const int newval = returning ? _Bits::_Done : _Bits::_Init; -+ if (__gnu_cxx::__is_single_threaded()) -+ { -+ __glibcxx_assert(_M_once == _Bits::_Active); -+ _M_once = newval; -+ } -+ else -+ { -+ int prev [[maybe_unused]] -+ = __atomic_exchange_n(&_M_once, newval, __ATOMIC_RELEASE); -+ __glibcxx_assert(prev & _Bits::_Active); -+ // Wake any other threads waiting for this execution to finish. -+ constexpr int futex_wake = 129; // FUTEX_WAKE_PRIVATE -+ syscall (SYS_futex, &_M_once, futex_wake, INT_MAX); -+ } -+} -+ -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wattribute-alias" -+extern "C" bool _ZNSt9once_flag11_M_activateEv() -+ __attribute__((alias ("_ZNSt18__once_flag_compat11_M_activateEv"))); -+extern "C" void _ZNSt9once_flag9_M_finishEb() noexcept -+ __attribute__((alias ("_ZNSt18__once_flag_compat9_M_finishEb"))); -+#pragma GCC diagnostic pop -+ -+_GLIBCXX_END_NAMESPACE_VERSION -+} // namespace std -+#endif // FUTEX -+#endif // ONCE_FLAG_COMPAT && SHARED && ! INLINE_VERSION -+ - namespace std _GLIBCXX_VISIBILITY(default) - { - _GLIBCXX_BEGIN_NAMESPACE_VERSION