From ed0010ed097b27a228d9a2f31851671fce2e0d09 Mon Sep 17 00:00:00 2001 From: "David E. O'Brien" Date: Sat, 12 Feb 2000 18:33:54 +0000 Subject: [PATCH] Document the support in the kernel for hardware debug registers on the ix86 platform which allows for hardware watchpoints, etc... Submitted by: Brian Dean --- lib/libc/sys/ptrace.2 | 21 ++++++++++++++++++++- share/man/man5/procfs.5 | 7 +++++++ sys/amd64/include/reg.h | 3 +++ sys/i386/include/reg.h | 3 +++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lib/libc/sys/ptrace.2 b/lib/libc/sys/ptrace.2 index 37eca05a3de7..551f41d1596f 100644 --- a/lib/libc/sys/ptrace.2 +++ b/lib/libc/sys/ptrace.2 @@ -202,6 +202,23 @@ it loads the traced process' floating-point registers from the .Aq Pa machine/reg.h ) pointed to by .Fa addr . +.It Dv PT_GETDBREGS +This request reads the traced process' debug registers into +the +.Dq Li "struct dbreg" +(defined in +.Aq Pa machine/reg.h ) +pointed to by +.Fa addr . +.It Dv PT_SETDBREGS +This request is the converse of +.Dv PT_GETDBREGS ; +it loads the traced process' debug registers from the +.Dq Li "struct dbreg" +(defined in +.Aq Pa machine/reg.h ) +pointed to by +.Fa addr . .El .Sh RETURN VALUES Some requests can cause @@ -250,8 +267,10 @@ was neither 0 nor a legal signal number. .Dv PT_GETREGS , .Dv PT_SETREGS , .Dv PT_GETFPREGS , +.Dv PT_SETFPREGS , +.Dv PT_GETDBREGS , or -.Dv PT_SETFPREGS +.Dv PT_SETDBREGS was attempted on a process with no valid register set. (This is normally true only of system processes.) .El diff --git a/share/man/man5/procfs.5 b/share/man/man5/procfs.5 index 5f9a63404aa7..af637a012db1 100644 --- a/share/man/man5/procfs.5 +++ b/share/man/man5/procfs.5 @@ -74,6 +74,13 @@ prefix, in which case that signal is delivered to the process (see .Xr sigaction 2 ). +.It Pa dbregs +The debug registers as defined by +.Dv "struct dbregs" +in +.Pa . +.Pa dbregs +is currently only implemented on the i386 architecture. .It Pa etype The type of the executable referenced by the .Pa file diff --git a/sys/amd64/include/reg.h b/sys/amd64/include/reg.h index 7b5b69a1c2af..6effd1a60d6f 100644 --- a/sys/amd64/include/reg.h +++ b/sys/amd64/include/reg.h @@ -118,6 +118,9 @@ struct fpreg { unsigned char fpr_pad[64]; }; +/* + * Register set accessible via /proc/$pid/dbregs. + */ struct dbreg { unsigned int dr0; /* debug address register 0 */ unsigned int dr1; /* debug address register 1 */ diff --git a/sys/i386/include/reg.h b/sys/i386/include/reg.h index 7b5b69a1c2af..6effd1a60d6f 100644 --- a/sys/i386/include/reg.h +++ b/sys/i386/include/reg.h @@ -118,6 +118,9 @@ struct fpreg { unsigned char fpr_pad[64]; }; +/* + * Register set accessible via /proc/$pid/dbregs. + */ struct dbreg { unsigned int dr0; /* debug address register 0 */ unsigned int dr1; /* debug address register 1 */