[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 10/38] linux-user: Support for restarting system c
From: |
riku . voipio |
Subject: |
[Qemu-devel] [PULL v2 10/38] linux-user: Support for restarting system calls for SPARC targets |
Date: |
Fri, 27 May 2016 16:00:01 +0300 |
From: Timothy E Baldwin <address@hidden>
Update the SPARC main loop and sigreturn code:
* on TARGET_ERESTARTSYS, wind guest PC backwards to repeat syscall insn
* set all guest CPU state within signal.c code on sigreturn
* handle TARGET_QEMU_ESIGRETURN in the main loop as the indication
that the main loop should not touch any guest CPU state
Signed-off-by: Timothy Edward Baldwin <address@hidden>
Message-id: address@hidden
[PMM: Commit message tweaks; drop TARGET_USE_ERESTARTSYS define]
Reviewed-by: Peter Maydell <address@hidden>
Signed-off-by: Peter Maydell <address@hidden>
Signed-off-by: Riku Voipio <address@hidden>
---
linux-user/main.c | 3 +++
linux-user/signal.c | 2 +-
linux-user/sparc/target_signal.h | 1 +
linux-user/sparc64/target_signal.h | 1 +
4 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/linux-user/main.c b/linux-user/main.c
index dfc098f..04a9b9b 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -1376,6 +1376,9 @@ void cpu_loop (CPUSPARCState *env)
env->regwptr[2], env->regwptr[3],
env->regwptr[4], env->regwptr[5],
0, 0);
+ if (ret == -TARGET_ERESTARTSYS || ret == -TARGET_QEMU_ESIGRETURN) {
+ break;
+ }
if ((abi_ulong)ret >= (abi_ulong)(-515)) {
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
env->xcc |= PSR_CARRY;
diff --git a/linux-user/signal.c b/linux-user/signal.c
index 14e58b0..e742347 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -2449,7 +2449,7 @@ long do_sigreturn(CPUSPARCState *env)
goto segv_and_exit;
}
unlock_user_struct(sf, sf_addr, 0);
- return env->regwptr[0];
+ return -TARGET_QEMU_ESIGRETURN;
segv_and_exit:
unlock_user_struct(sf, sf_addr, 0);
diff --git a/linux-user/sparc/target_signal.h b/linux-user/sparc/target_signal.h
index c7de300..2df38c8 100644
--- a/linux-user/sparc/target_signal.h
+++ b/linux-user/sparc/target_signal.h
@@ -33,4 +33,5 @@ static inline abi_ulong get_sp_from_cpustate(CPUSPARCState
*state)
return state->regwptr[UREG_FP];
}
+
#endif /* TARGET_SIGNAL_H */
diff --git a/linux-user/sparc64/target_signal.h
b/linux-user/sparc64/target_signal.h
index c7de300..2df38c8 100644
--- a/linux-user/sparc64/target_signal.h
+++ b/linux-user/sparc64/target_signal.h
@@ -33,4 +33,5 @@ static inline abi_ulong get_sp_from_cpustate(CPUSPARCState
*state)
return state->regwptr[UREG_FP];
}
+
#endif /* TARGET_SIGNAL_H */
--
2.1.4
- [Qemu-devel] [PULL v2 00/38] linux-user pull request, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 04/38] linux-user: Define TARGET_ERESTART* errno values, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 01/38] linux-user: Check array bounds in errno conversion, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 06/38] linux-user: Support for restarting system calls for x86 targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 09/38] linux-user: Support for restarting system calls for PPC targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 08/38] linux-user: Support for restarting system calls for MIPS targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 02/38] linux-user: Consistently return host errnos from do_openat(), riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 07/38] linux-user: Support for restarting system calls for ARM targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 03/38] linux-user: Reindent signal handling, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 05/38] linux-user: Renumber TARGET_QEMU_ESIGRETURN, make it not arch-specific, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 10/38] linux-user: Support for restarting system calls for SPARC targets,
riku . voipio <=
- [Qemu-devel] [PULL v2 16/38] linux-user: Support for restarting system calls for S390 targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 11/38] linux-user: Support for restarting system calls for SH4 targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 14/38] linux-user: Support for restarting system calls for OpenRISC targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 13/38] linux-user: Support for restarting system calls for UniCore32 targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 15/38] linux-user: Support for restarting system calls for M68K targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 12/38] linux-user: Support for restarting system calls for Alpha targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 17/38] linux-user: Support for restarting system calls for CRIS targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 18/38] linux-user: Support for restarting system calls for tilegx targets, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 23/38] linux-user: Use safe_syscall for read and write system calls, riku . voipio, 2016/05/27
- [Qemu-devel] [PULL v2 20/38] linux-user: Support for restarting system calls for Microblaze targets, riku . voipio, 2016/05/27