Setting badaddr in riscv_cpu_debug_check_breakpoint was a minor buglet as that function should only be testing if the breakpoint should trigger.
Signed-off-by: Richard Henderson <[email protected]> --- target/riscv/cpu_helper.c | 4 ---- target/riscv/debug.c | 8 ++------ 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index c318dcd633..f9556c04a5 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -2373,10 +2373,6 @@ void riscv_cpu_do_interrupt(CPUState *cs) break; case RISCV_EXCP_BREAKPOINT: tval = env->badaddr; - if (cs->watchpoint_hit) { - tval = cs->watchpoint_hit->hitaddr; - cs->watchpoint_hit = NULL; - } break; case RISCV_EXCP_SW_CHECK: tval = env->sw_check_code; diff --git a/target/riscv/debug.c b/target/riscv/debug.c index 994a77fd31..f4689519d8 100644 --- a/target/riscv/debug.c +++ b/target/riscv/debug.c @@ -919,6 +919,7 @@ void riscv_cpu_debug_excp_handler(CPUState *cs, CPUBreakpoint *hit) RISCVCPU *cpu = RISCV_CPU(cs); CPURISCVState *env = &cpu->env; + env->badaddr = hit->hitaddr; do_trigger_action(env, DBG_ACTION_BP); } @@ -929,12 +930,7 @@ bool riscv_cpu_debug_check_breakpoint(CPUState *cs, CPUBreakpoint *bp) int i = bp->id; trigger_type_t trigger_type = get_trigger_type(env, i); - if (trigger_common_match(env, trigger_type, i)) { - env->badaddr = env->tdata2[i]; - return true; - } - - return false; + return trigger_common_match(env, trigger_type, i); } bool riscv_cpu_debug_check_watchpoint(CPUState *cs, CPUBreakpoint *wp) -- 2.43.0
