Make context_i386.c work on 5.x as well as 4.x by using the DBREG_DRX
macro to access the fields of 'struct dbreg' instead of accessing them directly. Because the macro is buggy on older versions of FreeBSD as it lacks proper macro argument parens, use an extra pointer as a workaround so that we'll work on pre-patched versions of FreeBSD. Reviewed by: gerald (maintainer)
This commit is contained in:
parent
ff2a2f614d
commit
5c09ab656d
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=69719
51
emulators/wine-devel/files/patch-context_i386
Normal file
51
emulators/wine-devel/files/patch-context_i386
Normal file
@ -0,0 +1,51 @@
|
||||
--- 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
|
||||
}
|
51
emulators/wine/files/patch-context_i386
Normal file
51
emulators/wine/files/patch-context_i386
Normal file
@ -0,0 +1,51 @@
|
||||
--- 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
|
||||
}
|
Loading…
Reference in New Issue
Block a user