diff options
-rw-r--r-- | nptl/ChangeLog | 3 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h | 10 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h | 4 |
3 files changed, 10 insertions, 7 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 90e321a86c..ce6e760d15 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -3,6 +3,9 @@ * sysdeps/unix/sysv/linux/i386/lowlevellock.h (lll_futex_wait): Assume parameter is a pointer. (lll_futex_wake): Likewise. + * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (lll_futex_wait): + Likewise. + (lll_futex_wake): Likewise. Reported by Boris Hu. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass pointer to refcntr to lll_futex_wait. diff --git a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h index be00e89638..e420c3f6ef 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h @@ -52,9 +52,9 @@ #ifdef I386_USE_SYSENTER # ifdef SHARED -# define LLL_ENTER_KERNEL "call *%%gs:%P6\n\t" +# define LLL_ENTER_KERNEL "call *%%gs:%P6\n\t" # else -# define LLL_ENTER_KERNEL "call *_dl_sysinfo\n\t" +# define LLL_ENTER_KERNEL "call *_dl_sysinfo\n\t" # endif #else # define LLL_ENTER_KERNEL "int $0x80\n\t" @@ -69,7 +69,7 @@ LLL_ENTER_KERNEL \ LLL_EBX_LOAD \ : "=a" (__ignore) \ - : "0" (SYS_futex), LLL_EBX_REG (&futex), "S" (0), \ + : "0" (SYS_futex), LLL_EBX_REG (futex), "S" (0), \ "c" (FUTEX_WAIT), "d" (_val), \ "i" (offsetof (tcbhead_t, sysinfo))); \ } while (0) @@ -83,7 +83,7 @@ LLL_ENTER_KERNEL \ LLL_EBX_LOAD \ : "=a" (__ignore) \ - : "0" (SYS_futex), LLL_EBX_REG (&futex), \ + : "0" (SYS_futex), LLL_EBX_REG (futex), \ "c" (FUTEX_WAKE), "d" (_nr), \ "i" (0) /* phony, to align next arg's number */, \ "i" (offsetof (tcbhead_t, sysinfo))); \ @@ -93,7 +93,7 @@ /* Does not preserve %eax and %ecx. */ extern int __lll_mutex_lock_wait (int val, int *__futex) __attribute ((regparm (2))) attribute_hidden; -/* Does not preserver %eax, %ecx, and %edx. */ +/* Does not preserve %eax, %ecx, and %edx. */ extern int __lll_mutex_timedlock_wait (int val, int *__futex, const struct timespec *abstime) __attribute ((regparm (3))) attribute_hidden; diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h index 8b084d069e..156d1f7c64 100644 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h @@ -49,7 +49,7 @@ __asm __volatile ("xorq %%r10, %%r10\n\t" \ "syscall" \ : "=a" (__ignore) \ - : "0" (SYS_futex), "D" (&futex), "S" (FUTEX_WAIT), \ + : "0" (SYS_futex), "D" (futex), "S" (FUTEX_WAIT), \ "d" (_val) \ : "memory", "cc", "r10", "r11", "cx"); \ } while (0) @@ -61,7 +61,7 @@ register __typeof (nr) _nr asm ("edx") = (nr); \ __asm __volatile ("syscall" \ : "=a" (__ignore) \ - : "0" (SYS_futex), "D" (&futex), "S" (FUTEX_WAKE), \ + : "0" (SYS_futex), "D" (futex), "S" (FUTEX_WAKE), \ "d" (_nr) \ : "memory", "cc", "r10", "r11", "cx"); \ } while (0) |