[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 10/38] linux-user: Support for restarting system call
From: |
riku . voipio |
Subject: |
[Qemu-devel] [PULL 10/38] linux-user: Support for restarting system calls for SPARC targets |
Date: |
Wed, 25 May 2016 13:31:42 +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 f53cf9d..95655df 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 00/38] linux-user update, riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 02/38] linux-user: Consistently return host errnos from do_openat(), riku . voipio, 2016/05/25
- [Qemu-devel] [PULL 01/38] linux-user: Check array bounds in errno conversion, riku . voipio, 2016/05/25
- [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 <=
- [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, 2016/05/25
- [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