[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 14/38] linux-user: Support for restarting system call
From: |
riku . voipio |
Subject: |
[Qemu-devel] [PULL 14/38] linux-user: Support for restarting system calls for OpenRISC targets |
Date: |
Wed, 25 May 2016 13:31:46 +0300 |
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>
Signed-off-by: Riku Voipio <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 2d7e700..14a7826 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -2724,6 +2724,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);
@@ -2769,14 +2770,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 */
--
2.1.4
- [Qemu-devel] [PULL 04/38] linux-user: Define TARGET_ERESTART* errno values, (continued)
- [Qemu-devel] [PULL 04/38] linux-user: Define TARGET_ERESTART* errno values, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 06/38] linux-user: Support for restarting system calls for x86 targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 05/38] linux-user: Renumber TARGET_QEMU_ESIGRETURN, make it not arch-specific, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 07/38] linux-user: Support for restarting system calls for ARM targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 03/38] linux-user: Reindent signal handling, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 08/38] linux-user: Support for restarting system calls for MIPS targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 10/38] linux-user: Support for restarting system calls for SPARC targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 11/38] linux-user: Support for restarting system calls for SH4 targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 13/38] linux-user: Support for restarting system calls for UniCore32 targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 12/38] linux-user: Support for restarting system calls for Alpha targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 14/38] linux-user: Support for restarting system calls for OpenRISC targets,
riku . voipio <=
- [Qemu-devel] [PULL 17/38] linux-user: Support for restarting system calls for CRIS targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 09/38] linux-user: Support for restarting system calls for PPC targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 15/38] linux-user: Support for restarting system calls for M68K targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 20/38] linux-user: Support for restarting system calls for Microblaze targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 19/38] linux-user: Set r14 on exit from microblaze syscall, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 16/38] linux-user: Support for restarting system calls for S390 targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 21/38] linux-user: Add debug code to exercise restarting system calls, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 18/38] linux-user: Support for restarting system calls for tilegx targets, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 23/38] linux-user: Use safe_syscall for read and write system calls, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 22/38] linux-user: Provide safe_syscall for fixing races between signals and syscalls, riku . voipio, 2016/05/25