]> granicus.if.org Git - strace/commitdiff
riscv: Fixup wrong clone's arguments define
authorGuo Ren <ren_guo@c-sky.com>
Fri, 22 Mar 2019 08:58:17 +0000 (16:58 +0800)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 24 Mar 2019 12:12:58 +0000 (12:12 +0000)
In linux kernel riscv select CLONE_BACKWARDS in
linux/arch/riscv/Kconfig, and in linux/kernel/fork.c:

ifdef CONFIG_CLONE_BACKWARDS
SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
 int __user *, parent_tidptr,
 unsigned long, tls,
 int __user *, child_tidptr)
elif ...

So we must make the riscv clone-arguments' sequence to be:
  define ARG_FLAGS 0
  define ARG_STACK 1
  define ARG_PTID 2
  define ARG_TLS 3
  define ARG_CTID 4

Signed-off-by: Guo Ren <ren_guo@c-sky.com>
Reviewed-By: Dmitry V. Levin <ldv@altlinux.org>
* clone.c [RISCV]: Use default definitions for ARG_* macros.
* NEWS: Mention this fix.

NEWS
clone.c

diff --git a/NEWS b/NEWS
index 58949b33cea300225565bdac5d6fded72375dd7c..cf63deaef46b996712ff4a620214cba5e17253bf 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,9 @@
 Noteworthy changes in release ?.? (????-??-??)
 ==============================================
 
+* Bug fixes
+  * Fixed decoding of last two arguments of clone syscall on riscv.
+
 Noteworthy changes in release 5.0 (2019-03-19)
 ==============================================
 
diff --git a/clone.c b/clone.c
index d37e580f67ee93bc1596ab52ae31d4339f8a5893..64c7e950f3b623e11185e48cfa9ff99cfbd910a9 100644 (file)
--- a/clone.c
+++ b/clone.c
@@ -42,7 +42,7 @@
 # define ARG_PTID      2
 # define ARG_CTID      ((current_personality != 1) ? 3 : 4)
 # define ARG_TLS       ((current_personality != 1) ? 4 : 3)
-#elif defined ALPHA || defined TILE || defined OR1K || defined RISCV
+#elif defined ALPHA || defined TILE || defined OR1K
 # define ARG_FLAGS     0
 # define ARG_STACK     1
 # define ARG_PTID      2