Drop patch that retained broken std::call_once symbols
Resolves: #1937700
This commit is contained in:
parent
74ffeaf84d
commit
e718b9dd90
8
gcc.spec
8
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 <dmalcolm@redhat.com> 11.1.1-6.1
|
||||
- drop patch that retained broken std::call_once symbols
|
||||
(#1937700, PR libstdc++/99341)
|
||||
|
||||
* Wed Jun 23 2021 Jakub Jelinek <jakub@redhat.com> 11.1.1-6
|
||||
- update from releases/gcc-11-branch
|
||||
- PRs c++/100876, c++/100879, c++/101106, c/100619, c/100783, fortran/95501,
|
||||
|
@ -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 <jwakely@redhat.com>
|
||||
|
||||
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 <syscall.h>
|
||||
+# include <unistd.h>
|
||||
+# include <limits.h>
|
||||
+
|
||||
+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
|
Loading…
Reference in New Issue
Block a user