[PATCH for-11.1 12/17] target/riscv/debug: Remove breakpoints on reset
Daniel Henrique Barboza <[email protected]>
| Newsgroups | org.nongnu.qemu-riscv,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
From: Nicholas Piggin <[email protected]> Remove TCG breakpoints/watchpoints when the CPU is reset. Currently they get lost. Fixes: b6092544fc ("target/riscv: csr: Hook debug CSR read/write") Signed-off-by: Nicholas Piggin <[email protected]> Reviewed-by: Daniel Henrique Barboza <[email protected]> --- target/riscv/tcg/debug.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/target/riscv/tcg/debug.c b/target/riscv/tcg/debug.c index 7ecbe01fb2..6cdf89c638 100644 --- a/target/riscv/tcg/debug.c +++ b/target/riscv/tcg/debug.c @@ -1162,6 +1162,19 @@ void riscv_trigger_reset_hold(CPURISCVState *env) /* init to type 2 triggers */ for (i = 0; i < env->num_triggers; i++) { + int trigger_type = get_trigger_type(env, i); + + switch (trigger_type) { + case TRIGGER_TYPE_AD_MATCH: + type2_breakpoint_remove(env, i); + break; + case TRIGGER_TYPE_AD_MATCH6: + type6_breakpoint_remove(env, i); + break; + default: + break; + } + /* * type = TRIGGER_TYPE_AD_MATCH * dmode = 0 (both debug and M-mode can write tdata) @@ -1178,8 +1191,6 @@ void riscv_trigger_reset_hold(CPURISCVState *env) env->tdata1[i] = tdata1; env->tdata2[i] = 0; env->tdata3[i] = 0; - env->cpu_breakpoint[i] = NULL; - env->cpu_watchpoint[i] = NULL; timer_del(env->itrigger_timer[i]); } -- 2.43.0