Messages in this thread | | | From | Qing Zhang <> | Subject | [PATCH v2 0/3] LoongArch: Add hardware breakpoints/watchpoints support | Date | Fri, 10 Feb 2023 18:09:03 +0800 |
| |
Use perf framework to manage hardware instruction and data breakpoints. LoongArch defines hardware watchpoint functions for instruction fetch and load/store operations, after the software configures hardware watchpoints for instruction fetch and load/store operations. The processor hardware will monitor the access address of the instruction fetch and load/store operation, and will trigger the exception of the watchpoint when it meets the conditions set by the watchpoint.
The hardware monitoring points for instruction fetching and load/store operations each have a register for the overall configuration of all monitoring points, a register for recording the status of all monitoring points, and four registers required for configuration of each watchpoint individually.
Watchpoint related control status register chapters: https://github.com/loongson/LoongArch-Documentation/releases/download/2022.08.12/ LoongArch-Vol1-v1.02-CN.pdf
Initial version has the following limitations: - no support for virtualization
Can be tested: e.g. 1. see samples/hw_breakpoint and register_wide_hw_breakpoint. 2. ptrace(PTRACE_SINGLESTEP/..., pid, NULL, NULL) 3. ptrace (PTRACE_SETREGSET, tid, ... , ...)
TODO: - Add hardware breakpoints/watchpoints for gdb, kgdb
Changes v1 -> v2: Suggested by Huacai: - Use irqentry_enter()/irqentry_exit() instead of exception_enter()/exception_exit() - Add ptrace interface to expose hw-breakpoints to debuggers - Use 2022-2023. - Some other changes.
Qing Zhang (3): LoongArch: Add hardware breakpoints/watchpoints support LoongArch: Add ptrace single step support LoongArch: ptrace: expose hardware breakpoints to debuggers
arch/loongarch/Kconfig | 1 + arch/loongarch/include/asm/hw_breakpoint.h | 145 ++++++ arch/loongarch/include/asm/loongarch.h | 32 +- arch/loongarch/include/asm/processor.h | 11 +- arch/loongarch/include/asm/ptrace.h | 2 + arch/loongarch/include/asm/switch_to.h | 1 + arch/loongarch/include/uapi/asm/ptrace.h | 9 + arch/loongarch/kernel/Makefile | 1 + arch/loongarch/kernel/hw_breakpoint.c | 540 +++++++++++++++++++++ arch/loongarch/kernel/process.c | 7 + arch/loongarch/kernel/ptrace.c | 484 ++++++++++++++++++ arch/loongarch/kernel/traps.c | 27 +- include/uapi/linux/elf.h | 2 + 13 files changed, 1241 insertions(+), 21 deletions(-) create mode 100644 arch/loongarch/include/asm/hw_breakpoint.h create mode 100644 arch/loongarch/kernel/hw_breakpoint.c
-- 2.36.0
| |