[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 30/34] linux-user: Support for restarting system cal
From: |
Timothy E Baldwin |
Subject: |
[Qemu-devel] [PATCH 30/34] linux-user: Support for restarting system calls for OpenRISC targets |
Date: |
Sun, 6 Sep 2015 00:57:24 +0100 |
Signed-off-by: Timothy Edward Baldwin <address@hidden>
---
WARNING - NOT TESTED
linux-user/main.c | 22 ++++++++++++++--------
linux-user/openrisc/syscall.h | 2 ++
2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/linux-user/main.c b/linux-user/main.c
index 9ca1c99..b052e17 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -2687,6 +2687,7 @@ void cpu_loop(CPUOpenRISCState *env)
{
CPUState *cs = CPU(openrisc_env_get_cpu(env));
int trapnr, gdbsig;
+ abi_long ret;
for (;;) {
cpu_exec_start(cs);
@@ -2732,14 +2733,19 @@ void cpu_loop(CPUOpenRISCState *env)
break;
case EXCP_SYSCALL:
env->pc += 4; /* 0xc00; */
- env->gpr[11] = do_syscall(env,
- env->gpr[11], /* return value */
- env->gpr[3], /* r3 - r7 are params */
- env->gpr[4],
- env->gpr[5],
- env->gpr[6],
- env->gpr[7],
- env->gpr[8], 0, 0);
+ ret = do_syscall(env,
+ env->gpr[11], /* return value */
+ env->gpr[3], /* r3 - r7 are params */
+ env->gpr[4],
+ env->gpr[5],
+ env->gpr[6],
+ env->gpr[7],
+ env->gpr[8], 0, 0);
+ if (ret == -TARGET_ERESTARTSYS) {
+ env->pc -= 4;
+ } else if (ret != -TARGET_QEMU_ESIGRETURN) {
+ env->gpr[11] = ret;
+ }
break;
case EXCP_FPE:
qemu_log("\nFloating point error\n");
diff --git a/linux-user/openrisc/syscall.h b/linux-user/openrisc/syscall.h
index 8ac0365..74787ed 100644
--- a/linux-user/openrisc/syscall.h
+++ b/linux-user/openrisc/syscall.h
@@ -27,3 +27,5 @@ struct target_pt_regs {
#define TARGET_MINSIGSTKSZ 2048
#define TARGET_MLOCKALL_MCL_CURRENT 1
#define TARGET_MLOCKALL_MCL_FUTURE 2
+
+#define TARGET_USE_ERESTARTSYS 1
--
2.1.4
- Re: [Qemu-devel] [PATCH 25/34] linux-user: Restart exit() if signal pending, (continued)
- [Qemu-devel] [PATCH 11/34] linux-user: Support for restarting system calls for SH4 targets, Timothy E Baldwin, 2015/09/05
- [Qemu-devel] [PATCH 27/34] linux-user: pause() should not pause if signal pending, Timothy E Baldwin, 2015/09/05
- [Qemu-devel] [PATCH 05/34] linux-user: Support for restarting system calls for ARM targets, Timothy E Baldwin, 2015/09/05
- [Qemu-devel] [PATCH 13/34] linux-user: Fix signal before blocking system calls race and SA_RESTART, Timothy E Baldwin, 2015/09/05
- [Qemu-devel] [PATCH 30/34] linux-user: Support for restarting system calls for OpenRISC targets,
Timothy E Baldwin <=
- [Qemu-devel] [PATCH 29/34] linux-user: Support for restarting system calls for UniCore32 targets, Timothy E Baldwin, 2015/09/05
- [Qemu-devel] [PATCH 12/34] linux-user: Support for restarting system calls for APLHA targets, Timothy E Baldwin, 2015/09/05
- [Qemu-devel] [PATCH 28/34] linux-user: Restart sigaction() if signal pending, Timothy E Baldwin, 2015/09/05
- [Qemu-devel] [PATCH 23/34] linux-user: Queue synchronous signals separately, Timothy E Baldwin, 2015/09/05
- [Qemu-devel] [PATCH 32/34] linux-user: Support for restarting system calls for S390 targets, Timothy E Baldwin, 2015/09/05