[PATCH 32/32] ntdll: Use syscall instead of int 0x80
Maarten Lankhorst
m.b.lankhorst at gmail.com
Sat Jun 5 18:08:20 CDT 2010
---
dlls/ntdll/critsection.c | 26 ++++++++++----------------
dlls/ntdll/server.c | 4 ++--
2 files changed, 12 insertions(+), 18 deletions(-)
diff --git a/dlls/ntdll/critsection.c b/dlls/ntdll/critsection.c
index 2846343..625502a 100644
--- a/dlls/ntdll/critsection.c
+++ b/dlls/ntdll/critsection.c
@@ -60,26 +60,20 @@ static inline void small_pause(void)
static inline int futex_wait( int *addr, int val, struct timespec *timeout )
{
- int res;
- __asm__ __volatile__( "xchgl %2,%%ebx\n\t"
- "int $0x80\n\t"
- "xchgl %2,%%ebx"
- : "=a" (res)
- : "0" (240) /* SYS_futex */, "D" (addr),
- "c" (0) /* FUTEX_WAIT */, "d" (val), "S" (timeout) );
- return res;
+ int ret;
+ ret = syscall( 240/*SYS_futex*/, addr, 0/*FUTEX_WAIT*/, val, timeout, 0, 0 );
+ if (ret < 0)
+ return -errno;
+ return ret;
}
static inline int futex_wake( int *addr, int val )
{
- int res;
- __asm__ __volatile__( "xchgl %2,%%ebx\n\t"
- "int $0x80\n\t"
- "xchgl %2,%%ebx"
- : "=a" (res)
- : "0" (240) /* SYS_futex */, "D" (addr),
- "c" (1) /* FUTEX_WAKE */, "d" (val) );
- return res;
+ int ret;
+ ret = syscall( 240/*SYS_futex*/, addr, 1/*FUTEX_WAKE*/, val, NULL, 0, 0 );
+ if (ret < 0)
+ return -errno;
+ return ret;
}
static inline int use_futexes(void)
diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c
index 08ee784..9112a82 100644
--- a/dlls/ntdll/server.c
+++ b/dlls/ntdll/server.c
@@ -935,9 +935,9 @@ static int get_unix_tid(void)
{
int ret = -1;
#if defined(linux) && defined(__i386__)
- __asm__("int $0x80" : "=a" (ret) : "0" (224) /* SYS_gettid */);
+ return syscall(224 /*SYS_gettid*/);
#elif defined(linux) && defined(__x86_64__)
- __asm__("syscall" : "=a" (ret) : "0" (186) /* SYS_gettid */);
+ return syscall(186 /*SYS_gettid*/);
#elif defined(__sun)
ret = pthread_self();
#elif defined(__APPLE__)
--
1.7.0.4
--------------010603030307010003070404--
More information about the wine-patches
mailing list