PATCH: server/context_i386.c -- unbreak
Gerald Pfeifer
pfeifer at dbai.tuwien.ac.at
Fri Nov 8 04:53:55 CST 2002
The following patch by Alfred (see the CVS log below) addresses the fact
that struct dbreg has different definitions in FreeBSD 4.x and 5.x. It
uses the DBREG_DRX accessor macros instead of accessing the structure
directly.
This is a very important bug fix; without it, Wine won't compile on FreBSD
5.x.
(In case you wonder about the introduction of dbregs_ptr, this is to avoid
a problem with earlier versions of the DBREG_DRX macro.)
Gerald
CVS log:
Alfred Perlstein <alfred at freebsd.org>
Use the DBREG_DRX accessor macros instead of accessing members of
struct dbreg directly.
--- server/context_i386.c.orig Wed Aug 14 13:59:03 2002
+++ server/context_i386.c Thu Nov 7 14:54:01 2002
@@ -371,14 +371,15 @@
{
#ifdef PTRACE_GETDBREGS
struct dbreg dbregs;
- if (ptrace( PTRACE_GETDBREGS, pid, (caddr_t) &dbregs, 0 ) == -1)
+ struct dbreg *dbregs_ptr = &dbregs; /* ptr to workaround buggy macro */
+ if (ptrace( PTRACE_GETDBREGS, pid, (caddr_t) dbregs_ptr, 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;
+ context->Dr0 = DBREG_DRX(dbregs_ptr, 0);
+ context->Dr1 = DBREG_DRX(dbregs_ptr, 1);
+ context->Dr2 = DBREG_DRX(dbregs_ptr, 2);
+ context->Dr3 = DBREG_DRX(dbregs_ptr, 3);
+ context->Dr6 = DBREG_DRX(dbregs_ptr, 6);
+ context->Dr7 = DBREG_DRX(dbregs_ptr, 7);
#endif
}
if (flags & CONTEXT_FLOATING_POINT)
@@ -437,15 +438,16 @@
{
#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)
+ struct dbreg *dbregs_ptr = &dbregs; /* ptr to workaround buggy macro */
+ DBREG_DRX(dbregs_ptr, 0) = context->Dr0;
+ DBREG_DRX(dbregs_ptr, 1) = context->Dr1;
+ DBREG_DRX(dbregs_ptr, 2) = context->Dr2;
+ DBREG_DRX(dbregs_ptr, 3) = context->Dr3;
+ DBREG_DRX(dbregs_ptr, 4) = 0;
+ DBREG_DRX(dbregs_ptr, 5) = 0;
+ DBREG_DRX(dbregs_ptr, 6) = context->Dr6;
+ DBREG_DRX(dbregs_ptr, 7) = context->Dr7;
+ if (ptrace( PTRACE_SETDBREGS, pid, (caddr_t) dbregs_ptr, 0 ) == -1)
goto error;
#endif
}
More information about the wine-patches
mailing list