From patchwork Wed Feb 17 15:35:03 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: sh4 linux-user: Fix syscall pipe2() retval Date: Wed, 17 Feb 2010 05:35:03 -0000 From: takasi-y@ops.dti.ne.jp X-Patchwork-Id: 45639 Message-Id: <201002171535.o1HFZ3Ra009730@smtp09.dti.ne.jp> To: qemu-devel@nongnu.org On linux/sh4 pipe() return values by r0:r1 as SH C calling convention. pipe2() return values on memory as traditional unix way. Signed-off-by: Takashi YOSHII --- linux-user/syscall.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 9fb493f..034a2b0 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -969,10 +969,13 @@ static abi_long do_pipe(void *cpu_env, abi_ulong pipedes, int flags) #if defined(TARGET_MIPS) ((CPUMIPSState*)cpu_env)->active_tc.gpr[3] = host_pipe[1]; ret = host_pipe[0]; -#elif defined(TARGET_SH4) - ((CPUSH4State*)cpu_env)->gregs[1] = host_pipe[1]; - ret = host_pipe[0]; #else +#if defined(TARGET_SH4) + if (!flags) { + ((CPUSH4State*)cpu_env)->gregs[1] = host_pipe[1]; + ret = host_pipe[0]; + } else +#endif if (put_user_s32(host_pipe[0], pipedes) || put_user_s32(host_pipe[1], pipedes + sizeof(host_pipe[0]))) return -TARGET_EFAULT;