We're working on improving arm64/FreeBSD support in LLDB, and we've noticed that -- unless we're mistaken -- the kernel code responsible for PT_GETDBREGS and PT_SETDBREGS handles breakpoint registers only. I'm specifically referring to the fill_dbregs() function at: https://cgit.freebsd.org/src/tree/sys/arm64/arm64/machdep.c?id=5f66d5a313bf2b2254de92b2915e48e5cf528893#n320 It needs to be extended to include watchpoint registers if we're going to use hardware watchpoints on FreeBSD. However, I'm not really sure how to do that without breaking the ABI -- though I'm not sure if anything is actually using it at this point.
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=f2583be110ca3a5b32f0993f1464a5c69151c62f commit f2583be110ca3a5b32f0993f1464a5c69151c62f Author: Mitchell Horne <mhorne@FreeBSD.org> AuthorDate: 2021-01-28 17:49:47 +0000 Commit: Mitchell Horne <mhorne@FreeBSD.org> CommitDate: 2021-02-17 16:05:00 +0000 arm64: extend struct db_reg to include watchpoint registers The motivation is to provide access to these registers from userspace via ptrace(2) requests PT_GETDBREGS and PT_SETDBREGS. This change breaks the ABI of these particular requests, but is justified by the fact that the intended consumers (debuggers) have not been taught to use them yet. Making this change now enables active upstream work on lldb to begin using this interface, and take advantage of the hardware debugging registers available on the platform. PR: 252860 Reported by: MichaŠGórny (mgorny@gentoo.org) Reviewed by: andrew, markj (earlier version) Tested by: MichaŠGórny (mgorny@gentoo.org) MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D28415 sys/arm64/arm64/identcpu.c | 2 +- sys/arm64/arm64/machdep.c | 71 ++++++++++++++++++++++++++++++++++++++-------- sys/arm64/include/armreg.h | 22 ++++++++++++++ sys/arm64/include/reg.h | 13 +++++++-- 4 files changed, 92 insertions(+), 16 deletions(-)
A commit in branch stable/13 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=4786c8582c569a7245dadbdbb4638d1667c10d62 commit 4786c8582c569a7245dadbdbb4638d1667c10d62 Author: Mitchell Horne <mhorne@FreeBSD.org> AuthorDate: 2021-01-28 17:49:47 +0000 Commit: Mitchell Horne <mhorne@FreeBSD.org> CommitDate: 2021-02-24 14:58:43 +0000 arm64: extend struct db_reg to include watchpoint registers The motivation is to provide access to these registers from userspace via ptrace(2) requests PT_GETDBREGS and PT_SETDBREGS. This change breaks the ABI of these particular requests, but is justified by the fact that the intended consumers (debuggers) have not been taught to use them yet. Making this change now enables active upstream work on lldb to begin using this interface, and take advantage of the hardware debugging registers available on the platform. PR: 252860 Reported by: MichaŠGórny (mgorny@gentoo.org) Reviewed by: andrew, markj (earlier version) Tested by: MichaŠGórny (mgorny@gentoo.org) Sponsored by: The FreeBSD Foundation (cherry picked from commit f2583be110ca3a5b32f0993f1464a5c69151c62f) sys/arm64/arm64/identcpu.c | 2 +- sys/arm64/arm64/machdep.c | 71 ++++++++++++++++++++++++++++++++++++++-------- sys/arm64/include/armreg.h | 22 ++++++++++++++ sys/arm64/include/reg.h | 13 +++++++-- 4 files changed, 92 insertions(+), 16 deletions(-)
A commit in branch releng/13.0 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=f1847ed16ebd16d91766934ff7c28e887fbd2846 commit f1847ed16ebd16d91766934ff7c28e887fbd2846 Author: Mitchell Horne <mhorne@FreeBSD.org> AuthorDate: 2021-01-28 17:49:47 +0000 Commit: Mitchell Horne <mhorne@FreeBSD.org> CommitDate: 2021-02-25 21:31:31 +0000 arm64: extend struct db_reg to include watchpoint registers The motivation is to provide access to these registers from userspace via ptrace(2) requests PT_GETDBREGS and PT_SETDBREGS. This change breaks the ABI of these particular requests, but is justified by the fact that the intended consumers (debuggers) have not been taught to use them yet. Making this change now enables active upstream work on lldb to begin using this interface, and take advantage of the hardware debugging registers available on the platform. PR: 252860 Reported by: MichaŠGórny (mgorny@gentoo.org) Reviewed by: andrew, markj (earlier version) Tested by: MichaŠGórny (mgorny@gentoo.org) Sponsored by: The FreeBSD Foundation Approved by: re (gjb) (cherry picked from commit f2583be110ca3a5b32f0993f1464a5c69151c62f) (cherry picked from commit 4786c8582c569a7245dadbdbb4638d1667c10d62) sys/arm64/arm64/identcpu.c | 2 +- sys/arm64/arm64/machdep.c | 71 ++++++++++++++++++++++++++++++++++++++-------- sys/arm64/include/armreg.h | 22 ++++++++++++++ sys/arm64/include/reg.h | 13 +++++++-- 4 files changed, 92 insertions(+), 16 deletions(-)