qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: riku.voipio@linaro.org
To: qemu-devel@nongnu.org
Cc: Timothy E Baldwin <T.E.Baldwin99@members.leeds.ac.uk>
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	[thread overview]
Message-ID: <ae9dd1d0b62dba9865e6c9d1f207a6060c162d8c.1464153942.git.riku.voipio@linaro.org> (raw)
In-Reply-To: <cover.1464153942.git.riku.voipio@linaro.org>

From: Timothy E Baldwin <T.E.Baldwin99@members.leeds.ac.uk>

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 <T.E.Baldwin99@members.leeds.ac.uk>
Message-id: 1441497448-32489-31-git-send-email-T.E.Baldwin99@members.leeds.ac.uk
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
[PMM: tweak commit message; drop TARGET_USE_ERESTARTSYS define]
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 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

  parent reply	other threads:[~2016-05-25 10:32 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-25  5:27 [Qemu-devel] [PULL 00/38] linux-user update riku.voipio
2016-05-25  5:27 ` [Qemu-devel] [PULL 01/38] linux-user: Check array bounds in errno conversion riku.voipio
2016-05-25  5:27 ` [Qemu-devel] [PULL 02/38] linux-user: Consistently return host errnos from do_openat() riku.voipio
2016-05-25  5:27 ` [Qemu-devel] [PULL 03/38] linux-user: Reindent signal handling riku.voipio
2016-05-25  5:27 ` [Qemu-devel] [PULL 04/38] linux-user: Define TARGET_ERESTART* errno values riku.voipio
2016-05-25  5:27 ` [Qemu-devel] [PULL 05/38] linux-user: Renumber TARGET_QEMU_ESIGRETURN, make it not arch-specific riku.voipio
2016-05-25  5:27 ` [Qemu-devel] [PULL 06/38] linux-user: Support for restarting system calls for x86 targets riku.voipio
2016-05-25  5:27 ` [Qemu-devel] [PULL 07/38] linux-user: Support for restarting system calls for ARM targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 08/38] linux-user: Support for restarting system calls for MIPS targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 09/38] linux-user: Support for restarting system calls for PPC targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 10/38] linux-user: Support for restarting system calls for SPARC targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 11/38] linux-user: Support for restarting system calls for SH4 targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 12/38] linux-user: Support for restarting system calls for Alpha targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 13/38] linux-user: Support for restarting system calls for UniCore32 targets riku.voipio
2016-05-25 10:31 ` riku.voipio [this message]
2016-05-25 10:31 ` [Qemu-devel] [PULL 15/38] linux-user: Support for restarting system calls for M68K targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 16/38] linux-user: Support for restarting system calls for S390 targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 17/38] linux-user: Support for restarting system calls for CRIS targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 18/38] linux-user: Support for restarting system calls for tilegx targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 19/38] linux-user: Set r14 on exit from microblaze syscall riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 20/38] linux-user: Support for restarting system calls for Microblaze targets riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 21/38] linux-user: Add debug code to exercise restarting system calls riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 22/38] linux-user: Provide safe_syscall for fixing races between signals and syscalls riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 23/38] linux-user: Use safe_syscall for read and write system calls riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 24/38] linux-user: Use safe_syscall for open and openat " riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 25/38] linux-user: Use safe_syscall for wait " riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 26/38] linux-user: Use safe_syscall for execve syscall riku.voipio
2016-05-25 10:31 ` [Qemu-devel] [PULL 27/38] linux-user: Use safe_syscall for pselect, select syscalls riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 28/38] linux-user: Use safe_syscall for futex syscall riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 29/38] linux-user: Handle negative values in timespec conversion riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 30/38] linux-user: Handle msgrcv error case correctly riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 31/38] linux-user: Use g_try_malloc() in do_msgrcv() riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 32/38] linux-user: x86_64: Don't use 16-bit UIDs riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 33/38] linux-user: Use direct syscalls for setuid(), etc riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 34/38] linux-user: arm: Remove ARM_cpsr and similar #defines riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 35/38] linux-user/signal.c: Generate opcode data for restorer in setup_rt_frame riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 36/38] linux-user/signal.c: Use target address instead of host address for microblaze restorer riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 37/38] linux-user/signal.c: Use s390 target space address instead of host space riku.voipio
2016-05-25 10:32 ` [Qemu-devel] [PULL 38/38] linux-user, target-ppc: fix use of MSR_LE riku.voipio
2016-05-25 16:33 ` [Qemu-devel] [PULL 00/38] linux-user update Peter Maydell
2016-05-26 12:00   ` Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ae9dd1d0b62dba9865e6c9d1f207a6060c162d8c.1464153942.git.riku.voipio@linaro.org \
    --to=riku.voipio@linaro.org \
    --cc=T.E.Baldwin99@members.leeds.ac.uk \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).