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