[CRIU] [PATCH] aarch64: Fix restore for multithreaded processes

Christopher Covington cov at codeaurora.org
Fri Jan 9 08:20:26 PST 2015


The stack handling in the RUN_CLONE_RESTORE_FN macro for
AArch64 was incorrect, resulting in a segfault of the restored
process. With this change the pthread00 test case (and probably
others) runs to completion and passes.

Signed-off-by: Christopher Covington <cov at codeaurora.org>
---
 arch/aarch64/include/asm/restorer.h | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/aarch64/include/asm/restorer.h b/arch/aarch64/include/asm/restorer.h
index 61e8576..583f958 100644
--- a/arch/aarch64/include/asm/restorer.h
+++ b/arch/aarch64/include/asm/restorer.h
@@ -51,8 +51,9 @@ struct rt_sigframe {
 			     thread_args, clone_restore_fn)			\
 	asm volatile(								\
 			"clone_emul:					\n"	\
-			"and x1, %2, #~15				\n"	\
-			"sub x1, x2, #16				\n"	\
+			"ldr x1, %2					\n"	\
+			"and x1, x1, #~15				\n"	\
+			"sub x1, x1, #16				\n"	\
 			"stp %5, %6, [x1]				\n"	\
 			"mov x0, %1					\n"	\
 			"mov x2, %3					\n"	\
@@ -72,14 +73,13 @@ struct rt_sigframe {
 			"clone_end:					\n"	\
 			: "=r"(ret)						\
 			: "r"(clone_flags),					\
-			  "r"(new_sp),						\
+			  "m"(new_sp),						\
 			  "r"(&parent_tid),					\
 			  "r"(&thread_args[i].pid),				\
 			  "r"(clone_restore_fn),				\
 			  "r"(&thread_args[i])					\
 			: "x0", "x1", "x2", "x3", "x8", "memory")
 
-
 #define ARCH_FAIL_CORE_RESTORE					\
 	asm volatile(						\
 			"mov sp, %0			\n"	\
-- 
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project



More information about the CRIU mailing list