diff mbox series

[2/2] libstdc++: Remove symbols for new std::call_once implementation [PR 99341]

Message ID 20210312174654.GM3008@redhat.com
State New
Headers show
Series [1/2] libstdc++: Revert to old std::call_once implementation [PR 99341] | expand

Commit Message

Jonathan Wakely March 12, 2021, 5:46 p.m. UTC
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.

Tested x86_64-linux, powerpc64-linux and powerpc64le-linux, but not yet
committed (it's not really appropriate for a last-minute Friday
change!)

Comments

Jonathan Wakely March 16, 2021, 12:40 p.m. UTC | #1
On 12/03/21 17:46 +0000, Jonathan Wakely wrote:
>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.
>
>Tested x86_64-linux, powerpc64-linux and powerpc64le-linux, but not yet
>committed (it's not really appropriate for a last-minute Friday
>change!)

I've now pushed [PATCH 1/2] and this one.
diff mbox series

Patch

commit 621a5b5bcb27b0806af020beb1be8e75e050d308
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Fri Mar 12 11:47:20 2021

    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.
    
    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.

diff --git a/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
index 45f1540ca11..898c8e1e895 100644
--- a/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt
@@ -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
diff --git a/libstdc++-v3/config/abi/post/ia64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/ia64-linux-gnu/baseline_symbols.txt
index 62d28d2cd04..92288ccb8a6 100644
--- a/libstdc++-v3/config/abi/post/ia64-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/ia64-linux-gnu/baseline_symbols.txt
@@ -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
diff --git a/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt
index 45992aef3ec..af5dc020e00 100644
--- a/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt
@@ -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
diff --git a/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt
index 02a2e176bd7..6e5da521255 100644
--- a/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt
+++ b/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt
@@ -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
diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
index a2c151d11ac..5323c7f0604 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -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)
diff --git a/libstdc++-v3/src/c++11/mutex.cc b/libstdc++-v3/src/c++11/mutex.cc
index 3b48998b7e4..646fd17ec45 100644
--- a/libstdc++-v3/src/c++11/mutex.cc
+++ b/libstdc++-v3/src/c++11/mutex.cc
@@ -26,90 +26,6 @@ 
 
 #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