All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PATCH v2 13/23] target/mips: Fix single stepping
Date: Tue, 12 Oct 2021 09:21:49 -0700	[thread overview]
Message-ID: <20211012162159.471406-14-richard.henderson@linaro.org> (raw)
In-Reply-To: <20211012162159.471406-1-richard.henderson@linaro.org>

As per an ancient comment in mips_tr_translate_insn about the
expectations of gdb, when restarting the insn in a delay slot
we also re-execute the branch.  Which means that we are
expected to execute two insns in this case.

This has been broken since 8b86d6d2580, where we forced max_insns
to 1 while single-stepping.  This resulted in an exit from the
translator loop after the branch but before the delay slot is
translated.

Increase the max_insns to 2 for this case.  In addition, bypass
the end-of-page check, for when the branch itself ends the page.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/mips/tcg/translate.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c
index 148afec9dc..f239f9ffc0 100644
--- a/target/mips/tcg/translate.c
+++ b/target/mips/tcg/translate.c
@@ -16016,6 +16016,16 @@ static void mips_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
     ctx->default_tcg_memop_mask = (ctx->insn_flags & (ISA_MIPS_R6 |
                                   INSN_LOONGSON3A)) ? MO_UNALN : MO_ALIGN;
 
+    /*
+     * Execute a branch and its delay slot as a single instruction.
+     * This is what GDB expects and is consistent with what the
+     * hardware does (e.g. if a delay slot instruction faults, the
+     * reported PC is the PC of the branch).
+     */
+    if (ctx->base.singlestep_enabled && (ctx->hflags & MIPS_HFLAG_BMASK)) {
+        ctx->base.max_insns = 2;
+    }
+
     LOG_DISAS("\ntb %p idx %d hflags %04x\n", ctx->base.tb, ctx->mem_idx,
               ctx->hflags);
 }
@@ -16085,17 +16095,14 @@ static void mips_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
     if (ctx->base.is_jmp != DISAS_NEXT) {
         return;
     }
+
     /*
-     * Execute a branch and its delay slot as a single instruction.
-     * This is what GDB expects and is consistent with what the
-     * hardware does (e.g. if a delay slot instruction faults, the
-     * reported PC is the PC of the branch).
+     * End the TB on (most) page crossings.
+     * See mips_tr_init_disas_context about single-stepping a branch
+     * together with its delay slot.
      */
-    if (ctx->base.singlestep_enabled &&
-        (ctx->hflags & MIPS_HFLAG_BMASK) == 0) {
-        ctx->base.is_jmp = DISAS_TOO_MANY;
-    }
-    if (ctx->base.pc_next - ctx->page_start >= TARGET_PAGE_SIZE) {
+    if (ctx->base.pc_next - ctx->page_start >= TARGET_PAGE_SIZE
+        && !ctx->base.singlestep_enabled) {
         ctx->base.is_jmp = DISAS_TOO_MANY;
     }
 }
-- 
2.25.1



  parent reply	other threads:[~2021-10-12 16:29 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-12 16:21 [PATCH v2 00/23] tcg: singlestep reorg Richard Henderson
2021-10-12 16:21 ` [PATCH v2 01/23] accel/tcg: Handle gdb singlestep in cpu_tb_exec Richard Henderson
2021-10-12 16:21 ` [PATCH v2 02/23] target/alpha: Drop checks for singlestep_enabled Richard Henderson
2021-10-12 22:32   ` Philippe Mathieu-Daudé
2021-10-12 16:21 ` [PATCH v2 03/23] target/avr: " Richard Henderson
2021-10-12 16:21 ` [PATCH v2 04/23] target/cris: " Richard Henderson
2021-10-12 16:21 ` [PATCH v2 05/23] target/hexagon: " Richard Henderson
2021-10-12 22:30   ` Philippe Mathieu-Daudé
2021-10-12 16:21 ` [PATCH v2 06/23] target/arm: " Richard Henderson
2021-10-12 16:21 ` [PATCH v2 07/23] target/hppa: " Richard Henderson
2021-10-12 16:21 ` [PATCH v2 08/23] target/i386: Check CF_NO_GOTO_TB for dc->jmp_opt Richard Henderson
2021-10-12 16:21 ` [PATCH v2 09/23] target/i386: Drop check for singlestep_enabled Richard Henderson
2021-10-12 16:21 ` [PATCH v2 10/23] target/m68k: Drop checks " Richard Henderson
2021-10-12 16:21 ` [PATCH v2 11/23] target/microblaze: Check CF_NO_GOTO_TB for DISAS_JUMP Richard Henderson
2021-10-12 16:21 ` [PATCH v2 12/23] target/microblaze: Drop checks for singlestep_enabled Richard Henderson
2021-10-12 16:21 ` Richard Henderson [this message]
2021-10-12 22:26   ` [PATCH v2 13/23] target/mips: Fix single stepping Philippe Mathieu-Daudé
2021-10-12 16:21 ` [PATCH v2 14/23] target/mips: Drop exit checks for singlestep_enabled Richard Henderson
2021-10-12 16:21 ` [PATCH v2 15/23] target/openrisc: Drop " Richard Henderson
2021-10-12 22:32   ` Philippe Mathieu-Daudé
2021-10-12 16:21 ` [PATCH v2 16/23] target/ppc: Drop exit " Richard Henderson
2021-10-12 16:21 ` [PATCH v2 17/23] target/riscv: Remove dead code after exception Richard Henderson
2021-10-12 21:35   ` Alistair Francis
2021-10-12 16:21 ` [PATCH v2 18/23] target/riscv: Remove exit_tb and lookup_and_goto_ptr Richard Henderson
2021-10-12 21:34   ` Alistair Francis
2021-10-12 16:21 ` [PATCH v2 19/23] target/rx: Drop checks for singlestep_enabled Richard Henderson
2021-10-12 22:28   ` Philippe Mathieu-Daudé
2021-10-12 16:21 ` [PATCH v2 20/23] target/s390x: Drop check " Richard Henderson
2021-10-12 16:21 ` [PATCH v2 21/23] target/sh4: " Richard Henderson
2021-10-12 16:21 ` [PATCH v2 22/23] target/tricore: " Richard Henderson
2021-10-12 22:29   ` Philippe Mathieu-Daudé
2021-10-12 16:21 ` [PATCH v2 23/23] target/xtensa: " Richard Henderson

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=20211012162159.471406-14-richard.henderson@linaro.org \
    --to=richard.henderson@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.