Remove gettimeofday vsyscall use from x86-86 libpthread

This commit is contained in:
Ulrich Drepper 2011-09-07 00:14:06 -04:00
parent e38ba7ab6a
commit 9e5c9dcd57
6 changed files with 37 additions and 45 deletions

View File

@ -2,6 +2,14 @@
* sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S (sem_timedwait): Don't * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S (sem_timedwait): Don't
use gettimeofday vsyscall, just call gettimeofday. 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> 2011-09-05 David S. Miller <davem@davemloft.net>

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -68,10 +68,6 @@
#endif #endif
/* For the calculation see asm/vsyscall.h. */
#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
.globl __lll_lock_wait_private .globl __lll_lock_wait_private
.type __lll_lock_wait_private,@function .type __lll_lock_wait_private,@function
.hidden __lll_lock_wait_private .hidden __lll_lock_wait_private
@ -250,10 +246,9 @@ __lll_timedlock_wait:
/* Get current time. */ /* Get current time. */
movq %rsp, %rdi movq %rsp, %rdi
xorl %esi, %esi xorl %esi, %esi
movq $VSYSCALL_ADDR_vgettimeofday, %rax /* This call works because we directly jump to a system call entry
/* This is a regular function call, all caller-save registers which preserves all the registers. */
might be clobbered. */ call JUMPTARGET(__gettimeofday)
callq *%rax
/* Compute relative timeout. */ /* Compute relative timeout. */
movq 8(%rsp), %rax movq 8(%rsp), %rax
@ -402,8 +397,9 @@ __lll_timedwait_tid:
/* Get current time. */ /* Get current time. */
2: movq %rsp, %rdi 2: movq %rsp, %rdi
xorl %esi, %esi xorl %esi, %esi
movq $VSYSCALL_ADDR_vgettimeofday, %rax /* This call works because we directly jump to a system call entry
callq *%rax which preserves all the registers. */
call JUMPTARGET(__gettimeofday)
/* Compute relative timeout. */ /* Compute relative timeout. */
movq 8(%rsp), %rax movq 8(%rsp), %rax

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -50,9 +50,6 @@
orl $FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME, reg orl $FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME, reg
#endif #endif
/* For the calculation see asm/vsyscall.h. */
#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
.globl __lll_robust_lock_wait .globl __lll_robust_lock_wait
.type __lll_robust_lock_wait,@function .type __lll_robust_lock_wait,@function
@ -219,10 +216,9 @@ __lll_robust_timedlock_wait:
/* Get current time. */ /* Get current time. */
movq %rsp, %rdi movq %rsp, %rdi
xorl %esi, %esi xorl %esi, %esi
movq $VSYSCALL_ADDR_vgettimeofday, %rax /* This call works because we directly jump to a system call entry
/* This is a regular function call, all caller-save registers which preserves all the registers. */
might be clobbered. */ call JUMPTARGET(__gettimeofday)
callq *%rax
/* Compute relative timeout. */ /* Compute relative timeout. */
movq 8(%rsp), %rax movq 8(%rsp), %rax

View File

@ -26,9 +26,6 @@
#include <kernel-features.h> #include <kernel-features.h>
/* For the calculation see asm/vsyscall.h. */
#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
.text .text
@ -453,13 +450,11 @@ __pthread_cond_timedwait:
movq __vdso_clock_gettime@GOTPCREL(%rip), %rax movq __vdso_clock_gettime@GOTPCREL(%rip), %rax
movq (%rax), %rax movq (%rax), %rax
PTR_DEMANGLE (%rax) PTR_DEMANGLE (%rax)
jz 26f
call *%rax call *%rax
jmp 27f # else
# endif movl $__NR_clock_gettime, %eax
26: movl $__NR_clock_gettime, %eax
syscall syscall
27: # endif
# ifndef __ASSUME_POSIX_TIMERS # ifndef __ASSUME_POSIX_TIMERS
cmpq $-ENOSYS, %rax cmpq $-ENOSYS, %rax
je 19f je 19f
@ -473,8 +468,9 @@ __pthread_cond_timedwait:
# else # else
leaq 24(%rsp), %rdi leaq 24(%rsp), %rdi
xorl %esi, %esi xorl %esi, %esi
movq $VSYSCALL_ADDR_vgettimeofday, %rax /* This call works because we directly jump to a system call entry
callq *%rax which preserves all the registers. */
call JUMPTARGET(__gettimeofday)
/* Compute relative timeout. */ /* Compute relative timeout. */
movq 40(%rsp), %rax movq 40(%rsp), %rax
@ -611,8 +607,9 @@ __pthread_cond_timedwait:
/* clock_gettime not available. */ /* clock_gettime not available. */
19: leaq 32(%rsp), %rdi 19: leaq 32(%rsp), %rdi
xorl %esi, %esi xorl %esi, %esi
movq $VSYSCALL_ADDR_vgettimeofday, %rax /* This call works because we directly jump to a system call entry
callq *%rax which preserves all the registers. */
call JUMPTARGET(__gettimeofday)
/* Compute relative timeout. */ /* Compute relative timeout. */
movq 40(%rsp), %rax movq 40(%rsp), %rax

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -23,10 +23,6 @@
#include <pthread-errnos.h> #include <pthread-errnos.h>
#include <kernel-features.h> #include <kernel-features.h>
/* For the calculation see asm/vsyscall.h. */
#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
.text .text
.globl pthread_rwlock_timedrdlock .globl pthread_rwlock_timedrdlock
@ -123,8 +119,9 @@ pthread_rwlock_timedrdlock:
/* Get current time. */ /* Get current time. */
movq %rsp, %rdi movq %rsp, %rdi
xorl %esi, %esi xorl %esi, %esi
movq $VSYSCALL_ADDR_vgettimeofday, %rax /* This call works because we directly jump to a system call entry
callq *%rax which preserves all the registers. */
call JUMPTARGET(__gettimeofday)
/* Compute relative timeout. */ /* Compute relative timeout. */
movq 8(%rsp), %rax movq 8(%rsp), %rax

View 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
@ -23,10 +24,6 @@
#include <pthread-errnos.h> #include <pthread-errnos.h>
#include <kernel-features.h> #include <kernel-features.h>
/* For the calculation see asm/vsyscall.h. */
#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
.text .text
.globl pthread_rwlock_timedwrlock .globl pthread_rwlock_timedwrlock
@ -120,8 +117,9 @@ pthread_rwlock_timedwrlock:
/* Get current time. */ /* Get current time. */
movq %rsp, %rdi movq %rsp, %rdi
xorl %esi, %esi xorl %esi, %esi
movq $VSYSCALL_ADDR_vgettimeofday, %rax /* This call works because we directly jump to a system call entry
callq *%rax which preserves all the registers. */
call JUMPTARGET(__gettimeofday)
/* Compute relative timeout. */ /* Compute relative timeout. */
movq 8(%rsp), %rax movq 8(%rsp), %rax