[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH for-6.2 10/23] target/m68k: Drop checks for singlestep_enable
From: |
Laurent Vivier |
Subject: |
Re: [PATCH for-6.2 10/23] target/m68k: Drop checks for singlestep_enabled |
Date: |
Wed, 21 Jul 2021 10:54:56 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 |
Le 21/07/2021 à 08:41, Richard Henderson a écrit :
> GDB single-stepping is now handled generically.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> target/m68k/translate.c | 44 +++++++++--------------------------------
> 1 file changed, 9 insertions(+), 35 deletions(-)
>
> diff --git a/target/m68k/translate.c b/target/m68k/translate.c
> index c34d9aed61..c3d281a5f2 100644
> --- a/target/m68k/translate.c
> +++ b/target/m68k/translate.c
> @@ -194,18 +194,6 @@ static void do_writebacks(DisasContext *s)
> }
> }
>
> -static bool is_singlestepping(DisasContext *s)
> -{
> - /*
> - * Return true if we are singlestepping either because of
> - * architectural singlestep or QEMU gdbstub singlestep. This does
> - * not include the command line '-singlestep' mode which is rather
> - * misnamed as it only means "one instruction per TB" and doesn't
> - * affect the code we generate.
> - */
> - return s->base.singlestep_enabled || s->ss_active;
> -}
> -
> /* is_jmp field values */
> #define DISAS_JUMP DISAS_TARGET_0 /* only pc was modified dynamically */
> #define DISAS_EXIT DISAS_TARGET_1 /* cpu state was modified dynamically
> */
> @@ -320,20 +308,6 @@ static void gen_exception(DisasContext *s, uint32_t
> dest, int nr)
> s->base.is_jmp = DISAS_NORETURN;
> }
>
> -static void gen_singlestep_exception(DisasContext *s)
> -{
> - /*
> - * Generate the right kind of exception for singlestep, which is
> - * either the architectural singlestep or EXCP_DEBUG for QEMU's
> - * gdb singlestepping.
> - */
> - if (s->ss_active) {
> - gen_raise_exception(EXCP_TRACE);
> - } else {
> - gen_raise_exception(EXCP_DEBUG);
> - }
> -}
> -
> static inline void gen_addr_fault(DisasContext *s)
> {
> gen_exception(s, s->base.pc_next, EXCP_ADDRESS);
> @@ -1522,10 +1496,10 @@ static void gen_exit_tb(DisasContext *s)
> /* Generate a jump to an immediate address. */
> static void gen_jmp_tb(DisasContext *s, int n, uint32_t dest)
> {
> - if (unlikely(is_singlestepping(s))) {
> + if (unlikely(s->ss_active)) {
> update_cc_op(s);
> tcg_gen_movi_i32(QREG_PC, dest);
> - gen_singlestep_exception(s);
> + gen_raise_exception(EXCP_TRACE);
> } else if (translator_use_goto_tb(&s->base, dest)) {
> tcg_gen_goto_tb(n);
> tcg_gen_movi_i32(QREG_PC, dest);
> @@ -6193,7 +6167,7 @@ static void m68k_tr_init_disas_context(DisasContextBase
> *dcbase, CPUState *cpu)
>
> dc->ss_active = (M68K_SR_TRACE(env->sr) == M68K_SR_TRACE_ANY_INS);
> /* If architectural single step active, limit to 1 */
> - if (is_singlestepping(dc)) {
> + if (dc->ss_active) {
> dc->base.max_insns = 1;
> }
> }
> @@ -6252,17 +6226,17 @@ static void m68k_tr_tb_stop(DisasContextBase *dcbase,
> CPUState *cpu)
> break;
> case DISAS_TOO_MANY:
> update_cc_op(dc);
> - if (is_singlestepping(dc)) {
> + if (dc->ss_active) {
> tcg_gen_movi_i32(QREG_PC, dc->pc);
> - gen_singlestep_exception(dc);
> + gen_raise_exception(EXCP_TRACE);
> } else {
> gen_jmp_tb(dc, 0, dc->pc);
> }
> break;
> case DISAS_JUMP:
> /* We updated CC_OP and PC in gen_jmp/gen_jmp_im. */
> - if (is_singlestepping(dc)) {
> - gen_singlestep_exception(dc);
> + if (dc->ss_active) {
> + gen_raise_exception(EXCP_TRACE);
> } else {
> tcg_gen_lookup_and_goto_ptr();
> }
> @@ -6272,8 +6246,8 @@ static void m68k_tr_tb_stop(DisasContextBase *dcbase,
> CPUState *cpu)
> * We updated CC_OP and PC in gen_exit_tb, but also modified
> * other state that may require returning to the main loop.
> */
> - if (is_singlestepping(dc)) {
> - gen_singlestep_exception(dc);
> + if (dc->ss_active) {
> + gen_raise_exception(EXCP_TRACE);
> } else {
> tcg_gen_exit_tb(NULL, 0);
> }
>
Acked-by: Laurent Vivier <laurent@vivier.eu>
- [PATCH for-6.2 07/23] target/hppa: Drop checks for singlestep_enabled, (continued)
- [PATCH for-6.2 07/23] target/hppa: Drop checks for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 08/23] target/i386: Check CF_NO_GOTO_TB for dc->jmp_opt, Richard Henderson, 2021/07/21
- [PATCH for-6.2 13/23] target/mips: Fix single stepping, Richard Henderson, 2021/07/21
- [PATCH for-6.2 14/23] target/mips: Drop exit checks for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 15/23] target/openrisc: Drop checks for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 05/23] target/hexagon: Drop checks for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 09/23] target/i386: Drop check for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 10/23] target/m68k: Drop checks for singlestep_enabled, Richard Henderson, 2021/07/21
- Re: [PATCH for-6.2 10/23] target/m68k: Drop checks for singlestep_enabled,
Laurent Vivier <=
- [PATCH for-6.2 11/23] target/microblaze: Check CF_NO_GOTO_TB for DISAS_JUMP, Richard Henderson, 2021/07/21
- [PATCH for-6.2 12/23] target/microblaze: Drop checks for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 16/23] target/ppc: Drop exit checks for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 20/23] target/s390x: Drop check for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 22/23] target/tricore: Drop check for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 21/23] target/sh4: Drop check for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 23/23] target/xtensa: Drop check for singlestep_enabled, Richard Henderson, 2021/07/21
- [PATCH for-6.2 17/23] target/riscv: Remove dead code after exception, Richard Henderson, 2021/07/21
- [PATCH for-6.2 18/23] target/riscv: Remove exit_tb and lookup_and_goto_ptr, Richard Henderson, 2021/07/21