git: 531534bef90d - stable/13 - arm64: Always set the debug control and value regs
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 15 Jul 2024 12:38:09 UTC
The branch stable/13 has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=531534bef90d6df15d9a1efbd05d2255d9f11ed8 commit 531534bef90d6df15d9a1efbd05d2255d9f11ed8 Author: Andrew Turner <andrew@FreeBSD.org> AuthorDate: 2024-03-12 16:34:41 +0000 Commit: Andrew Turner <andrew@FreeBSD.org> CommitDate: 2024-07-15 12:34:28 +0000 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 (cherry picked from commit 2e2c983d5234cb5457548fc75608d93b2309b254) --- sys/arm64/arm64/debug_monitor.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/sys/arm64/arm64/debug_monitor.c b/sys/arm64/arm64/debug_monitor.c index 6de148161a7f..7d3ca9db9134 100644 --- a/sys/arm64/arm64/debug_monitor.c +++ b/sys/arm64/arm64/debug_monitor.c @@ -490,23 +490,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;