[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-riscv] [Qemu-devel] [PATCH] RISC-V: fix single stepping over r
From: |
Richard Henderson |
Subject: |
Re: [Qemu-riscv] [Qemu-devel] [PATCH] RISC-V: fix single stepping over ret and other branching instructions |
Date: |
Fri, 22 Mar 2019 08:24:39 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 |
On 3/22/19 4:22 AM, Fabien Chouteau wrote:
> +/* Wrapper around tcg_gen_exit_tb that handles single stepping */
> +static void exit_tb(DisasContext *ctx, TranslationBlock *tb, unsigned idx)
> +{
> + if (ctx->base.singlestep_enabled) {
> + gen_exception_debug();
> + } else {
> + tcg_gen_exit_tb(tb, idx);
> + }
> +}
You should remove the TB and idx parameters here and pass NULL, 0 to
tcg_gen_exit_tb.
> @@ -138,14 +158,10 @@ static void gen_goto_tb(DisasContext *ctx, int n,
> target_ulong dest)
> /* chaining is only allowed when the jump is to the same page */
> tcg_gen_goto_tb(n);
> tcg_gen_movi_tl(cpu_pc, dest);
> - tcg_gen_exit_tb(ctx->base.tb, n);
> + exit_tb(ctx, ctx->base.tb, n);
Because this is the only non-zero use, and it is already protected by
use_goto_tb, which includes the single-step check.
Because goto_tb(n) must be paired with exit_tb(tb, n), and vice-versa.
r~