|
From: | michael |
Subject: | Re: [Qemu-devel] SH4 TARGET_NR_clone |
Date: | Thu, 21 Aug 2008 18:53:59 +0200 |
User-agent: | Thunderbird 2.0.0.16 (X11/20080724) |
Hi, Thiemo Seufer wrote:
michael wrote:Hi, This patch fix the call of Clone in SH4 systemWhat exactly does it fix? The kernel side of sys_clone seems to be no different to other architectures.
Look at the libc code: nptl/sysdeps/unix/sysv/linux/fork.c the fork is implemente in this file. The ARCH_FORK is different in i386 an sh code. sh code: /* TLS pointer argument is passed as the 5-th argument. */ #define ARCH_FORK() \INLINE_SYSCALL (clone, 5, \ CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \
NULL, &THREAD_SELF->tid, NULL) i386 code: #define ARCH_FORK() \INLINE_SYSCALL (clone, 5, \ CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \
NULL, NULL, &THREAD_SELF->tid)As you can see the 4th and 5th argument are inverted, and it maybe justify my problem.
ThiemoThis patch implements the correct TARGET_NR_clone for SH4 cpu. Signed-off-by: Michael Trimarchi <address@hidden> Index: linux-user/syscall.c =================================================================== --- linux-user/syscall.c (revision 4865) +++ linux-user/syscall.c (working copy) @@ -53,6 +53,7 @@ //#include <sys/user.h> #include <netinet/ip.h> #include <netinet/tcp.h> +#include <qemu-common.h>#define termios host_termios#define winsize host_winsize @@ -4657,7 +4658,11 @@ ret = get_errno(fsync(arg1)); break; case TARGET_NR_clone: +#if !defined(TARGET_SH4) ret = get_errno(do_fork(cpu_env, arg1, arg2, arg3, arg4, arg5)); +#else + ret = get_errno(do_fork(cpu_env, arg1, arg2, arg3, arg5, arg4)); +#endif break; #ifdef __NR_exit_group /* new thread calls */
Regards Michael
[Prev in Thread] | Current Thread | [Next in Thread] |