[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 13/28] linux-user: Support for restarting system
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH v2 13/28] linux-user: Support for restarting system calls for UniCore32 targets |
Date: |
Thu, 12 May 2016 18:47:37 +0100 |
From: Timothy E Baldwin <address@hidden>
Update the UniCore32 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 support signals on this target so there is no sigreturn code
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 | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/linux-user/main.c b/linux-user/main.c
index 94dc2d4..5e5efa9 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -1170,7 +1170,7 @@ void cpu_loop(CPUUniCore32State *env)
cpu_set_tls(env, env->regs[0]);
env->regs[0] = 0;
} else {
- env->regs[0] = do_syscall(env,
+ abi_long ret = do_syscall(env,
n,
env->regs[0],
env->regs[1],
@@ -1179,6 +1179,11 @@ void cpu_loop(CPUUniCore32State *env)
env->regs[4],
env->regs[5],
0, 0);
+ if (ret == -TARGET_ERESTARTSYS) {
+ env->regs[31] -= 4;
+ } else if (ret != -TARGET_QEMU_ESIGRETURN) {
+ env->regs[0] = ret;
+ }
}
} else {
goto error;
--
1.9.1
- [Qemu-devel] [PATCH v2 11/28] linux-user: Support for restarting system calls for SH4 targets, (continued)
- [Qemu-devel] [PATCH v2 11/28] linux-user: Support for restarting system calls for SH4 targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 09/28] linux-user: Support for restarting system calls for PPC targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 17/28] linux-user: Support for restarting system calls for CRIS targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 15/28] linux-user: Support for restarting system calls for M68K targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 01/28] linux-user: Check array bounds in errno conversion, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 18/28] linux-user: Support for restarting system calls for tilegx targets, Peter Maydell, 2016/05/12
- [Qemu-devel] [PATCH v2 20/28] linux-user: Support for restarting system calls for Microblaze targets, Peter Maydell, 2016/05/12
- [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 <=
- [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, 2016/05/12
- [Qemu-devel] [PATCH v2 19/28] linux-user: Set r14 on exit from microblaze syscall, Peter Maydell, 2016/05/12