]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Remove symbols for new std::call_once implementation [PR 99341]
authorJonathan Wakely <jwakely@redhat.com>
Fri, 12 Mar 2021 11:47:20 +0000 (11:47 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Tue, 16 Mar 2021 12:25:28 +0000 (12:25 +0000)
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.

libstdc++-v3/ChangeLog:

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/ia64-linux-gnu/baseline_symbols.txt
libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt
libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt
libstdc++-v3/config/abi/pre/gnu.ver
libstdc++-v3/src/c++11/mutex.cc

index 45f1540ca112dbc147d36fa2e8945651e0c7cc13..898c8e1e895809c929a028520528699eee78df60 100644 (file)
@@ -4086,8 +4086,6 @@ 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
index 62d28d2cd046536daecf4cf24b16e0db51265344..92288ccb8a62819568a05856b28f96a727460286 100644 (file)
@@ -4086,8 +4086,6 @@ 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
index 45992aef3ecc37f67f5c788e13623eccec9f52b0..af5dc020e00a8ef7014c76fe9a420035652fde21 100644 (file)
@@ -4086,8 +4086,6 @@ 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
index 02a2e176bd7208213e798bc05bbeddabe4ac57cc..6e5da521255f80e9c1f20aaea28362ae900d03c5 100644 (file)
@@ -4086,8 +4086,6 @@ 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
index a2c151d11ac3ad2e9a3bdda2a2e2a73478225ca9..5323c7f06043722ed04da133153dec8161900472 100644 (file)
@@ -2388,11 +2388,6 @@ 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)
index 3b48998b7e41e803085c526845b6f4bb3be61304..646fd17ec45c8e1daf1b1a6fde41a246745485b7 100644 (file)
 
 #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