]> sourceware.org Git - glibc.git/commitdiff
Remove gettimeofday vsyscall use from x86-86 libpthread
authorUlrich Drepper <drepper@gmail.com>
Wed, 7 Sep 2011 04:14:06 +0000 (00:14 -0400)
committerUlrich Drepper <drepper@gmail.com>
Wed, 7 Sep 2011 04:14:06 +0000 (00:14 -0400)
nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S

index 9d066c600dddee3265685f356df8d8c3647d1440..1f4cfd0bb5d47770d75bc02bebdc718aacaf3c1e 100644 (file)
@@ -2,6 +2,14 @@
 
        * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S (sem_timedwait): Don't
        use gettimeofday vsyscall, just call gettimeofday.
+       * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S:
+       Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S:
+       Likewise.
+       * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
+       Simplify __vdso_clock_gettime use.
 
 2011-09-05  David S. Miller  <davem@davemloft.net>
 
index 3195db259f10f919be703f8451b4028f03923bf1..018da0cc59a44679f9541bd43100c9ea626d4942 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
 #endif
 
 
-/* For the calculation see asm/vsyscall.h.  */
-#define VSYSCALL_ADDR_vgettimeofday    0xffffffffff600000
-
-
        .globl  __lll_lock_wait_private
        .type   __lll_lock_wait_private,@function
        .hidden __lll_lock_wait_private
@@ -250,10 +246,9 @@ __lll_timedlock_wait:
        /* Get current time.  */
        movq    %rsp, %rdi
        xorl    %esi, %esi
-       movq    $VSYSCALL_ADDR_vgettimeofday, %rax
-       /* This is a regular function call, all caller-save registers
-          might be clobbered.  */
-       callq   *%rax
+       /* This call works because we directly jump to a system call entry
+          which preserves all the registers.  */
+       call    JUMPTARGET(__gettimeofday)
 
        /* Compute relative timeout.  */
        movq    8(%rsp), %rax
@@ -402,8 +397,9 @@ __lll_timedwait_tid:
        /* Get current time.  */
 2:     movq    %rsp, %rdi
        xorl    %esi, %esi
-       movq    $VSYSCALL_ADDR_vgettimeofday, %rax
-       callq   *%rax
+       /* This call works because we directly jump to a system call entry
+          which preserves all the registers.  */
+       call    JUMPTARGET(__gettimeofday)
 
        /* Compute relative timeout.  */
        movq    8(%rsp), %rax
index 5218a4f57a565e03f487adba387e3998b5367380..b7b8b34985acfd907943972a551fe4aa0b79c1c6 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002=2007, 2009, 2010 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2011=2007, 2009, 2010 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -50,9 +50,6 @@
        orl     $FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME, reg
 #endif
 
-/* For the calculation see asm/vsyscall.h.  */
-#define VSYSCALL_ADDR_vgettimeofday    0xffffffffff600000
-
 
        .globl  __lll_robust_lock_wait
        .type   __lll_robust_lock_wait,@function
@@ -219,10 +216,9 @@ __lll_robust_timedlock_wait:
        /* Get current time.  */
        movq    %rsp, %rdi
        xorl    %esi, %esi
-       movq    $VSYSCALL_ADDR_vgettimeofday, %rax
-       /* This is a regular function call, all caller-save registers
-          might be clobbered.  */
-       callq   *%rax
+       /* This call works because we directly jump to a system call entry
+          which preserves all the registers.  */
+       call    JUMPTARGET(__gettimeofday)
 
        /* Compute relative timeout.  */
        movq    8(%rsp), %rax
index 48ea8b967ed77e787c55730515d83eeecf8b20df..d11b29746a82bf632aa079266fdc3bd1149b3cda 100644 (file)
@@ -26,9 +26,6 @@
 
 #include <kernel-features.h>
 
-/* For the calculation see asm/vsyscall.h.  */
-#define VSYSCALL_ADDR_vgettimeofday    0xffffffffff600000
-
 
        .text
 
@@ -453,13 +450,11 @@ __pthread_cond_timedwait:
        movq    __vdso_clock_gettime@GOTPCREL(%rip), %rax
        movq    (%rax), %rax
        PTR_DEMANGLE (%rax)
-       jz      26f
        call    *%rax
-       jmp     27f
-#  endif
-26:    movl    $__NR_clock_gettime, %eax
+#  else
+       movl    $__NR_clock_gettime, %eax
        syscall
-27:
+#  endif
 #  ifndef __ASSUME_POSIX_TIMERS
        cmpq    $-ENOSYS, %rax
        je      19f
@@ -473,8 +468,9 @@ __pthread_cond_timedwait:
 # else
        leaq    24(%rsp), %rdi
        xorl    %esi, %esi
-       movq    $VSYSCALL_ADDR_vgettimeofday, %rax
-       callq   *%rax
+       /* This call works because we directly jump to a system call entry
+          which preserves all the registers.  */
+       call    JUMPTARGET(__gettimeofday)
 
        /* Compute relative timeout.  */
        movq    40(%rsp), %rax
@@ -611,8 +607,9 @@ __pthread_cond_timedwait:
        /* clock_gettime not available.  */
 19:    leaq    32(%rsp), %rdi
        xorl    %esi, %esi
-       movq    $VSYSCALL_ADDR_vgettimeofday, %rax
-       callq   *%rax
+       /* This call works because we directly jump to a system call entry
+          which preserves all the registers.  */
+       call    JUMPTARGET(__gettimeofday)
 
        /* Compute relative timeout.  */
        movq    40(%rsp), %rax
index f5d055c77ec9f35fb3809e26427130df2daf26f0..0e6a6ee8b91ca62241e10c5f5c8059ef79424f07 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2005, 2007, 2009, 2010 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2005,2007,2009,2010,2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
 #include <pthread-errnos.h>
 #include <kernel-features.h>
 
-
-/* For the calculation see asm/vsyscall.h.  */
-#define VSYSCALL_ADDR_vgettimeofday    0xffffffffff600000
-
        .text
 
        .globl  pthread_rwlock_timedrdlock
@@ -123,8 +119,9 @@ pthread_rwlock_timedrdlock:
        /* Get current time.  */
        movq    %rsp, %rdi
        xorl    %esi, %esi
-       movq    $VSYSCALL_ADDR_vgettimeofday, %rax
-       callq   *%rax
+       /* This call works because we directly jump to a system call entry
+          which preserves all the registers.  */
+       call    JUMPTARGET(__gettimeofday)
 
        /* Compute relative timeout.  */
        movq    8(%rsp), %rax
index 6ed8b49bd65c58fe0565e9fe14c85319e46c9876..16bf9203a7f0bc6729e8cc3b17484fe239cdecb4 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 2002, 2003, 2005, 2007, 2009, 2010 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2005, 2007, 2009, 2010, 2011
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
 #include <pthread-errnos.h>
 #include <kernel-features.h>
 
-
-/* For the calculation see asm/vsyscall.h.  */
-#define VSYSCALL_ADDR_vgettimeofday    0xffffffffff600000
-
        .text
 
        .globl  pthread_rwlock_timedwrlock
@@ -120,8 +117,9 @@ pthread_rwlock_timedwrlock:
        /* Get current time.  */
        movq    %rsp, %rdi
        xorl    %esi, %esi
-       movq    $VSYSCALL_ADDR_vgettimeofday, %rax
-       callq   *%rax
+       /* This call works because we directly jump to a system call entry
+          which preserves all the registers.  */
+       call    JUMPTARGET(__gettimeofday)
 
        /* Compute relative timeout.  */
        movq    8(%rsp), %rax
This page took 0.056409 seconds and 5 git commands to generate.