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/lowlevellock.h | |
parent | 5f5843e30dda46ffc443c492959e206530837c98 (diff) | |
download | glibc-097eca29e8f769673b5ed1b335542719280a556e.tar.gz glibc-097eca29e8f769673b5ed1b335542719280a556e.tar.xz 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/lowlevellock.h')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h index 7c516ee36a..a96eb57c93 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h @@ -257,6 +257,17 @@ extern int __libc_locking_needed attribute_hidden; # define LLL_TID_EBX_LOAD # define LLL_TID_EBX_REG "b" #endif + +#ifdef I386_USE_SYSENTER +# ifdef SHARED +# define LLL_TID_ENTER_KERNEL "call *%%gs:%P6\n\t" +# else +# define LLL_TID_ENTER_KERNEL "call *_dl_sysinfo\n\t" +# endif +#else +# define LLL_TID_ENTER_KERNEL "int $0x80\n\t" +#endif + #define lll_wait_tid(tid) \ do { \ int __ignore; \ @@ -264,13 +275,14 @@ extern int __libc_locking_needed attribute_hidden; if (_tid != 0) \ __asm __volatile (LLL_TID_EBX_LOAD \ "1:\tmovl %1, %%eax\n\t" \ - "int $0x80\n\t" \ + LLL_TID_ENTER_KERNEL \ "cmpl $0, (%%ebx)\n\t" \ "jne,pn 1b\n\t" \ LLL_TID_EBX_LOAD \ : "=&a" (__ignore) \ : "i" (SYS_futex), LLL_TID_EBX_REG (&tid), "S" (0), \ - "c" (FUTEX_WAIT), "d" (_tid)); \ + "c" (FUTEX_WAIT), "d" (_tid), \ + "i" (offsetof (tcbhead_t, sysinfo))); \ } while (0) extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime) @@ -293,11 +305,12 @@ extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime) int __ignore; \ (tid) = 0; \ __asm __volatile (LLL_TID_EBX_LOAD \ - "\tint $0x80\n\t" \ + LLL_TID_ENTER_KERNEL \ LLL_TID_EBX_LOAD \ : "=a" (__ignore) \ : "0" (SYS_futex), LLL_TID_EBX_REG (&(tid)), "S" (0), \ - "c" (FUTEX_WAKE), "d" (0x7fffffff)); \ + "c" (FUTEX_WAKE), "d" (0x7fffffff) \ + "i" (offsetof (tcbhead_t, sysinfo))); \ } while (0) |