All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Cc: marex@denx.de, peter.maydell@linaro.org, amir.gonnen@neuroblade.ai
Subject: [PATCH v5 02/48] target/nios2: Stop generating code if gen_check_supervisor fails
Date: Thu, 10 Mar 2022 03:26:39 -0800	[thread overview]
Message-ID: <20220310112725.570053-3-richard.henderson@linaro.org> (raw)
In-Reply-To: <20220310112725.570053-1-richard.henderson@linaro.org>

Whether the cpu is in user-mode or not is something that we
know at translation-time.  We do not need to generate code
after having raised an exception.

Suggested-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/nios2/translate.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/target/nios2/translate.c b/target/nios2/translate.c
index 341f3a8273..1e0ab686dc 100644
--- a/target/nios2/translate.c
+++ b/target/nios2/translate.c
@@ -169,12 +169,14 @@ static void gen_excp(DisasContext *dc, uint32_t code, uint32_t flags)
     t_gen_helper_raise_exception(dc, flags);
 }
 
-static void gen_check_supervisor(DisasContext *dc)
+static bool gen_check_supervisor(DisasContext *dc)
 {
     if (dc->base.tb->flags & CR_STATUS_U) {
         /* CPU in user mode, privileged instruction called, stop. */
         t_gen_helper_raise_exception(dc, EXCP_SUPERI);
+        return false;
     }
+    return true;
 }
 
 /*
@@ -384,7 +386,9 @@ static const Nios2Instruction i_type_instructions[] = {
  */
 static void eret(DisasContext *dc, uint32_t code, uint32_t flags)
 {
-    gen_check_supervisor(dc);
+    if (!gen_check_supervisor(dc)) {
+        return;
+    }
 
     tcg_gen_mov_tl(cpu_R[CR_STATUS], cpu_R[CR_ESTATUS]);
     tcg_gen_mov_tl(cpu_R[R_PC], cpu_R[R_EA]);
@@ -447,7 +451,9 @@ static void rdctl(DisasContext *dc, uint32_t code, uint32_t flags)
 {
     R_TYPE(instr, code);
 
-    gen_check_supervisor(dc);
+    if (!gen_check_supervisor(dc)) {
+        return;
+    }
 
     if (unlikely(instr.c == R_ZERO)) {
         return;
@@ -474,9 +480,13 @@ static void rdctl(DisasContext *dc, uint32_t code, uint32_t flags)
 /* ctlN <- rA */
 static void wrctl(DisasContext *dc, uint32_t code, uint32_t flags)
 {
-    gen_check_supervisor(dc);
+    if (!gen_check_supervisor(dc)) {
+        return;
+    }
 
-#ifndef CONFIG_USER_ONLY
+#ifdef CONFIG_USER_ONLY
+    g_assert_not_reached();
+#else
     R_TYPE(instr, code);
     TCGv v = load_gpr(dc, instr.a);
 
-- 
2.25.1



  parent reply	other threads:[~2022-03-10 11:54 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-10 11:26 [PATCH v5 00/48] target/nios2: Shadow register set, EIC and VIC Richard Henderson
2022-03-10 11:26 ` [PATCH v5 01/48] target/nios2: Check supervisor on eret Richard Henderson
2022-03-10 11:26 ` Richard Henderson [this message]
2022-03-10 11:26 ` [PATCH v5 03/48] target/nios2: Add NUM_GP_REGS and NUM_CP_REGS Richard Henderson
2022-03-10 11:26 ` [PATCH v5 04/48] target/nios2: Split PC out of env->regs[] Richard Henderson
2022-03-10 11:26 ` [PATCH v5 05/48] target/nios2: Split out helper for eret instruction Richard Henderson
2022-03-10 11:26 ` [PATCH v5 06/48] target/nios2: Fix BRET instruction Richard Henderson
2022-03-10 12:17   ` Peter Maydell
2022-03-10 11:26 ` [PATCH v5 07/48] target/nios2: Do not create TCGv for control registers Richard Henderson
2022-03-10 11:26 ` [PATCH v5 08/48] linux-user/nios2: Only initialize SP and PC in target_cpu_copy_regs Richard Henderson
2022-03-10 12:18   ` Peter Maydell
2022-03-10 11:26 ` [PATCH v5 09/48] target/nios2: Remove cpu_interrupts_enabled Richard Henderson
2022-03-10 11:26 ` [PATCH v5 10/48] target/nios2: Split control registers away from general registers Richard Henderson
2022-03-10 11:26 ` [PATCH v5 11/48] target/nios2: Do not zero the general registers on reset Richard Henderson
2022-03-10 12:21   ` Peter Maydell
2022-03-10 18:45     ` Richard Henderson
2022-03-10 11:26 ` [PATCH v5 12/48] target/nios2: Clean up nios2_cpu_dump_state Richard Henderson
2022-03-10 11:26 ` [PATCH v5 13/48] target/nios2: Use hw/registerfields.h for CR_STATUS fields Richard Henderson
2022-03-10 11:26 ` [PATCH v5 14/48] target/nios2: Use hw/registerfields.h for CR_EXCEPTION fields Richard Henderson
2022-03-10 12:26   ` Peter Maydell
2022-03-10 17:52     ` Richard Henderson
2022-03-10 11:26 ` [PATCH v5 15/48] target/nios2: Use hw/registerfields.h for CR_TLBADDR fields Richard Henderson
2022-03-10 11:26 ` [PATCH v5 16/48] target/nios2: Use hw/registerfields.h for CR_TLBACC fields Richard Henderson
2022-03-10 11:26 ` [PATCH v5 17/48] target/nios2: Rename CR_TLBMISC_WR to CR_TLBMISC_WE Richard Henderson
2022-03-10 12:26   ` Peter Maydell
2022-03-10 11:26 ` [PATCH v5 18/48] target/nios2: Use hw/registerfields.h for CR_TLBMISC fields Richard Henderson
2022-03-10 11:26 ` [PATCH v5 19/48] target/nios2: Move R_FOO and CR_BAR into enumerations Richard Henderson
2022-03-10 11:26 ` [PATCH v5 20/48] target/nios2: Create EXCP_SEMIHOST for semi-hosting Richard Henderson
2022-03-10 11:26 ` [PATCH v5 21/48] target/nios2: Clean up nios2_cpu_do_interrupt Richard Henderson
2022-03-10 11:26 ` [PATCH v5 22/48] target/nios2: Hoist CPU_LOG_INT logging Richard Henderson
2022-03-10 11:27 ` [PATCH v5 23/48] target/nios2: Handle EXCP_UNALIGN and EXCP_UALIGND Richard Henderson
2022-03-10 11:27 ` [PATCH v5 24/48] target/nios2: Cleanup set of CR_EXCEPTION for do_interrupt Richard Henderson
2022-03-10 11:27 ` [PATCH v5 25/48] target/nios2: Clean up handling of tlbmisc in do_exception Richard Henderson
2022-03-10 11:27 ` [PATCH v5 26/48] target/nios2: Prevent writes to read-only or reserved control fields Richard Henderson
2022-03-10 11:27 ` [PATCH v5 27/48] target/nios2: Implement cpuid Richard Henderson
2022-03-10 11:27 ` [PATCH v5 28/48] target/nios2: Implement CR_STATUS.RSIE Richard Henderson
2022-03-10 11:27 ` [PATCH v5 29/48] target/nios2: Remove CPU_INTERRUPT_NMI Richard Henderson
2022-03-10 11:27 ` [PATCH v5 30/48] target/nios2: Support division error exception Richard Henderson
2022-03-10 11:27 ` [PATCH v5 31/48] target/nios2: Use tcg_constant_tl Richard Henderson
2022-03-10 11:27 ` [PATCH v5 32/48] target/nios2: Introduce dest_gpr Richard Henderson
2022-03-10 11:27 ` [PATCH v5 33/48] target/nios2: Drop CR_STATUS_EH from tb->flags Richard Henderson
2022-03-10 11:27 ` [PATCH v5 34/48] target/nios2: Enable unaligned traps for system mode Richard Henderson
2022-03-10 11:27 ` [PATCH v5 35/48] target/nios2: Create gen_jumpr Richard Henderson
2022-03-10 11:27 ` [PATCH v5 36/48] target/nios2: Hoist set of is_jmp into gen_goto_tb Richard Henderson
2022-03-10 11:27 ` [PATCH v5 37/48] target/nios2: Use gen_goto_tb for DISAS_TOO_MANY Richard Henderson
2022-03-10 11:27 ` [PATCH v5 38/48] target/nios2: Use tcg_gen_lookup_and_goto_ptr Richard Henderson
2022-03-10 11:27 ` [PATCH v5 39/48] target/nios2: Implement Misaligned destination exception Richard Henderson
2022-03-10 11:27 ` [PATCH v5 40/48] linux-user/nios2: Handle various SIGILL exceptions Richard Henderson
2022-03-10 11:27 ` [PATCH v5 41/48] target/nios2: Introduce shadow register sets Richard Henderson
2022-03-13 11:55   ` Amir Gonnen
2022-03-13 16:53     ` Richard Henderson
2022-03-10 11:27 ` [PATCH v5 42/48] target/nios2: Implement rdprs, wrprs Richard Henderson
2022-03-15 16:26   ` Amir Gonnen
2022-03-15 19:12     ` Richard Henderson
2022-03-10 11:27 ` [PATCH v5 43/48] target/nios2: Update helper_eret for shadow registers Richard Henderson
2022-03-10 11:27 ` [PATCH v5 44/48] target/nios2: Implement EIC interrupt processing Richard Henderson
2022-03-10 11:27 ` [PATCH v5 45/48] hw/intc: Vectored Interrupt Controller (VIC) Richard Henderson
2022-03-10 11:27 ` [PATCH v5 46/48] hw/nios2: Introduce Nios2MachineState Richard Henderson
2022-03-12 15:31   ` Mark Cave-Ayland
2022-03-10 11:27 ` [PATCH v5 47/48] hw/nios2: Move memory regions into Nios2Machine Richard Henderson
2022-03-10 11:27 ` [PATCH v5 48/48] hw/nios2: Machine with a Vectored Interrupt Controller Richard Henderson
2022-03-12 15:40   ` Mark Cave-Ayland

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=20220310112725.570053-3-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=amir.gonnen@neuroblade.ai \
    --cc=marex@denx.de \
    --cc=peter.maydell@linaro.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.