diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-12-20 07:12:24 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-12-20 07:12:24 +0000 |
commit | 097eca29e8f769673b5ed1b335542719280a556e (patch) | |
tree | aa70ad74f87ac91b5686399c41c2ff9ffbbe877e /nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h | |
parent | 5f5843e30dda46ffc443c492959e206530837c98 (diff) | |
download | glibc-097eca29e8f769673b5ed1b335542719280a556e.tar glibc-097eca29e8f769673b5ed1b335542719280a556e.tar.gz glibc-097eca29e8f769673b5ed1b335542719280a556e.tar.bz2 glibc-097eca29e8f769673b5ed1b335542719280a556e.zip |
Update.
* sysdeps/unix/sysv/linux/i386/pthread_once.S: Use ENTER_KERNEL instead
of int $0x80.
* sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/libc-lowlevelmutex.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/lowlevelcond.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/lowlevelrwlock.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/lowlevelsem.S: Likewise.
* sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Likewise.
* sysdeps/unix/sysv/linux/i386/lowlevellock.h: Add support for using
sysenter.
* sysdeps/unix/sysv/linux/i386/lowlevelsem.h: Likewise.
* sysdeps/i386/tls.h: Unconditionally include <dl-sysdep.h>.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h b/nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h index bd5f96402b..59c1602ddb 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/lowlevelsem.h @@ -20,6 +20,9 @@ #ifndef _LOWLEVELSEM_H #define _LOWLEVELSEM_H 1 +#include <dl-sysdep.h> +#include <tls.h> + #ifndef LOCK # ifdef UP # define LOCK /* nothing */ @@ -31,6 +34,16 @@ #define SYS_futex 240 +#ifdef I386_USE_SYSENTER +# ifdef SHARED +# define LLL_SEM_ENTER_KERNEL(arg) "call *%%gs:%P" #arg "\n\t" +# else +# define LLL_SEM_ENTER_KERNEL(arg) "call *_dl_sysinfo\n\t" +# endif +#else +# define LLL_SEM_ENTER_KERNEL(arg) "int $0x80\n\t" +#endif + #define lll_sem_wait(sem) \ ({ int result, ignore1, ignore2; \ __asm __volatile ("1:\tincl 8(%4)\n\t" \ @@ -46,7 +59,7 @@ "movl %%esi, %%edx\n\t" \ "leal 4(%4), %%ebx\n\t" \ "movl %5, %%eax\n\t" \ - "int $0x80\n\t" \ + LLL_SEM_ENTER_KERNEL (9) \ "movl %%eax, %%edx\n\t" \ "popl %%ebx\n\t" \ "orl $-1, %%eax\n\t" \ @@ -68,7 +81,8 @@ : "=a" (result), "=c" (ignore1), "=d" (ignore2), \ "=m" (*sem) \ : "D" (sem), "i" (SYS_futex), "S" (0), \ - "i" (-EINTR), "i" (EINTR)); \ + "i" (-EINTR), "i" (EINTR), \ + "i" (offsetof (tcbhead_t, sysinfo))); \ result; }) @@ -91,11 +105,12 @@ extern int __lll_sem_timedwait (struct sem *sem, const struct timespec *ts) "movl %5, %%eax\n\t" \ /* movl $FUTEX_WAKE, %ecx */ \ "movl $1, %%ecx\n\t" \ - "int $0x80\n\t" \ + LLL_SEM_ENTER_KERNEL (6) \ "popl %%ebx\n\t" \ "popl %%esi" \ : "=&a" (ignore1), "=c" (ignore2), \ "=m" (*sem), "=d" (ignore3) \ - : "r" (sem), "i" (SYS_futex)); }) + : "r" (sem), "i" (SYS_futex), \ + "i" (offsetof (tcbhead_t, sysinfo))); }) #endif /* lowlevelsem.h */ |