PATCH: thread handling fix for BSD and Solaris

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[ Initially misdirected to wine-devel, resent here for submission ]

Here's a patch to fix a EFAULT error returned by ptrace calls in
server/context_i386.c, causing tons of "file_set_error: Bad address"
errors.

Two arguments to ptrace were reversed.  

This is tested on FreeBSD and checked with NetBSD and Solaris
ptrace(2) manual pages.

--- wine-20020804.orig/server/context_i386.c	Sun Mar 10 01:18:36 2002
+++ wine-20020804/server/context_i386.c	Sat Aug 10 19:22:07 2002
@@ -224,7 +224,7 @@
     if (flags & CONTEXT_FULL)
     {
         struct regs regs;
-        if (ptrace( PTRACE_GETREGS, pid, 0, (int) &regs ) == -1) goto error;
+        if (ptrace( PTRACE_GETREGS, pid, (int) &regs, 0 ) == -1) goto error;
         if (flags & CONTEXT_INTEGER)
         {
             context->Eax = regs.r_eax;
@@ -259,7 +259,7 @@
     {
         /* we can use context->FloatSave directly as it is using the */
         /* correct structure (the same as fsave/frstor) */
-        if (ptrace( PTRACE_GETFPREGS, pid, 0, (int) &context->FloatSave ) == -1) goto error;
+        if (ptrace( PTRACE_GETFPREGS, pid, (int) &context->FloatSave, 0 ) == -1) goto error;
         context->FloatSave.Cr0NpxState = 0;  /* FIXME */
     }
     return;
@@ -278,7 +278,7 @@
         if (((flags | CONTEXT_i386) & CONTEXT_FULL) != CONTEXT_FULL)
         {
             /* need to preserve some registers */
-            if (ptrace( PTRACE_GETREGS, pid, 0, (int) &regs ) == -1) goto error;
+            if (ptrace( PTRACE_GETREGS, pid, (int) &regs, 0 ) == -1) goto error;
         }
         if (flags & CONTEXT_INTEGER)
         {
@@ -305,7 +305,7 @@
             regs.r_fs = context->SegFs;
             regs.r_gs = context->SegGs;
         }
-        if (ptrace( PTRACE_SETREGS, pid, 0, (int) &regs ) == -1) goto error;
+        if (ptrace( PTRACE_SETREGS, pid, (int) &regs, 0 ) == -1) goto error;
     }
     if (flags & CONTEXT_DEBUG_REGISTERS)
     {
@@ -315,7 +315,7 @@
     {
         /* we can use context->FloatSave directly as it is using the */
         /* correct structure (the same as fsave/frstor) */
-        if (ptrace( PTRACE_SETFPREGS, pid, 0, (int) &context->FloatSave ) == -1) goto error;
+        if (ptrace( PTRACE_SETFPREGS, pid, (int) &context->FloatSave, 0 ) == -1) goto error;
     }
     return;
  error:
@@ -332,7 +332,7 @@
     if (flags & CONTEXT_FULL)
     {
         struct reg regs;
-        if (ptrace( PTRACE_GETREGS, pid, 0, (int) &regs ) == -1) goto error;
+        if (ptrace( PTRACE_GETREGS, pid, (caddr_t) &regs, 0 ) == -1) goto error;
         if (flags & CONTEXT_INTEGER)
         {
             context->Eax = regs.r_eax;
@@ -367,7 +367,7 @@
     {
         /* we can use context->FloatSave directly as it is using the */
         /* correct structure (the same as fsave/frstor) */
-        if (ptrace( PTRACE_GETFPREGS, pid, 0, (int) &context->FloatSave ) == -1) goto error;
+        if (ptrace( PTRACE_GETFPREGS, pid, (caddr_t) &context->FloatSave, 0 ) == -1) goto error;
         context->FloatSave.Cr0NpxState = 0;  /* FIXME */
     }
     return;
@@ -386,7 +386,7 @@
         if (((flags | CONTEXT_i386) & CONTEXT_FULL) != CONTEXT_FULL)
         {
             /* need to preserve some registers */
-            if (ptrace( PTRACE_GETREGS, pid, 0, (int) &regs ) == -1) goto error;
+            if (ptrace( PTRACE_GETREGS, pid, (caddr_t) &regs, 0 ) == -1) goto error;
         }
         if (flags & CONTEXT_INTEGER)
         {
@@ -413,7 +413,7 @@
             regs.r_fs = context->SegFs;
             regs.r_gs = context->SegGs;
         }
-        if (ptrace( PTRACE_SETREGS, pid, 0, (int) &regs ) == -1) goto error;
+        if (ptrace( PTRACE_SETREGS, pid, (caddr_t) &regs, 0 ) == -1) goto error;
     }
     if (flags & CONTEXT_DEBUG_REGISTERS)
     {
@@ -423,7 +423,7 @@
     {
         /* we can use context->FloatSave directly as it is using the */
         /* correct structure (the same as fsave/frstor) */
-        if (ptrace( PTRACE_SETFPREGS, pid, 0, (int) &context->FloatSave ) == -1) goto error;
+        if (ptrace( PTRACE_SETFPREGS, pid, (caddr_t) &context->FloatSave, 0 ) == -1) goto error;
     }
     return;
  error:
-- 
Pierre Beyssac	      	    pb@fasterix.frmug.org pb@fasterix.freenix.org
    Free domains: http://www.eu.org/ or mail dns-manager@EU.org


[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux