Unfortunately, the __sync_synchronize() bug appears still to be present in the
updated GCC.
A call to this intrinsic still disappears in the compiler's output.
The __sync_lock_test_and_set() bug may still be present; however it is
also possible that the __sync_synchronize() bug is masking the fix.
$ apt-cache policy gcc-4.4 cpp-4.4
gcc-4.4:
Installed: 4.4.2-3ubuntu2
Candidate: 4.4.2-3ubuntu2
Version table:
*** 4.4.2-3ubuntu2 0
500 http://arm-ports-ubuntu lucid/main Packages
100 /var/lib/dpkg/status
cpp-4.4:
Installed: 4.4.2-3ubuntu2
Candidate: 4.4.2-3ubuntu2
Version table:
*** 4.4.2-3ubuntu2 0
500 http://arm-ports-ubuntu lucid/main Packages
100 /var/lib/dpkg/status
$ echo 'void f(void) { __sync_synchronize(); }' | gcc -S -o- -xc -
.syntax unified
.arch armv7-a
.eabi_attribute 27, 3
.fpu vfpv3-d16
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 2
.eabi_attribute 30, 6
.eabi_attribute 18, 4
.thumb
.file ""
.text
.align 2
.global f
.thumb
.thumb_func
.type f, %function
f:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, uses_anonymous_args = 0
@ link register save eliminated.
push {r7}
add r7, sp, #0
mov sp, r7
pop {r7}
bx lr
.size f, .-f
.ident "GCC: (Ubuntu 4.4.2-3ubuntu2) 4.4.2"
.section .note.GNU-stack,"",%progbits
__sync_lock_test_and_set_* still don't contain a barrier in the right place,
though this may be due to the above bug.
00008e04 <__sync_lock_test_and_set_4>:
8e04: e92d 41f0 stmdb sp!, {r4, r5, r6, r7, r8, lr}
8e08: f640 76c0 movw r6, #4032 ; 0xfc0
8e0c: 4605 mov r5, r0
8e0e: 460f mov r7, r1
8e10: f6cf 76ff movt r6, #65535 ; 0xffff
8e14: 682c ldr r4, [r5, #0]
8e16: 4639 mov r1, r7
8e18: 462a mov r2, r5
8e1a: 4620 mov r0, r4
8e1c: 47b0 blx r6
8e1e: 2800 cmp r0, #0
8e20: d1f8 bne.n 8e14 <__sync_lock_test_and_set_4+0x10>
8e22: 4620 mov r0, r4
8e24: e8bd 81f0 ldmia.w sp!, {r4, r5, r6, r7, r8, pc}
--
[armel] Atomic intrinsics are not implemented correctly
https://bugs.launchpad.net/bugs/491872
You received this bug notification because you are a member of Ubuntu
Desktop Bugs, which is subscribed to glib2.0 in ubuntu.
--
desktop-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/desktop-bugs