arm64: Always set the debug control and value regs

When listing watchpoints we read the raw registers. To ensure we print
an accurate list always set the watchpoint and breakpoint registers.

Sponsored by:	Arm Ltd

Reviewed by:	jhb
Sponsored by:	Arm Ltd
Differential Revision:	https://reviews.freebsd.org/D44351
This commit is contained in:
Andrew Turner 2024-03-12 16:34:41 +00:00
parent ed3c6cd76d
commit 2e2c983d52

View file

@ -495,23 +495,24 @@ dbg_register_sync(struct debug_monitor_state *monitor)
if (monitor == NULL)
monitor = &kernel_monitor;
for (i = 0; i < dbg_breakpoint_num; i++) {
dbg_wb_write_reg(DBG_REG_BASE_BCR, i,
monitor->dbg_bcr[i]);
dbg_wb_write_reg(DBG_REG_BASE_BVR, i,
monitor->dbg_bvr[i]);
}
for (i = 0; i < dbg_watchpoint_num; i++) {
dbg_wb_write_reg(DBG_REG_BASE_WCR, i,
monitor->dbg_wcr[i]);
dbg_wb_write_reg(DBG_REG_BASE_WVR, i,
monitor->dbg_wvr[i]);
}
mdscr = READ_SPECIALREG(mdscr_el1);
if ((monitor->dbg_flags & DBGMON_ENABLED) == 0) {
mdscr &= ~(MDSCR_MDE | MDSCR_KDE);
} else {
for (i = 0; i < dbg_breakpoint_num; i++) {
dbg_wb_write_reg(DBG_REG_BASE_BCR, i,
monitor->dbg_bcr[i]);
dbg_wb_write_reg(DBG_REG_BASE_BVR, i,
monitor->dbg_bvr[i]);
}
for (i = 0; i < dbg_watchpoint_num; i++) {
dbg_wb_write_reg(DBG_REG_BASE_WCR, i,
monitor->dbg_wcr[i]);
dbg_wb_write_reg(DBG_REG_BASE_WVR, i,
monitor->dbg_wvr[i]);
}
mdscr |= MDSCR_MDE;
if ((monitor->dbg_flags & DBGMON_KERNEL) == DBGMON_KERNEL)
mdscr |= MDSCR_KDE;