qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-arm <qemu-arm@nongnu.org>, QEMU Developers <qemu-devel@nongnu.org>
Cc: Richard Henderson <rth@twiddle.net>,
	"patches@linaro.org" <patches@linaro.org>
Subject: Re: [Qemu-devel] [Qemu-arm] [PATCH 6/7] arm: Implement M profile exception return properly
Date: Mon, 10 Apr 2017 17:28:27 +0100	[thread overview]
Message-ID: <CAFEAcA9A60tdpYTPbm36+i2uo6E__5EjtRWu_Esnx5uASDsZ6g@mail.gmail.com> (raw)
In-Reply-To: <1491820793-5348-7-git-send-email-peter.maydell@linaro.org>

On 10 April 2017 at 11:39, Peter Maydell <peter.maydell@linaro.org> wrote:
> On M profile, return from exceptions happen when privileged code
> executes one of the following function call return instructions:
>  * POP or LDM which loads the PC
>  * LDR to PC
>  * BX register
> and the new PC value is 0xFFxxxxxx.

So this isn't quite right -- the special behaviour happens only
when in Handler mode. (Handler is always privileged, but not
all privileged code is in Handler mode)...

> +static inline void gen_bx_excret(DisasContext *s, TCGv_i32 var)
> +{
> +    /* Generate the same code here as for a simple bx, but flag via
> +     * s->is_jmp that we need to do the rest of the work later.
> +     */
> +    gen_bx(s, var);
> +    if (!IS_USER(s) && arm_dc_feature(s, ARM_FEATURE_M)) {

...so we need to track "are we in Handler mode" (ie
env->v7m.exception != 0) in the TB flags and test that here
rather than testing IS_USER.

(Otherwise if you have code which executes the same 'bx' instruction
both as a legitimate exception return and as a fake exception
return while in privileged thread mode then we assert() in
do_v7m_exception_exit. I have a test case that does this but no
real code would ever do it.)

thanks
-- PMM

  parent reply	other threads:[~2017-04-10 16:28 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-10 10:39 [Qemu-devel] [PATCH 0/7] arm: Implement M profile exception return properly Peter Maydell
2017-04-10 10:39 ` [Qemu-devel] [PATCH 1/7] arm: Don't implement BXJ on M-profile CPUs Peter Maydell
2017-04-10 11:43   ` [Qemu-devel] [Qemu-arm] " Philippe Mathieu-Daudé
2017-04-10 10:39 ` [Qemu-devel] [PATCH 2/7] arm: Thumb shift operations should not permit interworking branches Peter Maydell
2017-04-10 10:39 ` [Qemu-devel] [PATCH 3/7] arm: Factor out "generate right kind of step exception" Peter Maydell
2017-04-10 11:43   ` [Qemu-devel] [Qemu-arm] " Philippe Mathieu-Daudé
2017-04-10 10:39 ` [Qemu-devel] [PATCH 4/7] arm: Move gen_set_condexec() and gen_set_pc_im() up in the file Peter Maydell
2017-04-10 11:44   ` [Qemu-devel] [Qemu-arm] " Philippe Mathieu-Daudé
2017-04-10 10:39 ` [Qemu-devel] [PATCH 5/7] arm: Move condition-failed codepath generation out of if() Peter Maydell
2017-04-10 13:22   ` [Qemu-devel] [Qemu-arm] " Philippe Mathieu-Daudé
2017-04-10 16:45     ` Peter Maydell
2017-04-10 10:39 ` [Qemu-devel] [PATCH 6/7] arm: Implement M profile exception return properly Peter Maydell
2017-04-10 13:52   ` [Qemu-devel] [Qemu-arm] " Philippe Mathieu-Daudé
2017-04-10 13:54     ` Peter Maydell
2017-04-10 16:28   ` Peter Maydell [this message]
2017-04-10 10:39 ` [Qemu-devel] [PATCH 7/7] arm: Remove workarounds for old M-profile exception return implementation Peter Maydell
2017-04-10 13:53   ` [Qemu-devel] [Qemu-arm] " Philippe Mathieu-Daudé

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=CAFEAcA9A60tdpYTPbm36+i2uo6E__5EjtRWu_Esnx5uASDsZ6g@mail.gmail.com \
    --to=peter.maydell@linaro.org \
    --cc=patches@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --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).