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.
This commit is contained in:
Jonathan Wakely 2021-03-12 11:47:20 +00:00
parent 6ee24638ed
commit 995a740cb0
6 changed files with 0 additions and 97 deletions

View 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

View 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

View 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

View 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

View 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)

View File

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