This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.14-197-g91b392a
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 21 Aug 2011 17:53:23 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.14-197-g91b392a
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 91b392a4bab0c2dc90e7e3ff914dec20b97adca8 (commit)
from e315850c088ad13a160132a6fcec9d7564dd3c08 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=91b392a4bab0c2dc90e7e3ff914dec20b97adca8
commit 91b392a4bab0c2dc90e7e3ff914dec20b97adca8
Author: Ulrich Drepper <drepper@gmail.com>
Date: Sun Aug 21 13:52:28 2011 -0400
Use ifuncs for time and gettimeofday on x86-64
diff --git a/ChangeLog b/ChangeLog
index fadf296..0161040 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2011-08-21 Ulrich Drepper <drepper@gmail.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/gettimeofday.S: Removed.
+ * sysdeps/unix/sysv/linux/x86_64/time.S: Removed.
+ * sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: New file.
+ * sysdeps/unix/sysv/linux/x86_64/time.c: New file.
+ * sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h: Remove declaration
+ of __vdso_gettimeofday.
+ * sysdeps/unix/sysv/linux/x86_64/init-first.c: Remove definition of
+ __vdso_gettimeofday and __vdso_time. Define __vdso_getcpu with
+ attribute_hidden.
+ (_libc_vdso_platform_setup): Remove initialization of
+ __vdso_gettimeofday and __vdso_time.
+
2011-08-20 Ulrich Drepper <drepper@gmail.com>
* nss/nss_files/files-alias.c (get_next_alias): Use feof_unlocked
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
index d7123c9..f9bf84e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
+++ b/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
@@ -1,5 +1,5 @@
/* Resolve function pointers to VDSO functions.
- Copyright (C) 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2007, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -25,9 +25,6 @@
#ifdef SHARED
-extern long int (*__vdso_gettimeofday) (struct timeval *, void *)
- attribute_hidden;
-
extern long int (*__vdso_clock_gettime) (clockid_t, struct timespec *);
#endif
diff --git a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
similarity index 56%
rename from sysdeps/unix/sysv/linux/x86_64/gettimeofday.S
rename to sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
index f618e73..1a773d6 100644
--- a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S
+++ b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2007, 2011 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -16,34 +16,34 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <sysdep.h>
-#define _ERRNO_H 1
-#include <bits/errno.h>
+#include <dl-vdso.h>
-/* For the calculation see asm/vsyscall.h. */
-#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000
+
+#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000ul
-ENTRY (__gettimeofday)
- /* Align stack. */
- sub $0x8, %rsp
- cfi_adjust_cfa_offset(8)
#ifdef SHARED
- movq __vdso_gettimeofday(%rip), %rax
- PTR_DEMANGLE (%rax)
+void *gettimeofday_ifunc (void) __asm__ ("__gettimeofday");
+
+void *
+gettimeofday_ifunc (void)
+{
+ PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
+
+ /* If the vDSO is not available we fall back on the old vsyscall. */
+ return (_dl_vdso_vsym ("gettimeofday", &linux26)
+ ?: (void *) VSYSCALL_ADDR_vgettimeofday);
+}
+__asm (".type __gettimeofday, %gnu_indirect_function");
#else
- movq $VSYSCALL_ADDR_vgettimeofday, %rax
-#endif
- callq *%rax
- /* Check error return. */
- cmpl $-4095, %eax
- jae SYSCALL_ERROR_LABEL
+# include <sys/time.h>
-L(pseudo_end):
- add $0x8, %rsp
- cfi_adjust_cfa_offset(-8)
- ret
-PSEUDO_END(__gettimeofday)
+int
+__gettimeofday (struct timeval *tv, struct timezone *tz)
+{
+ return ((int (*) (struct timeval *, struct timezone *)) VSYSCALL_ADDR_vgettimeofday) (tv, tz);
+}
+#endif
-strong_alias (__gettimeofday, __gettimeofday_internal)
weak_alias (__gettimeofday, gettimeofday)
+strong_alias (__gettimeofday, __gettimeofday_internal)
diff --git a/sysdeps/unix/sysv/linux/x86_64/init-first.c b/sysdeps/unix/sysv/linux/x86_64/init-first.c
index e676f62..25cf08b 100644
--- a/sysdeps/unix/sysv/linux/x86_64/init-first.c
+++ b/sysdeps/unix/sysv/linux/x86_64/init-first.c
@@ -20,15 +20,11 @@
# include <dl-vdso.h>
# include <bits/libc-vdso.h>
-long int (*__vdso_gettimeofday) (struct timeval *, void *) attribute_hidden;
-
long int (*__vdso_clock_gettime) (clockid_t, struct timespec *)
__attribute__ ((nocommon));
strong_alias (__vdso_clock_gettime, __GI___vdso_clock_gettime attribute_hidden)
-long int (*__vdso_getcpu) (unsigned *, unsigned *, void *);
-
-long int (*__vdso_time) (time_t *) attribute_hidden;
+long int (*__vdso_getcpu) (unsigned *, unsigned *, void *) attribute_hidden;
static inline void
@@ -36,15 +32,7 @@ _libc_vdso_platform_setup (void)
{
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
- void *p = _dl_vdso_vsym ("gettimeofday", &linux26);
- /* If the vDSO is not available we fall back on the old vsyscall. */
-#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000ul
- if (p == NULL)
- p = (void *) VSYSCALL_ADDR_vgettimeofday;
- PTR_MANGLE (p);
- __vdso_gettimeofday = p;
-
- p = _dl_vdso_vsym ("clock_gettime", &linux26);
+ void *p = _dl_vdso_vsym ("clock_gettime", &linux26);
PTR_MANGLE (p);
__GI___vdso_clock_gettime = p;
@@ -55,14 +43,6 @@ _libc_vdso_platform_setup (void)
p = (void *) VSYSCALL_ADDR_vgetcpu;
PTR_MANGLE (p);
__vdso_getcpu = p;
-
- p = _dl_vdso_vsym ("time", &linux26);
- /* If the vDSO is not available we fall back on the old vsyscall. */
-#define VSYSCALL_ADDR_vtime 0xffffffffff600400
- if (p == NULL)
- p = (void *) VSYSCALL_ADDR_vtime;
- PTR_MANGLE (p);
- __vdso_time = p;
}
# define VDSO_SETUP _libc_vdso_platform_setup
diff --git a/sysdeps/unix/sysv/linux/x86_64/time.S b/sysdeps/unix/sysv/linux/x86_64/time.c
similarity index 64%
rename from sysdeps/unix/sysv/linux/x86_64/time.S
rename to sysdeps/unix/sysv/linux/x86_64/time.c
index 66d7498..698d561 100644
--- a/sysdeps/unix/sysv/linux/x86_64/time.S
+++ b/sysdeps/unix/sysv/linux/x86_64/time.c
@@ -16,32 +16,32 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#include <sysdep.h>
-#define _ERRNO_H 1
-#include <bits/errno.h>
+#include <dl-vdso.h>
+
-/* For the calculation see asm/vsyscall.h. */
#define VSYSCALL_ADDR_vtime 0xffffffffff600400
-/* Return the current time as a `time_t' and also put it in *T if T is
- not NULL. Time is represented as seconds from Jan 1 00:00:00 1970. */
+#ifdef SHARED
+void *time_ifunc (void) __asm__ ("time");
-ENTRY (time)
- /* Align stack. */
- sub $0x8, %rsp
- cfi_adjust_cfa_offset(8)
+void *
+time_ifunc (void)
+{
+ PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
-#ifdef SHARED
- movq __vdso_time(%rip), %rax
- PTR_DEMANGLE (%rax)
+ /* If the vDSO is not available we fall back on the old vsyscall. */
+ return _dl_vdso_vsym ("time", &linux26) ?: (void *) VSYSCALL_ADDR_vtime;
+}
+__asm (".type time, %gnu_indirect_function");
#else
- movq $VSYSCALL_ADDR_vtime, %rax
+# include <time.h>
+
+time_t
+time (time_t *t)
+{
+ return ((time_t (*) (time_t *)) VSYSCALL_ADDR_vtime) (t);
+}
#endif
- callq *%rax
- add $0x8, %rsp
- cfi_adjust_cfa_offset(-8)
- ret
-PSEUDO_END_NOERRNO(time)
-libc_hidden_def (time)
+strong_alias (time, __GI_time)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 14 ++++++
sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h | 5 +--
.../x86_64/{gettimeofday.S => gettimeofday.c} | 48 ++++++++++----------
sysdeps/unix/sysv/linux/x86_64/init-first.c | 24 +---------
sysdeps/unix/sysv/linux/x86_64/{time.S => time.c} | 40 ++++++++--------
5 files changed, 61 insertions(+), 70 deletions(-)
rename sysdeps/unix/sysv/linux/x86_64/{gettimeofday.S => gettimeofday.c} (56%)
rename sysdeps/unix/sysv/linux/x86_64/{time.S => time.c} (64%)
hooks/post-receive
--
GNU C Library master sources