Add memory barriers to the double-checked locking used for static initialization.
authorJason Merrill <jason@redhat.com>
Tue, 28 Dec 2004 04:36:54 +0000 (23:36 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 28 Dec 2004 04:36:54 +0000 (23:36 -0500)
commit445cf5eb0d91d2aa401ff3907fcf993a44e4c8b4
treed723d1a31c0c3358f41a176191bde7ef4add806e
parent1f7edb8b3d65da166df57999ae6053bfdbf939de
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
20 files changed:
gcc/ChangeLog
gcc/config/alpha/alpha.c
gcc/config/ia64/ia64.c
gcc/config/rs6000/rs6000.c
gcc/config/sparc/sparc.c
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/doc/tm.texi
gcc/target-def.h
gcc/target.h
libstdc++-v3/ChangeLog
libstdc++-v3/config/cpu/alpha/atomic_word.h [new file with mode: 0644]
libstdc++-v3/config/cpu/arm/cxxabi_tweaks.h
libstdc++-v3/config/cpu/generic/atomic_word.h
libstdc++-v3/config/cpu/generic/cxxabi_tweaks.h
libstdc++-v3/config/cpu/ia64/atomic_word.h [new file with mode: 0644]
libstdc++-v3/config/cpu/powerpc/atomic_word.h [new file with mode: 0644]
libstdc++-v3/config/cpu/sparc/atomic_word.h
libstdc++-v3/include/bits/atomicity.h
libstdc++-v3/libsupc++/guard.cc