[PATCH] server: Use syscall(2) instead of inline assembly on Mac OS, too. (try 2)

Charles Davis cdavis at mymail.mines.edu
Sat Oct 8 13:08:18 CDT 2011


Try 2:
- Don't set errno. syscall(2) sets that for us.

---
 server/mach.c |   24 ++++--------------------
 1 files changed, 4 insertions(+), 20 deletions(-)

diff --git a/server/mach.c b/server/mach.c
index f890321..03c88ec 100644
--- a/server/mach.c
+++ b/server/mach.c
@@ -29,6 +29,9 @@
 #include <stdarg.h>
 #include <sys/types.h>
 #include <unistd.h>
+#ifdef HAVE_SYS_SYSCALL_H
+#include <sys/syscall.h>
+#endif
 
 #include "ntstatus.h"
 #define WIN32_NO_STATUS
@@ -47,21 +50,6 @@
 #include <mach/thread_act.h>
 #include <servers/bootstrap.h>
 
-#if defined(__APPLE__) && defined(__i386__)
-extern int pthread_kill_syscall( mach_port_t, int );
-__ASM_GLOBAL_FUNC( pthread_kill_syscall,
-                   "movl $328,%eax\n\t"  /* SYS___pthread_kill */
-                   "int $0x80\n\t"
-                   "jae 1f\n\t"
-                   "negl %eax\n"
-                   "1:\tret" )
-#else
-static inline int pthread_kill_syscall( mach_port_t, int )
-{
-    return -ENOSYS;
-}
-#endif
-
 static mach_port_t server_mach_port;
 
 void sigchld_callback(void)
@@ -268,11 +256,7 @@ int send_thread_signal( struct thread *thread, int sig )
         if (!mach_port_extract_right( process_port, thread->unix_tid,
                                       MACH_MSG_TYPE_COPY_SEND, &port, &type ))
         {
-            if ((ret = pthread_kill_syscall( port, sig )) < 0)
-            {
-                errno = -ret;
-                ret = -1;
-            }
+            ret = syscall( SYS___pthread_kill, port, sig );
             mach_port_deallocate( mach_task_self(), port );
         }
         else errno = ESRCH;
-- 
1.7.7




More information about the wine-patches mailing list