[Gc] Powerpc/m68k issue running test_stack

Michael Cree mcree at orcon.net.nz
Mon Sep 24 01:43:43 PDT 2012


On Sun 23 September 2012 21:44:34 Ivan Maidanski wrote:
> Hi Michael, Thorsten and Wouter,
> 
> A couple of months, You reported libatomic_ops-7.3alpaha test_stack failure
> on Alpha, PowerPC and m68k: *
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680100
> * http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680066
> 
> 1. Could you please verify that the problem exists in the recent
> libatomic_ops-7.2:

On Alpha the test_stack failure is not present in the release-7_2 branch but 
is present in master.  It therefore looks like a regression.

The test_stack failure only happens when running under an SMP linux kernel.  
In the testing I have just performed against git master it always resulted in 
a detected fail in the test_stack test but the Debian packaged version can 
result in a list item pointing to itself, thus an infinite loop in the 
check_list() function in tests/test_stack.c.

I bisected between the head of the release-7_2 branch and master which results 
in:

cc51941b02fddc75952831eb8e28b06d340d2bef is the first bad commit
commit cc51941b02fddc75952831eb8e28b06d340d2bef
Author: Ivan Maidanski <ivmai at mail.ru>
Date:   Mon Mar 26 08:06:19 2012 +0400

    Use __builtin_expect in CAS failure loop condition checks (GCC only)
    
    * src/atomic_ops.c (lock, block_all_signals): Use AO_EXPECT_FALSE.
    * src/atomic_ops.h (AO_EXPECT_FALSE): New macro.
    * src/atomic_ops/generalize-small.template
    (AO_XSIZE_fetch_and_add_full, AO_XSIZE_fetch_and_add_acquire,
    AO_XSIZE_fetch_and_add_release): Use AO_EXPECT_FALSE for CAS failure
    check.
    * src/atomic_ops/generalize.h (AO_fetch_and_add_full,
    AO_fetch_and_add_acquire, AO_fetch_and_add_release, AO_fetch_and_add,
    AO_and_full, AO_or_full, AO_xor_full): Likewise.
    * src/atomic_ops/sysdeps/gcc/arm.h
    (AO_compare_double_and_swap_double): Likewise.
    * src/atomic_ops_stack.c (AO_stack_push_explicit_aux_release,
    AO_stack_pop_explicit_aux_acquire, AO_stack_push_release,
    AO_stack_pop_acquire): Likewise.
    * src/atomic_ops/generalize-small.h: Regenerate.

:040000 040000 15676aef9361c647a597a25e8dd0e152d34681cb 
a209c59999ae9072859594d532125236b898779c M   src

Something really subtle must be going on as the only change in the commit is 
to wrap if statement conditionals with AO_EXPECT_FALSE().

Cheers
Michael.


More information about the Gc mailing list