[CRIU] [PATCH] Fix gcc9 build failures

Andrei Vagin avagin at gmail.com
Sun Jan 13 09:23:15 MSK 2019


Applied, thanks!

On Wed, Jan 09, 2019 at 12:49:11PM +0000, Adrian Reber wrote:
> From: Adrian Reber <areber at redhat.com>
> 
> I received this patch from Jeff Law as a fix for build failures with the
> upcoming GCC 9. The following is Jeff Law's description of the patch:
> 
>  Attached you'll find the fix for criu.  You'll see it's just a matter
>  of dropping the sp/esp clobber from the relevant asm statements.  THe
>  details:
> 
>  criu has a macro which defines an asm which appears to want to set a new
>  stack pointer, then directly issue a sigreturn call to the kernel.  Some
>  variants clobber sp (aarch64, arm, x86), others do not (ppc, s390)
> 
>  While the asm does indeed set a new stack pointer, we never return from
>  a sigreturn syscall -- at least not in the normal way.  We actually
>  return back to the point where the process was interrupted by the
>  signal.  So describing the affect of the asm on the stack pointer is
>  pedantically correct, it actually has no real effect and can just be
>  dropped to avoid the hard error from gcc-9.
> 
> Suggested-by: Jeff Law <law at redhat.com>
> Reviewed-by: Dmitry Safonov <0x7f454c46 at gmail.com>
> Signed-off-by: Adrian Reber <areber at redhat.com>
> ---
>  compel/arch/aarch64/src/lib/include/uapi/asm/sigframe.h | 2 +-
>  compel/arch/arm/src/lib/include/uapi/asm/sigframe.h     | 2 +-
>  compel/arch/x86/src/lib/include/uapi/asm/sigframe.h     | 4 ++--
>  3 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/compel/arch/aarch64/src/lib/include/uapi/asm/sigframe.h b/compel/arch/aarch64/src/lib/include/uapi/asm/sigframe.h
> index 6b511ce..6b9317b 100644
> --- a/compel/arch/aarch64/src/lib/include/uapi/asm/sigframe.h
> +++ b/compel/arch/aarch64/src/lib/include/uapi/asm/sigframe.h
> @@ -39,7 +39,7 @@ struct rt_sigframe {
>  			"svc #0						\n"	\
>  			:							\
>  			: "r"(new_sp)						\
> -			: "sp", "x8", "memory")
> +			: "x8", "memory")
>  
>  /* cr_sigcontext is copied from arch/arm64/include/uapi/asm/sigcontext.h */
>  struct cr_sigcontext {
> diff --git a/compel/arch/arm/src/lib/include/uapi/asm/sigframe.h b/compel/arch/arm/src/lib/include/uapi/asm/sigframe.h
> index 3e7bc01..b90c0f6 100644
> --- a/compel/arch/arm/src/lib/include/uapi/asm/sigframe.h
> +++ b/compel/arch/arm/src/lib/include/uapi/asm/sigframe.h
> @@ -73,7 +73,7 @@ struct rt_sigframe {
>  		     "svc #0					    \n"	\
>  		     :							\
>  		     : "r"(new_sp)					\
> -		     : "sp","memory")
> +		     : "memory")
>  
>  #define RT_SIGFRAME_UC(rt_sigframe)		(&rt_sigframe->sig.uc)
>  #define RT_SIGFRAME_REGIP(rt_sigframe)		(rt_sigframe)->sig.uc.uc_mcontext.arm_ip
> diff --git a/compel/arch/x86/src/lib/include/uapi/asm/sigframe.h b/compel/arch/x86/src/lib/include/uapi/asm/sigframe.h
> index 0ad45a5..c29de3b 100644
> --- a/compel/arch/x86/src/lib/include/uapi/asm/sigframe.h
> +++ b/compel/arch/x86/src/lib/include/uapi/asm/sigframe.h
> @@ -162,7 +162,7 @@ struct rt_sigframe {
>  		     "syscall					    \n"	\
>  		     :							\
>  		     : "r"(new_sp)					\
> -		     : "rax","rsp","memory")
> +		     : "rax","memory")
>  #define ARCH_RT_SIGRETURN_COMPAT(new_sp)				\
>  	asm volatile(							\
>  		"pushq $"__stringify(USER32_CS)"		\n"	\
> @@ -176,7 +176,7 @@ struct rt_sigframe {
>  		".code64					\n"	\
>  		:							\
>  		: "rdi"(new_sp)						\
> -		: "eax","esp", "r8", "r9", "r10", "r11", "memory")
> +		: "eax", "r8", "r9", "r10", "r11", "memory")
>  
>  #define ARCH_RT_SIGRETURN(new_sp, rt_sigframe)				\
>  do {									\
> -- 
> 1.8.3.1
> 


More information about the CRIU mailing list