[CRIU] [PATCH 4/4] ppc asm/bitops.h: fix for clang

Laurent Dufour ldufour at linux.vnet.ibm.com
Thu Oct 27 00:58:50 PDT 2016


On 26/10/2016 07:08, Kir Kolyshkin wrote:
> clang-3.8 fails to compile inline asm having ldarx with 4 args.
> 
> Quoting [1]:
> '''
> Recent versions of the PowerPC architecture added a hint bit to the larx
> instructions to differentiate between an atomic operation and a lock
> operation:
> 
>> 0 Other programs might attempt to modify the word in storage addressed by EA
>> even if the subsequent Store Conditional succeeds.
>>
>> 1 Other programs will not attempt to modify the word in storage addressed by
>> EA until the program that has acquired the lock performs a subsequent
>> store releasing the lock.
> '''
> 
> I also found some more info about this in [2].
> 
> Anyway, we could either construct some preprocessor logic to omit this
> argument for clang, or just drop it. This patch does the latter.
> 
> [1] https://patchwork.ozlabs.org/patch/45008/
> [2] https://sourceware.org/ml/libc-alpha/2015-03/msg00085.html

Acked-by: Laurent Dufour <ldufour at linux.vnet.ibm.com>

> Cc: Laurent Dufour <ldufour at linux.vnet.ibm.com>
> Signed-off-by: Kir Kolyshkin <kir at openvz.org>
> ---
>  criu/arch/ppc64/include/asm/bitops.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/criu/arch/ppc64/include/asm/bitops.h b/criu/arch/ppc64/include/asm/bitops.h
> index 9109719..b139889 100644
> --- a/criu/arch/ppc64/include/asm/bitops.h
> +++ b/criu/arch/ppc64/include/asm/bitops.h
> @@ -68,7 +68,7 @@ static __inline__ void fn(unsigned long mask,   \
>          unsigned long old;                      \
>          unsigned long *p = (unsigned long *)_p; \
>          __asm__ __volatile__ (                  \
> -"1:	ldarx	%0,0,%3,0\n"			\
> +"1:	ldarx	%0,0,%3\n"			\
>          stringify_in_c(op) "%0,%0,%2\n"		\
>          "stdcx.	%0,0,%3\n"			\
>          "bne- 1b\n"                             \
> 



More information about the CRIU mailing list