[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 14/28] linux-user: Support for restarting system
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH v2 14/28] linux-user: Support for restarting system calls for OpenRISC targets |
Date: |
Thu, 12 May 2016 18:47:38 +0100 |
From: Timothy E Baldwin <address@hidden>
Update the OpenRISC main loop code:
* on TARGET_ERESTARTSYS, wind guest PC backwards to repeat syscall insn
* handle TARGET_QEMU_ESIGRETURN in the main loop as the indication
that the main loop should not touch any guest CPU state
(We don't implement sigreturn on this target so there is no
code there to update.)
Signed-off-by: Timothy Edward Baldwin <address@hidden>
Message-id: address@hidden
Reviewed-by: Peter Maydell <address@hidden>
[PMM: tweak commit message; drop TARGET_USE_ERESTARTSYS define]
Signed-off-by: Peter Maydell <address@hidden>
---
linux-user/main.c | 22 ++++++++++++++--------
linux-user/openrisc/target_signal.h | 1 +
2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/linux-user/main.c b/linux-user/main.c
index 5e5efa9..fa75521 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -2723,6 +2723,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);
@@ -2768,14 +2769,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_mask(CPU_LOG_INT, "\nFloating point error\n");
diff --git a/linux-user/openrisc/target_signal.h
b/linux-user/openrisc/target_signal.h
index 964aed6..f600501 100644
--- a/linux-user/openrisc/target_signal.h
+++ b/linux-user/openrisc/target_signal.h
@@ -23,4 +23,5 @@ static inline abi_ulong get_sp_from_cpustate(CPUOpenRISCState
*state)
return state->gpr[1];
}
+
#endif /* TARGET_SIGNAL_H */
--
1.9.1
- [Qemu-devel] [PATCH v2 25/28] linux-user: Use safe_syscall for wait system calls, (continued)
- [Qemu-devel] [PATCH v2 25/28] linux-user: Use safe_syscall for wait system calls, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 07/28] linux-user: Support for restarting system calls for ARM targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 13/28] linux-user: Support for restarting system calls for UniCore32 targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 04/28] linux-user: Define TARGET_ERESTART* errno values, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 22/28] linux-user: Provide safe_syscall for fixing races between signals and syscalls, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 06/28] linux-user: Support for restarting system calls for x86 targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 02/28] linux-user: Consistently return host errnos from do_openat(), Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 27/28] linux-user: Use safe_syscall for pselect, select syscalls, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 24/28] linux-user: Use safe_syscall for open and openat system calls, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 14/28] linux-user: Support for restarting system calls for OpenRISC targets,
Peter Maydell <=
- [Qemu-devel] [PATCH v2 19/28] linux-user: Set r14 on exit from microblaze syscall, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 12/28] linux-user: Support for restarting system calls for Alpha targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 23/28] linux-user: Use safe_syscall for read and write system calls, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 08/28] linux-user: Support for restarting system calls for MIPS targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 16/28] linux-user: Support for restarting system calls for S390 targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 03/28] linux-user: Reindent signal handling, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 10/28] linux-user: Support for restarting system calls for SPARC targets, Peter Maydell, 2016/05/12