There are two subtle wrong code bugs in the __sync_... primitives that severely affect code generation for linux. Both of these have been fixed on trunk. http://gcc.gnu.org/ml/gcc-patches/2009-12/msg00198.html http://gcc.gnu.org/ml/gcc-patches/2009-08/msg00600.html but need back-porting to 4.4
Fixing target milestone and version reported against. cheers Ramana
Subject: Bug 42263 Author: ramana Date: Fri Dec 11 17:37:34 2009 New Revision: 155171 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=155171 Log: 2009-12-11 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> PR target/42263 2009-08-11 Andrew Haley <aph@redhat.com> * config/arm/arm.c (arm_init_libfuncs): Add __sync_synchronize. Modified: branches/gcc-4_4-branch/gcc/ChangeLog branches/gcc-4_4-branch/gcc/config/arm/arm.c
Subject: Bug 42263 Author: ramana Date: Fri Dec 11 17:45:32 2009 New Revision: 155172 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=155172 Log: 2009-12-11 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> PR target/42263 Backport from mainline 2009-12-03 Richard Earnshaw <rearnsha@arm.com> * arm/linux-atomic.c (SYNC_LOCK_RELEASE): Place memory barrier before the lock release. Modified: branches/gcc-4_4-branch/gcc/ChangeLog branches/gcc-4_4-branch/gcc/config/arm/linux-atomic.c
Fixed.