server: Fixed get_thread_context for x86_64.
diff --git a/server/ptrace.c b/server/ptrace.c
index 7aea8d5..c3d7249 100644
--- a/server/ptrace.c
+++ b/server/ptrace.c
@@ -29,9 +29,6 @@
 #ifdef HAVE_SYS_PTRACE_H
 # include <sys/ptrace.h>
 #endif
-#ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
-#endif
 #ifdef HAVE_SYS_PARAM_H
 # include <sys/param.h>
 #endif
@@ -468,44 +465,38 @@
 #endif
 
 /* debug register offset in struct user */
-#define DR_OFFSET(dr) ((int)((((struct user *)0)->u_debugreg) + (dr)))
-
-/* retrieve a debug register */
-static inline int get_debug_reg( int pid, int num, DWORD *data )
-{
-    int res;
-    errno = 0;
-    res = ptrace( PTRACE_PEEKUSER, pid, DR_OFFSET(num), 0 );
-    if ((res == -1) && errno)
-    {
-        file_set_error();
-        return -1;
-    }
-    *data = res;
-    return 0;
-}
+#define DR_OFFSET(dr) ((((struct user *)0)->u_debugreg) + (dr))
 
 /* retrieve the thread x86 registers */
 void get_thread_context( struct thread *thread, CONTEXT *context, unsigned int flags )
 {
-    int pid = get_ptrace_pid(thread);
+    int i, pid = get_ptrace_pid(thread);
+    long data[8];
 
     /* all other regs are handled on the client side */
     assert( (flags | CONTEXT_i386) == CONTEXT_DEBUG_REGISTERS );
 
     if (!suspend_for_ptrace( thread )) return;
 
-    if (get_debug_reg( pid, 0, &context->Dr0 ) == -1) goto error;
-    if (get_debug_reg( pid, 1, &context->Dr1 ) == -1) goto error;
-    if (get_debug_reg( pid, 2, &context->Dr2 ) == -1) goto error;
-    if (get_debug_reg( pid, 3, &context->Dr3 ) == -1) goto error;
-    if (get_debug_reg( pid, 6, &context->Dr6 ) == -1) goto error;
-    if (get_debug_reg( pid, 7, &context->Dr7 ) == -1) goto error;
+    for (i = 0; i < 8; i++)
+    {
+        if (i == 4 || i == 5) continue;
+        errno = 0;
+        data[i] = ptrace( PTRACE_PEEKUSER, pid, DR_OFFSET(i), 0 );
+        if ((data[i] == -1) && errno)
+        {
+            file_set_error();
+            goto done;
+        }
+    }
+    context->Dr0 = data[0];
+    context->Dr1 = data[1];
+    context->Dr2 = data[2];
+    context->Dr3 = data[3];
+    context->Dr6 = data[6];
+    context->Dr7 = data[7];
     context->ContextFlags |= CONTEXT_DEBUG_REGISTERS;
-    resume_after_ptrace( thread );
-    return;
- error:
-    file_set_error();
+done:
     resume_after_ptrace( thread );
 }