@samitouri / QOSamiQemu / commits / 19efae275d

target/riscv: Fix size of trigger data

mcontext is at most 14 bits in size with the H extension, fix to 16 bits. trigger_cur indexes into tdata*[RV_MAX_TRIGGERS] which holds 2 elements, fix to 8 bits. This patch also adds a migration entry for mcontext which is used in tandem with other debug data that is already migrated. Note, the cpu/debug VMSTATE version is bumped, breaking migration from older versions. Signed-off-by: Anton Johansson <anjo@rev.ng> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-ID: <20260520125406.28693-21-anjo@rev.ng> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>

Anton Johansson committed May 20, 2026 at 14:53 UTC 19efae275dab77a8b33a59706edfa7f81aa517ac
2 files changed +12 -11
target/riscv/cpu.h
+5 -5
@@ -468,11 +468,11 @@ struct CPUArchState {
468 target_ulong mseccfg;
469
470 /* trigger module */
471 - target_ulong trigger_cur;
472 - target_ulong tdata1[RV_MAX_TRIGGERS];
473 - target_ulong tdata2[RV_MAX_TRIGGERS];
474 - target_ulong tdata3[RV_MAX_TRIGGERS];
475 - target_ulong mcontext;
471 + uint16_t mcontext;
472 + uint8_t trigger_cur;
473 + uint64_t tdata1[RV_MAX_TRIGGERS];
474 + uint64_t tdata2[RV_MAX_TRIGGERS];
475 + uint64_t tdata3[RV_MAX_TRIGGERS];
476 struct CPUBreakpoint *cpu_breakpoint[RV_MAX_TRIGGERS];
477 struct CPUWatchpoint *cpu_watchpoint[RV_MAX_TRIGGERS];
478 QEMUTimer *itrigger_timer[RV_MAX_TRIGGERS];
target/riscv/machine.c
+7 -6
@@ -240,15 +240,16 @@ static int debug_post_load(void *opaque, int version_id)
240
241 static const VMStateDescription vmstate_debug = {
242 .name = "cpu/debug",
243 - .version_id = 2,
244 - .minimum_version_id = 2,
243 + .version_id = 3,
244 + .minimum_version_id = 3,
245 .needed = debug_needed,
246 .post_load = debug_post_load,
247 .fields = (const VMStateField[]) {
248 - VMSTATE_UINTTL(env.trigger_cur, RISCVCPU),
249 - VMSTATE_UINTTL_ARRAY(env.tdata1, RISCVCPU, RV_MAX_TRIGGERS),
250 - VMSTATE_UINTTL_ARRAY(env.tdata2, RISCVCPU, RV_MAX_TRIGGERS),
251 - VMSTATE_UINTTL_ARRAY(env.tdata3, RISCVCPU, RV_MAX_TRIGGERS),
248 + VMSTATE_UINT16(env.mcontext, RISCVCPU),
249 + VMSTATE_UINT8(env.trigger_cur, RISCVCPU),
250 + VMSTATE_UINT64_ARRAY(env.tdata1, RISCVCPU, RV_MAX_TRIGGERS),
251 + VMSTATE_UINT64_ARRAY(env.tdata2, RISCVCPU, RV_MAX_TRIGGERS),
252 + VMSTATE_UINT64_ARRAY(env.tdata3, RISCVCPU, RV_MAX_TRIGGERS),
253 VMSTATE_END_OF_LIST()
254 }
255 };