PATCH: implement flag CONTEXT_DEBUG_REGISTERS on FreeBSD
Pierre Beyssac
pb-wine at fasterix.frmug.org
Tue Aug 13 15:47:54 CDT 2002
--- server.orig/context_i386.c Sat Aug 10 19:22:07 2002
+++ server/context_i386.c Tue Aug 13 22:43:49 2002
@@ -68,6 +68,14 @@
#define PTRACE_SETFPREGS PT_SETFPREGS
#endif
+#ifdef PT_GETDBREGS
+#define PTRACE_GETDBREGS PT_GETDBREGS
+#endif
+
+#ifdef PT_SETDBREGS
+#define PTRACE_SETDBREGS PT_SETDBREGS
+#endif
+
#ifdef linux
#ifdef HAVE_SYS_USER_H
# include <sys/user.h>
@@ -361,7 +369,17 @@
}
if (flags & CONTEXT_DEBUG_REGISTERS)
{
- /* FIXME: How is this done on FreeBSD? */
+#ifdef PTRACE_GETDBREGS
+ struct dbreg dbregs;
+ if (ptrace( PTRACE_GETDBREGS, pid, (caddr_t) &dbregs, 0 ) == -1)
+ goto error;
+ context->Dr0 = dbregs.dr0;
+ context->Dr1 = dbregs.dr1;
+ context->Dr2 = dbregs.dr2;
+ context->Dr3 = dbregs.dr3;
+ context->Dr6 = dbregs.dr6;
+ context->Dr7 = dbregs.dr7;
+#endif
}
if (flags & CONTEXT_FLOATING_POINT)
{
@@ -417,7 +435,19 @@
}
if (flags & CONTEXT_DEBUG_REGISTERS)
{
- /* FIXME: How is this done on FreeBSD? */
+#ifdef PTRACE_SETDBREGS
+ struct dbreg dbregs;
+ dbregs.dr0 = context->Dr0;
+ dbregs.dr1 = context->Dr1;
+ dbregs.dr2 = context->Dr2;
+ dbregs.dr3 = context->Dr3;
+ dbregs.dr4 = 0;
+ dbregs.dr5 = 0;
+ dbregs.dr6 = context->Dr6;
+ dbregs.dr7 = context->Dr7;
+ if (ptrace( PTRACE_SETDBREGS, pid, (caddr_t) &dbregs, 0 ) == -1)
+ goto error;
+#endif
}
if (flags & CONTEXT_FLOATING_POINT)
{
--
Pierre Beyssac pb at fasterix.frmug.org pb at fasterix.freenix.org
Free domains: http://www.eu.org/ or mail dns-manager at EU.org
More information about the wine-patches
mailing list