_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)
#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