From ac2e5c890aa795612105a0c4d4ab48a57e5c60fd Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik <bkoz@redhat.com> Date: Tue, 22 Dec 2009 08:23:08 +0000 Subject: [PATCH] re PR libstdc++/42456 (Revision 155377 failed some C++ atomic tests) 2009-12-21 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/42456 * src/atomic.cc: Move _GLIBCXX_ASM_SYMVER define within guard. * config/abi/pre/gnu.ver: Add non-volatile exports. From-SVN: r155393 --- libstdc++-v3/ChangeLog | 6 ++++++ libstdc++-v3/config/abi/pre/gnu.ver | 4 ++++ libstdc++-v3/src/atomic.cc | 16 +++++++++------- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 5c68811e3b97..fca9703309bf 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2009-12-21 Benjamin Kosnik <bkoz@redhat.com> + + PR libstdc++/42456 + * src/atomic.cc: Move _GLIBCXX_ASM_SYMVER define within guard. + * config/abi/pre/gnu.ver: Add non-volatile exports. + 2009-12-21 Benjamin Kosnik <bkoz@redhat.com> * scripts/run_doxygen: Update nested namespace exceptions. diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index cbd0596fa9b2..2d4b0c3c3631 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -1050,6 +1050,10 @@ GLIBCXX_3.4.13 { GLIBCXX_3.4.14 { + # atomic + _ZNSt9__atomic011atomic_flag12test_and_setESt12memory_order; + _ZNSt9__atomic011atomic_flag5clearESt12memory_order; + # future _ZSt15future_category; _ZNSt12future_errorD*; diff --git a/libstdc++-v3/src/atomic.cc b/libstdc++-v3/src/atomic.cc index bff8fa98c647..7ec08c5d7c0c 100644 --- a/libstdc++-v3/src/atomic.cc +++ b/libstdc++-v3/src/atomic.cc @@ -78,15 +78,15 @@ namespace std { bool atomic_flag_test_and_set_explicit(__atomic_flag_base* __a, - memory_order __m) throw () + memory_order __m) throw() { atomic_flag* d = static_cast<volatile atomic_flag*>(__a); return d->test_and_set(__m); } void - atomic_flag_clear_explicit(__atomic_flag_base* __a, - memory_order __m) throw () + atomic_flag_clear_explicit(__atomic_flag_base* __a, + memory_order __m) throw() { atomic_flag* d = static_cast<volatile atomic_flag*>(__a); return d->clear(__m); @@ -94,14 +94,14 @@ namespace std void __atomic_flag_wait_explicit(__atomic_flag_base* __a, - memory_order __x) throw () + memory_order __x) throw() { while (atomic_flag_test_and_set_explicit(__a, __x)) { }; } __atomic_flag_base* - __atomic_flag_for_address(const void* __z) throw () + __atomic_flag_for_address(const void* __z) throw() { uintptr_t __u = reinterpret_cast<uintptr_t>(__z); __u += (__u >> 2) + (__u << 4); @@ -126,12 +126,14 @@ namespace std // In the future, GLIBCXX_ABI > 6 should remove all uses of // _GLIBCXX_*_SYMVER macros in this file. +#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \ + && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) + #define _GLIBCXX_ASM_SYMVER(cur, old, version) \ asm (".symver " #cur "," #old "@@" #version); -#if defined(_GLIBCXX_SYMVER_GNU) && defined(PIC) \ - && defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) _GLIBCXX_ASM_SYMVER(_ZNSt9__atomic011atomic_flag5clearESt12memory_order, _ZNVSt9__atomic011atomic_flag5clearESt12memory_order, GLIBCXX_3.4.11) _GLIBCXX_ASM_SYMVER(_ZNSt9__atomic011atomic_flag12test_and_setESt12memory_order, _ZNVSt9__atomic011atomic_flag12test_and_setESt12memory_order, GLIBCXX_3.4.11) + #endif -- GitLab