Add memory barriers to the double-checked locking used for static initialization.
libstdc++: Add memory barriers to the double-checked locking used for static initialization. * libsupc++/guard.cc (__test_and_acquire): Define default. (_GLIBCXX_GUARD_TEST_AND_ACQUIRE, __set_and_release) (_GLIBCXX_GUARD_SET_AND_RELEASE): Likewise. (recursion_push, recursion_pop): New abstraction functions. (__cxa_guard_acquire): Use _GLIBCXX_GUARD_TEST_AND_ACQUIRE. (__cxa_guard_release): Use _GLIBCXX_GUARD_SET_AND_RELEASE. * config/cpu/generic/cxxabi_tweaks.h (_GLIBCXX_GUARD_TEST): Rename from _GLIBCXX_GUARD_ACQUIRE and reverse sense. (_GLIBCXX_GUARD_SET): Rename from _GLIBCXX_GUARD_RELEASE. * config/cpu/arm/cxxabi_tweaks.h: Likewise. * config/cpu/alpha/atomic_word.h (_GLIBCXX_READ_MEM_BARRIER) (_GLIBCXX_WRITE_MEM_BARRIER): Define. * config/cpu/powerpc/atomic_word.h: Likewise. * config/cpu/sparc/atomic_word.h: Likewise. * config/cpu/generic/atomic_word.h: Define them, commented out. * include/bits/atomicity.h: Define defaults. * config/cpu/ia64/atomic_word.h (__test_and_acquire) (__set_and_release): New inlines. (_GLIBCXX_GUARD_TEST_AND_ACQUIRE): Define. (_GLIBCXX_GUARD_SET_AND_RELEASE): Define. * libsupc++/guard.cc (acquire_1): Use __builtin_trap instead of abort(); gcc: * doc/tm.texi (TARGET_RELAXED_ORDERING): Document. * target.h (struct gcc_target): Add relaxed_ordering field. * target-def.h (TARGET_RELAXED_ORDERING): Define default. (TARGET_INITIALIZER): Add it. * config/alpha/alpha.c (TARGET_RELAXED_ORDERING): Define. * config/ia64/ia64.c (TARGET_RELAXED_ORDERING): Define. * config/rs6000/rs6000.c (TARGET_RELAXED_ORDERING): Define. * config/sparc/sparc.c (TARGET_RELAXED_ORDERING): Define. * cp/decl.c (expand_static_init): Don't use shortcut if targetm.relaxed_ordering. From-SVN: r92659
Showing
- gcc/ChangeLog 11 additions, 0 deletionsgcc/ChangeLog
- gcc/config/alpha/alpha.c 6 additions, 0 deletionsgcc/config/alpha/alpha.c
- gcc/config/ia64/ia64.c 5 additions, 0 deletionsgcc/config/ia64/ia64.c
- gcc/config/rs6000/rs6000.c 11 additions, 0 deletionsgcc/config/rs6000/rs6000.c
- gcc/config/sparc/sparc.c 5 additions, 0 deletionsgcc/config/sparc/sparc.c
- gcc/cp/ChangeLog 5 additions, 0 deletionsgcc/cp/ChangeLog
- gcc/cp/decl.c 18 additions, 9 deletionsgcc/cp/decl.c
- gcc/doc/tm.texi 10 additions, 0 deletionsgcc/doc/tm.texi
- gcc/target-def.h 4 additions, 0 deletionsgcc/target-def.h
- gcc/target.h 4 additions, 0 deletionsgcc/target.h
- libstdc++-v3/ChangeLog 28 additions, 0 deletionslibstdc++-v3/ChangeLog
- libstdc++-v3/config/cpu/alpha/atomic_word.h 38 additions, 0 deletionslibstdc++-v3/config/cpu/alpha/atomic_word.h
- libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h 4 additions, 4 deletionslibstdc++-v3/config/cpu/arm/cxxabi_tweaks.h
- libstdc++-v3/config/cpu/generic/atomic_word.h 13 additions, 0 deletionslibstdc++-v3/config/cpu/generic/atomic_word.h
- libstdc++-v3/config/cpu/generic/cxxabi_tweaks.h 2 additions, 2 deletionslibstdc++-v3/config/cpu/generic/cxxabi_tweaks.h
- libstdc++-v3/config/cpu/ia64/atomic_word.h 69 additions, 0 deletionslibstdc++-v3/config/cpu/ia64/atomic_word.h
- libstdc++-v3/config/cpu/powerpc/atomic_word.h 38 additions, 0 deletionslibstdc++-v3/config/cpu/powerpc/atomic_word.h
- libstdc++-v3/config/cpu/sparc/atomic_word.h 14 additions, 0 deletionslibstdc++-v3/config/cpu/sparc/atomic_word.h
- libstdc++-v3/include/bits/atomicity.h 9 additions, 0 deletionslibstdc++-v3/include/bits/atomicity.h
- libstdc++-v3/libsupc++/guard.cc 60 additions, 12 deletionslibstdc++-v3/libsupc++/guard.cc
Loading
Please register or sign in to comment