Hello Arnaud,

On 12 Jul 2012, at 11:43, Arnaud Charlet wrote:

> The optimization of the expansion of protected procedure for the lock-free
> implementation brings the following changes:
> - Several renamings in order to match GCC built-in function wordings.
> - Expected_Comp declaration moved to the the declarations list of the 
> procedure
> - GCC built-in operation__sync_bool_compare_and_swap replaced by
>  __sync_val_compare_and_swap.
> - Don't use an atomic compare and swap if Expected_Comp = Desired_Comp
> 
> Tested on x86_64-pc-linux-gnu, committed on trunk
> 
> 2012-07-12  Vincent Pucci  <pu...@adacore.com>
> 
>       * exp_ch9.adb (Build_Lock_Free_Unprotected_Subprogram_Body):
>       Atomic_Load_N replaced by Lock_Free_Read_N. Atomic_Compare_Exchange_N
>       replaced by Lock_Free_Try_Write_N.
>       Renaming of several local variables. For
>       procedure, Expected_Comp declaration moved to the declaration
>       list of the procedure.
>       * rtsfind.ads: RE_Atomic_Compare_Exchange_8,
>       RE_Atomic_Compare_Exchange_16, RE_Atomic_Compare_Exchange_32,
>       RE_Atomic_Compare_Exchange_64, RE_Atomic_Load_8,
>       RE_Atomic_Load_16, RE_Atomic_Load_32, RE_Atomic_Load_64,
>       RE_Atomic_Synchronize, RE_Relaxed removed.  RE_Lock_Free_Read_8,
>       RE_Lock_Free_Read_16, RE_Lock_Free_Read_32, RE_Lock_Free_Read_64,
>       RE_Lock_Free_Try_Write_8, RE_Lock_Free_Try_Write_16,
>       RE_Lock_Free_Try_Write_32, RE_Lock_Free_Try_Write_64 added.
>       * s-atopri.adb: New file.
>       * s-atopri.ads (Atomic_Compare_Exchange_8): Renaming of
>       parameters.  Import primitive __sync_val_compare_and_swap_1.
>       (Atomic_Compare_Exchange_16): Renaming of parameters.
>       Import primitive __sync_val_compare_and_swap_2.
>       (Atomic_Compare_Exchange_32): Renaming of parameters.
>       Import primitive __sync_val_compare_and_swap_4.
>       (Atomic_Compare_Exchange_64): Renaming of parameters.  Import
>       primitive __sync_val_compare_and_swap_8.
>       (Atomic_Load_8): Ptr renames parameter X.
>       (Atomic_Load_16): Ptr renames parameter X.
>       (Atomic_Load_32): Ptr renames parameter X.
>       (Atomic_Load_64): Ptr renames parameter X.
>       (Lock_Free_Read_8): New routine.
>       (Lock_Free_Read_16): New routine.
>       (Lock_Free_Read_32): New routine.
>       (Lock_Free_Read_64): New routine.
>       (Lock_Free_Try_Write_8): New routine.
>       (Lock_Free_Try_Write_16): New routine.
>       (Lock_Free_Try_Write_32): New routine.
>       (Lock_Free_Try_Write_64): New routine.

http://gcc.gnu.org/ml/gcc-cvs/2012-07/msg00341.html

This breaks ada bootstrap on powerpc-darwin9 with :
 Undefined symbols:
  "___sync_val_compare_and_swap_8", referenced from:
      _system__atomic_primitives__lock_free_try_write_64 in s-atopri.o
  "___atomic_load_8", referenced from:
      _system__atomic_primitives__lock_free_read_64 in s-atopri.o
ld: symbol(s) not found

(and, I assume any other target without __sync_val_compare_and_swap_8 builtin 
or library fall-back).

If you think this is a target bug, let me know and I'll try and delve further.
thanks
Iain



Reply via email to