From 70f28122e518e73e4be4945a7f9b6579b755b78d Mon Sep 17 00:00:00 2001 From: Christopher Covington Date: Fri, 9 Jan 2015 19:20:00 +0300 Subject: [PATCH] aarch64: Fix restore for multithreaded processes 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 Signed-off-by: Pavel Emelyanov --- 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 61e8576c9..583f9583b 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" \