qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Cc: patches@linaro.org,
	Timothy Edward Baldwin <T.E.Baldwin99@members.leeds.ac.uk>,
	Riku Voipio <riku.voipio@iki.fi>,
	Richard Henderson <rth@twiddle.net>
Subject: [Qemu-devel] [PATCH v2 19/28] linux-user: Set r14 on exit from microblaze syscall
Date: Thu, 12 May 2016 18:47:43 +0100	[thread overview]
Message-ID: <1463075272-9933-20-git-send-email-peter.maydell@linaro.org> (raw)
In-Reply-To: <1463075272-9933-1-git-send-email-peter.maydell@linaro.org>

All syscall exits on microblaze result in r14 being equal to the
PC we return to, because the kernel syscall exit instruction "rtbd"
does this. (This is true even for sigreturn(); note that r14 is
not a userspace-usable register as the kernel may clobber it at
any point.)

Emulate the setting of r14 on exit; this isn't really a guest
visible change for valid guest code because r14 isn't reliably
observable anyway. However having the code and the comment helps
to explain why it's ok for the ERESTARTSYS handling not to undo
the changes to r14 that happen on syscall entry.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
I think this is clearer, anyway, but the counterargument is that
the guest can't reliably examine r14 anyway and so setting it
is unnecessary.
---
 linux-user/main.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/linux-user/main.c b/linux-user/main.c
index 59b8fd5..54db9bb 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -2982,6 +2982,13 @@ void cpu_loop(CPUMBState *env)
                              env->regs[10],
                              0, 0);
             env->regs[3] = ret;
+            /* All syscall exits result in guest r14 being equal to the
+             * PC we return to, because the kernel syscall exit "rtbd" does
+             * this. (This is true even for sigreturn(); note that r14 is
+             * not a userspace-usable register, as the kernel may clobber it
+             * at any point.)
+             */
+            env->regs[14] = env->sregs[SR_PC];
             break;
         case EXCP_HW_EXCP:
             env->regs[17] = env->sregs[SR_PC] + 4;
-- 
1.9.1

  parent reply	other threads:[~2016-05-12 17:57 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-12 17:47 [Qemu-devel] [PATCH v2 00/28] linux-user: fix race between signals and syscalls Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 01/28] linux-user: Check array bounds in errno conversion Peter Maydell
2016-05-23 23:54   ` Laurent Vivier
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 02/28] linux-user: Consistently return host errnos from do_openat() Peter Maydell
2016-05-24  0:05   ` Laurent Vivier
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 03/28] linux-user: Reindent signal handling Peter Maydell
2016-05-24  0:21   ` Laurent Vivier
2016-05-24  6:47     ` Riku Voipio
2016-05-24  7:31       ` Laurent Vivier
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 04/28] linux-user: Define TARGET_ERESTART* errno values Peter Maydell
2016-05-24  9:42   ` Laurent Vivier
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 05/28] linux-user: Renumber TARGET_QEMU_ESIGRETURN, make it not arch-specific Peter Maydell
2016-05-24  0:29   ` Laurent Vivier
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 06/28] linux-user: Support for restarting system calls for x86 targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 07/28] linux-user: Support for restarting system calls for ARM targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 08/28] linux-user: Support for restarting system calls for MIPS targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 09/28] linux-user: Support for restarting system calls for PPC targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 10/28] linux-user: Support for restarting system calls for SPARC targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 11/28] linux-user: Support for restarting system calls for SH4 targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 12/28] linux-user: Support for restarting system calls for Alpha targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 13/28] linux-user: Support for restarting system calls for UniCore32 targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 14/28] linux-user: Support for restarting system calls for OpenRISC targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 15/28] linux-user: Support for restarting system calls for M68K targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 16/28] linux-user: Support for restarting system calls for S390 targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 17/28] linux-user: Support for restarting system calls for CRIS targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 18/28] linux-user: Support for restarting system calls for tilegx targets Peter Maydell
2016-05-12 17:47 ` Peter Maydell [this message]
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 20/28] linux-user: Support for restarting system calls for Microblaze targets Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 21/28] linux-user: Add debug code to exercise restarting system calls Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 22/28] linux-user: Provide safe_syscall for fixing races between signals and syscalls Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 23/28] linux-user: Use safe_syscall for read and write system calls Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 24/28] linux-user: Use safe_syscall for open and openat " Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 25/28] linux-user: Use safe_syscall for wait " Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 26/28] linux-user: Use safe_syscall for execve syscall Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 27/28] linux-user: Use safe_syscall for pselect, select syscalls Peter Maydell
2016-05-12 17:47 ` [Qemu-devel] [PATCH v2 28/28] linux-user: Use safe_syscall for futex syscall Peter Maydell
2016-05-23 18:55 ` [Qemu-devel] [PATCH v2 00/28] linux-user: fix race between signals and syscalls Peter Maydell
2016-05-24  8:04 ` Riku Voipio

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=1463075272-9933-20-git-send-email-peter.maydell@linaro.org \
    --to=peter.maydell@linaro.org \
    --cc=T.E.Baldwin99@members.leeds.ac.uk \
    --cc=patches@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=riku.voipio@iki.fi \
    --cc=rth@twiddle.net \
    /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).