From 4477cf59f7a939e91a2c216a723c9e6949785f81 Mon Sep 17 00:00:00 2001 From: YenHaoChen Date: Thu, 16 Feb 2023 08:28:25 +0800 Subject: triggers: remove mcontrol6.timing (implement suggested trigger timings) --- riscv/triggers.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/riscv/triggers.cc b/riscv/triggers.cc index 5a2d18b..4957dd4 100644 --- a/riscv/triggers.cc +++ b/riscv/triggers.cc @@ -272,7 +272,6 @@ reg_t mcontrol6_t::tdata1_read(const processor_t * const proc) const noexcept { tdata1 = set_field(tdata1, CSR_MCONTROL6_VU, proc->extension_enabled('H') ? vu : 0); tdata1 = set_field(tdata1, CSR_MCONTROL6_HIT, hit); tdata1 = set_field(tdata1, CSR_MCONTROL6_SELECT, select); - tdata1 = set_field(tdata1, CSR_MCONTROL6_TIMING, timing); tdata1 = set_field(tdata1, CSR_MCONTROL6_ACTION, action); tdata1 = set_field(tdata1, CSR_MCONTROL6_CHAIN, chain); tdata1 = set_field(tdata1, CSR_MCONTROL6_MATCH, match); @@ -293,7 +292,6 @@ void mcontrol6_t::tdata1_write(processor_t * const proc, const reg_t val, const vu = get_field(val, CSR_MCONTROL6_VU); hit = get_field(val, CSR_MCONTROL6_HIT); select = get_field(val, CSR_MCONTROL6_SELECT); - timing = legalize_timing(val, CSR_MCONTROL6_TIMING, CSR_MCONTROL6_SELECT, CSR_MCONTROL6_EXECUTE, CSR_MCONTROL6_LOAD); action = legalize_action(val, CSR_MCONTROL6_ACTION, CSR_MCONTROL6_DMODE(xlen)); chain = allow_chain ? get_field(val, CSR_MCONTROL6_CHAIN) : 0; match = legalize_match(get_field(val, CSR_MCONTROL6_MATCH)); @@ -303,6 +301,11 @@ void mcontrol6_t::tdata1_write(processor_t * const proc, const reg_t val, const execute = get_field(val, CSR_MCONTROL6_EXECUTE); store = get_field(val, CSR_MCONTROL6_STORE); load = get_field(val, CSR_MCONTROL6_LOAD); + + /* GDB doesn't support setting triggers in a way that combines a data load trigger + * with an address trigger to trigger on a load of a value at a given address. + * The default timing legalization on mcontrol6 assumes no such trigger setting. */ + timing = legalize_timing(val, 0, CSR_MCONTROL6_SELECT, CSR_MCONTROL6_EXECUTE, CSR_MCONTROL6_LOAD); } std::optional icount_t::detect_icount_fire(processor_t * const proc) noexcept -- cgit v1.1