diff options
author | Alfred Perlstein <alfred@FreeBSD.org> | 2002-11-08 08:08:04 +0000 |
---|---|---|
committer | Alfred Perlstein <alfred@FreeBSD.org> | 2002-11-08 08:08:04 +0000 |
commit | 5c09ab656d4cf412a7668ac5a02ed268a6ff2c3c (patch) | |
tree | 9f0ae1c9dc37bb2eeb7cabbd517dd6ab9f61d5e2 /emulators | |
parent | ff2a2f614d24e052bb532556a485dcbfeef9bf6c (diff) | |
download | ports-5c09ab656d4cf412a7668ac5a02ed268a6ff2c3c.tar.gz ports-5c09ab656d4cf412a7668ac5a02ed268a6ff2c3c.zip |
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)
Notes
Notes:
svn path=/head/; revision=69719
Diffstat (limited to 'emulators')
-rw-r--r-- | emulators/wine-devel/files/patch-context_i386 | 51 | ||||
-rw-r--r-- | emulators/wine/files/patch-context_i386 | 51 |
2 files changed, 102 insertions, 0 deletions
diff --git a/emulators/wine-devel/files/patch-context_i386 b/emulators/wine-devel/files/patch-context_i386 new file mode 100644 index 000000000000..10b35c7c7f52 --- /dev/null +++ b/emulators/wine-devel/files/patch-context_i386 @@ -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 + } diff --git a/emulators/wine/files/patch-context_i386 b/emulators/wine/files/patch-context_i386 new file mode 100644 index 000000000000..10b35c7c7f52 --- /dev/null +++ b/emulators/wine/files/patch-context_i386 @@ -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 + } |