This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.20-525-gca677d3


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  ca677d3c3cd0eba7d1f03092517aea553a0e8569 (commit)
      from  49a9f6ab6407fa38cd74db471678fced967c975e (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://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=ca677d3c3cd0eba7d1f03092517aea553a0e8569

commit ca677d3c3cd0eba7d1f03092517aea553a0e8569
Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
Date:   Fri Jun 27 14:00:18 2014 -0700

    Add x86 32 bit vDSO time function support
    
    Linux 3.15 adds support for clock_gettime, gettimeofday, and time vDSO
    (commit id 37c975545ec63320789962bf307f000f08fabd48).  This patch adds
    GLIBC supports to use such symbol when they are avaiable.
    
    Along with x86 vDSO support, this patch cleanup x86_64 code by moving
    all common code to x86 common folder.  Only init-first.c is different
    between implementations.

diff --git a/ChangeLog b/ChangeLog
index cb510f8..d671b11 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,31 @@
 2015-01-12  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
+	    Stefani Seibold  <stefani@seibold.net>
+
+	* sysdeps/unix/sysv/linux/x86_64/Makefile [$(subdir) = elf]
+	(sysdep_routines): Add dl-vdso here, ...
+	* sysdeps/unix/sysv/linux/x86/Makefile [$(subdir) = elf]
+	(sysdep_routines): ... not here.
+	* sysdeps/unix/sysv/linux/i386/gettimeofday.c: New file: set syscall
+	fallback when vDSO is not presented.
+	* sysdeps/unix/sysv/linux/x86_64/init-first.c (__vdso_clock_gettime):
+	Define with libc_hidden_proto/libc_hidden_data_def definitions.
+	(_libc_vdso_platform_setup): Rename to __vdso_platform_setup.
+	* sysdeps/unix/sysv/linux/i386/init-first.c: New file: likewise.
+	* sysdeps/unix/sysv/linux/i386/time.c: New file: likewise.
+	* sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h: Moved to ...
+	* sysdeps/unix/sysv/linux/x86/libc-vdso.h: ... here.
+	* sysdeps/unix/sysv/linux/x86_64/clock_gettime.c: Move to ...
+	* sysdeps/unix/sysv/linux/x86/clock_gettime.c: ... here.
+	* sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: Move to ...
+	* sysdeps/unix/sysv/linux/x86/gettimeofday.c: ... here.  Also added
+	fallback configurable symbol when vDSO is not available.
+	* sysdeps/unix/sysv/linux/x86_64/time.c: Move to ...
+	* sysdeps/unix/sysv/linux/x86/time.c: ... here.  Also refactored to
+	be able to redefine fallback symbol when vDSO is not available.
+	* sysdeps/unix/sysv/linux/x86_64/timespec_get.c: Move to ...
+	* sysdeps/unix/sysv/linux/x86/timespec_get.c: ... here.
+
+2015-01-12  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
 	* sysdeps/powerpc/nptl/tls.h (tcbhead_t): Add tm_capable field.
 	(TLS_INIT_TP): Add tm_capable initialization.
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/i386/gettimeofday.c
similarity index 56%
copy from sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
copy to sysdeps/unix/sysv/linux/i386/gettimeofday.c
index 03ff875..3e00eb4 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
+++ b/sysdeps/unix/sysv/linux/i386/gettimeofday.c
@@ -1,5 +1,5 @@
-/* Resolve function pointers to VDSO functions.
-   Copyright (C) 2005-2015 Free Software Foundation, Inc.
+/* gettimeofday - get the time.  Linux/i386 version.
+   Copyright (C) 2015 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,16 +16,24 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifndef _LIBC_VDSO_H
-#define _LIBC_VDSO_H
-
-#include <time.h>
 #include <sys/time.h>
 
 #ifdef SHARED
 
-extern long int (*__vdso_clock_gettime) (clockid_t, struct timespec *);
+# include <dl-vdso.h>
+# include <errno.h>
+
+/* If the vDSO is not available we fall back on the syscall.  */
+static int
+__gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
+{
+  return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
+}
+# define GETTIMEOFAY_FALLBACK (void*) (&__gettimeofday_syscall)
+# undef libc_ifunc_hidden_def
+# define libc_ifunc_hidden_def(name)  \
+  libc_ifunc_hidden_def1 (__GI_##name, __gettimeofday_syscall)
 
 #endif
 
-#endif /* _LIBC_VDSO_H */
+#include <sysdeps/unix/sysv/linux/x86/gettimeofday.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/init-first.c b/sysdeps/unix/sysv/linux/i386/init-first.c
similarity index 71%
copy from sysdeps/unix/sysv/linux/x86_64/x32/init-first.c
copy to sysdeps/unix/sysv/linux/i386/init-first.c
index 88369e5..4be65d7 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/init-first.c
+++ b/sysdeps/unix/sysv/linux/i386/init-first.c
@@ -1,5 +1,5 @@
-/* Initialization code run first thing by the ELF startup code.  Linux/x32.
-   Copyright (C) 2012-2015 Free Software Foundation, Inc.
+/* Initialization code run first thing by the ELF startup code.  Linux/i386.
+   Copyright (C) 2015 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
@@ -17,25 +17,36 @@
    <http://www.gnu.org/licenses/>.  */
 
 #ifdef SHARED
+# include <time.h>
+# include <sysdep.h>
 # include <dl-vdso.h>
-# include <bits/libc-vdso.h>
+# include <libc-vdso.h>
 
 long int (*__vdso_clock_gettime) (clockid_t, struct timespec *)
   __attribute__ ((nocommon));
 libc_hidden_proto (__vdso_clock_gettime)
 libc_hidden_data_def (__vdso_clock_gettime)
 
+static long int
+clock_gettime_syscall (clockid_t id, struct timespec *tp)
+{
+  INTERNAL_SYSCALL_DECL (err);
+  return INTERNAL_SYSCALL (clock_gettime, err, 2, id, tp);
+}
+
 static inline void
-_libc_vdso_platform_setup (void)
+__vdso_platform_setup (void)
 {
-  PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
+  PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
 
   void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
+  if (p == NULL)
+    p = clock_gettime_syscall;
   PTR_MANGLE (p);
   __vdso_clock_gettime = p;
 }
 
-# define VDSO_SETUP _libc_vdso_platform_setup
+# define VDSO_SETUP __vdso_platform_setup
 #endif
 
 #include <csu/init-first.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/i386/time.c
similarity index 56%
copy from sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
copy to sysdeps/unix/sysv/linux/i386/time.c
index 03ff875..e8a4e59 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
+++ b/sysdeps/unix/sysv/linux/i386/time.c
@@ -1,5 +1,5 @@
-/* Resolve function pointers to VDSO functions.
-   Copyright (C) 2005-2015 Free Software Foundation, Inc.
+/* time -- Get number of seconds since Epoch.  Linux/i386 version.
+   Copyright (C) 2015 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,16 +16,22 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifndef _LIBC_VDSO_H
-#define _LIBC_VDSO_H
-
-#include <time.h>
-#include <sys/time.h>
-
 #ifdef SHARED
 
-extern long int (*__vdso_clock_gettime) (clockid_t, struct timespec *);
-
+# include <dl-vdso.h>
+# include <errno.h>
+
+/* If the vDSO is not available we fall back on the old vsyscall.  */
+static time_t
+__time_syscall (time_t *t)
+{
+  INTERNAL_SYSCALL_DECL (err);
+  return INTERNAL_SYSCALL (time, err, 1, t);
+}
+# define TIME_FALLBACK  (void*) &__time_syscall
+# undef libc_ifunc_hidden_def
+# define libc_ifunc_hidden_def(name)  \
+  libc_ifunc_hidden_def1 (__GI_##name, __time_syscall)
 #endif
 
-#endif /* _LIBC_VDSO_H */
+#include <sysdeps/unix/sysv/linux/x86/time.c>
diff --git a/sysdeps/unix/sysv/linux/x86/Makefile b/sysdeps/unix/sysv/linux/x86/Makefile
index 0281f87..d6be472 100644
--- a/sysdeps/unix/sysv/linux/x86/Makefile
+++ b/sysdeps/unix/sysv/linux/x86/Makefile
@@ -19,3 +19,7 @@ libpthread-sysdep_routines += init-arch
 libpthread-sysdep_routines += elision-lock elision-unlock elision-timed \
 			      elision-trylock
 endif
+
+ifeq ($(subdir),elf)
+sysdep_routines += dl-vdso
+endif
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/x86/clock_gettime.c
similarity index 57%
copy from sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
copy to sysdeps/unix/sysv/linux/x86/clock_gettime.c
index 03ff875..98ffb01 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
+++ b/sysdeps/unix/sysv/linux/x86/clock_gettime.c
@@ -1,5 +1,5 @@
-/* Resolve function pointers to VDSO functions.
-   Copyright (C) 2005-2015 Free Software Foundation, Inc.
+/* Get the current value of a clock.  Linux/x86 version.
+   Copyright (C) 2015 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,16 +16,19 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifndef _LIBC_VDSO_H
-#define _LIBC_VDSO_H
-
-#include <time.h>
-#include <sys/time.h>
+#include <libc-vdso.h>
 
 #ifdef SHARED
-
-extern long int (*__vdso_clock_gettime) (clockid_t, struct timespec *);
-
+# define SYSCALL_GETTIME(id, tp) \
+  ({ long int (*f) (clockid_t, struct timespec *) = __vdso_clock_gettime; \
+  long int v_ret;							  \
+  PTR_DEMANGLE (f);							  \
+  v_ret = (*f) (id, tp);						  \
+  if (INTERNAL_SYSCALL_ERROR_P (v_ret, )) {				  \
+    __set_errno (INTERNAL_SYSCALL_ERRNO (v_ret, ));			  \
+    v_ret = -1;								  \
+  }									  \
+  v_ret; })
 #endif
 
-#endif /* _LIBC_VDSO_H */
+#include <sysdeps/unix/sysv/linux/clock_gettime.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c b/sysdeps/unix/sysv/linux/x86/gettimeofday.c
similarity index 74%
copy from sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
copy to sysdeps/unix/sysv/linux/x86/gettimeofday.c
index 866d9c1..c820fd7 100644
--- a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
+++ b/sysdeps/unix/sysv/linux/x86/gettimeofday.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 2002-2015 Free Software Foundation, Inc.
+/* gettimeofday - get the time.  Linux/x86 version.
+   Copyright (C) 2015 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
@@ -21,26 +22,20 @@
 
 # include <dl-vdso.h>
 
-# define VSYSCALL_ADDR_vgettimeofday	0xffffffffff600000ul
-
 void *gettimeofday_ifunc (void) __asm__ ("__gettimeofday");
 
 void *
 gettimeofday_ifunc (void)
 {
-  PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
+  PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
 
   /* If the vDSO is not available we fall back on the old vsyscall.  */
   return (_dl_vdso_vsym ("__vdso_gettimeofday", &linux26)
-	  ?: (void *) VSYSCALL_ADDR_vgettimeofday);
+	  ?: GETTIMEOFAY_FALLBACK);
 }
 asm (".type __gettimeofday, %gnu_indirect_function");
 
-/* This is doing "libc_hidden_def (__gettimeofday)" but the compiler won't
-   let us do it in C because it doesn't know we're defining __gettimeofday
-   here in this file.  */
-asm (".globl __GI___gettimeofday\n"
-     "__GI___gettimeofday = __gettimeofday");
+libc_ifunc_hidden_def(__gettimeofday)
 
 #else
 
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/x86/libc-vdso.h
similarity index 100%
copy from sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
copy to sysdeps/unix/sysv/linux/x86/libc-vdso.h
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/x86/time.c
similarity index 59%
copy from sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
copy to sysdeps/unix/sysv/linux/x86/time.c
index 03ff875..1ab9248 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
+++ b/sysdeps/unix/sysv/linux/x86/time.c
@@ -1,5 +1,5 @@
-/* Resolve function pointers to VDSO functions.
-   Copyright (C) 2005-2015 Free Software Foundation, Inc.
+/* time -- Get number of seconds since Epoch.  Linux/x86 version.
+   Copyright (C) 2015 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,16 +16,34 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifndef _LIBC_VDSO_H
-#define _LIBC_VDSO_H
-
 #include <time.h>
-#include <sys/time.h>
 
 #ifdef SHARED
 
-extern long int (*__vdso_clock_gettime) (clockid_t, struct timespec *);
+#include <dl-vdso.h>
 
-#endif
+void *time_ifunc (void) __asm__ ("time");
+
+void *
+time_ifunc (void)
+{
+  PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
+
+  return _dl_vdso_vsym ("__vdso_time", &linux26) ?: TIME_FALLBACK;
+}
+asm (".type time, %gnu_indirect_function");
+
+libc_ifunc_hidden_def(time)
 
-#endif /* _LIBC_VDSO_H */
+#else
+
+# include <sysdep.h>
+
+time_t
+time (time_t *t)
+{
+  INTERNAL_SYSCALL_DECL (err);
+  return INTERNAL_SYSCALL (time, err, 1, t);
+}
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/x86/timespec_get.c
similarity index 66%
rename from sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
rename to sysdeps/unix/sysv/linux/x86/timespec_get.c
index 03ff875..b21efce 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h
+++ b/sysdeps/unix/sysv/linux/x86/timespec_get.c
@@ -1,5 +1,6 @@
-/* Resolve function pointers to VDSO functions.
-   Copyright (C) 2005-2015 Free Software Foundation, Inc.
+/* timespec_get -- returns the calendar time based on a given time base.
+   Linux/x86 version.
+   Copyright (C) 2015 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,16 +17,13 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifndef _LIBC_VDSO_H
-#define _LIBC_VDSO_H
-
-#include <time.h>
-#include <sys/time.h>
+#include <libc-vdso.h>
 
 #ifdef SHARED
-
-extern long int (*__vdso_clock_gettime) (clockid_t, struct timespec *);
-
+# define INTERNAL_GETTIME(id, tp) \
+  ({ long int (*f) (clockid_t, struct timespec *) = __vdso_clock_gettime; \
+  PTR_DEMANGLE (f);							  \
+  (*f) (id, tp); })
 #endif
 
-#endif /* _LIBC_VDSO_H */
+#include <sysdeps/unix/sysv/linux/timespec_get.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/Makefile b/sysdeps/unix/sysv/linux/x86_64/Makefile
index d6a9d36..9b82155 100644
--- a/sysdeps/unix/sysv/linux/x86_64/Makefile
+++ b/sysdeps/unix/sysv/linux/x86_64/Makefile
@@ -13,7 +13,3 @@ endif
 ifeq ($(subdir),misc)
 gen-as-const-headers += sigaltstack-offsets.sym
 endif
-
-ifeq ($(subdir),elf)
-sysdep_routines += dl-vdso
-endif
diff --git a/sysdeps/unix/sysv/linux/x86_64/clock_gettime.c b/sysdeps/unix/sysv/linux/x86_64/clock_gettime.c
deleted file mode 100644
index f712110..0000000
--- a/sysdeps/unix/sysv/linux/x86_64/clock_gettime.c
+++ /dev/null
@@ -1,20 +0,0 @@
-#include "bits/libc-vdso.h"
-
-#ifdef SHARED
-# define SYSCALL_GETTIME(id, tp) \
-  ({ long int (*f) (clockid_t, struct timespec *) = __vdso_clock_gettime; \
-  long int v_ret;							  \
-  PTR_DEMANGLE (f);							  \
-  v_ret = f (id, tp);							  \
-  if (INTERNAL_SYSCALL_ERROR_P (v_ret, )) {				  \
-    __set_errno (INTERNAL_SYSCALL_ERRNO (v_ret, ));			  \
-    v_ret = -1;								  \
-  }									  \
-  v_ret; })
-# define INTERNAL_GETTIME(id, tp) \
-  ({ long int (*f) (clockid_t, struct timespec *) = __vdso_clock_gettime; \
-  PTR_DEMANGLE (f);							  \
-  f (id, tp); })
-#endif
-
-#include "../clock_gettime.c"
diff --git a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
index 866d9c1..daa14de 100644
--- a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
+++ b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
@@ -18,42 +18,9 @@
 #include <sys/time.h>
 
 #ifdef SHARED
-
-# include <dl-vdso.h>
-
+/* If the vDSO is not available we fall back on the old vsyscall.  */
 # define VSYSCALL_ADDR_vgettimeofday	0xffffffffff600000ul
-
-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 ("__vdso_gettimeofday", &linux26)
-	  ?: (void *) VSYSCALL_ADDR_vgettimeofday);
-}
-asm (".type __gettimeofday, %gnu_indirect_function");
-
-/* This is doing "libc_hidden_def (__gettimeofday)" but the compiler won't
-   let us do it in C because it doesn't know we're defining __gettimeofday
-   here in this file.  */
-asm (".globl __GI___gettimeofday\n"
-     "__GI___gettimeofday = __gettimeofday");
-
-#else
-
-# include <sysdep.h>
-# include <errno.h>
-
-int
-__gettimeofday (struct timeval *tv, struct timezone *tz)
-{
-  return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
-}
-libc_hidden_def (__gettimeofday)
-
+# define GETTIMEOFAY_FALLBACK  (void*)VSYSCALL_ADDR_vgettimeofday
 #endif
-weak_alias (__gettimeofday, gettimeofday)
-libc_hidden_weak (gettimeofday)
+
+#include <sysdeps/unix/sysv/linux/x86/gettimeofday.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/init-first.c b/sysdeps/unix/sysv/linux/x86_64/init-first.c
index e3bc712..36f9afc 100644
--- a/sysdeps/unix/sysv/linux/x86_64/init-first.c
+++ b/sysdeps/unix/sysv/linux/x86_64/init-first.c
@@ -20,20 +20,20 @@
 # include <time.h>
 # include <sysdep.h>
 # include <dl-vdso.h>
-# include <bits/libc-vdso.h>
+# include <libc-vdso.h>
 
 long int (*__vdso_clock_gettime) (clockid_t, struct timespec *)
   __attribute__ ((nocommon));
-strong_alias (__vdso_clock_gettime, __GI___vdso_clock_gettime attribute_hidden)
+libc_hidden_proto (__vdso_clock_gettime)
+libc_hidden_data_def (__vdso_clock_gettime)
 
 long int (*__vdso_getcpu) (unsigned *, unsigned *, void *) attribute_hidden;
 
-
 extern long int __syscall_clock_gettime (clockid_t, struct timespec *);
 
 
 static inline void
-_libc_vdso_platform_setup (void)
+__vdso_platform_setup (void)
 {
   PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
 
@@ -41,7 +41,7 @@ _libc_vdso_platform_setup (void)
   if (p == NULL)
     p = __syscall_clock_gettime;
   PTR_MANGLE (p);
-  __GI___vdso_clock_gettime = p;
+  __vdso_clock_gettime = p;
 
   p = _dl_vdso_vsym ("__vdso_getcpu", &linux26);
   /* If the vDSO is not available we fall back on the old vsyscall.  */
@@ -52,7 +52,7 @@ _libc_vdso_platform_setup (void)
   __vdso_getcpu = p;
 }
 
-# define VDSO_SETUP _libc_vdso_platform_setup
+# define VDSO_SETUP __vdso_platform_setup
 #endif
 
 #include <csu/init-first.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/time.c b/sysdeps/unix/sysv/linux/x86_64/time.c
index c00b5be..6ceb819 100644
--- a/sysdeps/unix/sysv/linux/x86_64/time.c
+++ b/sysdeps/unix/sysv/linux/x86_64/time.c
@@ -16,45 +16,9 @@
    <http://www.gnu.org/licenses/>.  */
 
 #ifdef SHARED
-/* Redefine time so that the compiler won't complain about the type
-   mismatch with the IFUNC selector in strong_alias, below.  */
-#undef time
-#define time __redirect_time
-#include <time.h>
-
-#include <dl-vdso.h>
-
+/* If the vDSO is not available we fall back on the old vsyscall.  */
 #define VSYSCALL_ADDR_vtime	0xffffffffff600400
-
-/* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
-   ifunc symbol properly.  */
-extern __typeof (__redirect_time) __libc_time;
-void *time_ifunc (void) __asm__ ("__libc_time");
-
-void *
-time_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 ("__vdso_time", &linux26) ?: (void *) VSYSCALL_ADDR_vtime;
-}
-__asm (".type __libc_time, %gnu_indirect_function");
-
-#undef time
-strong_alias (__libc_time, time)
-libc_hidden_ver (__libc_time, time)
-
-#else
-
-# include <time.h>
-# include <sysdep.h>
-
-time_t
-time (time_t *t)
-{
-  INTERNAL_SYSCALL_DECL (err);
-  return INTERNAL_SYSCALL (time, err, 1, t);
-}
-
+#define TIME_FALLBACK           (void*)VSYSCALL_ADDR_vtime
 #endif
+
+#include <sysdeps/unix/sysv/linux/x86/time.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/timespec_get.c b/sysdeps/unix/sysv/linux/x86_64/timespec_get.c
deleted file mode 100644
index cb26068..0000000
--- a/sysdeps/unix/sysv/linux/x86_64/timespec_get.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include "bits/libc-vdso.h"
-
-#ifdef SHARED
-# define INTERNAL_GETTIME(id, tp) \
-  ({ long int (*f) (clockid_t, struct timespec *) = __vdso_clock_gettime; \
-  PTR_DEMANGLE (f);							  \
-  f (id, tp); })
-#endif
-
-#include "../timespec_get.c"
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/init-first.c b/sysdeps/unix/sysv/linux/x86_64/x32/init-first.c
index 88369e5..93e0508 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/init-first.c
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/init-first.c
@@ -18,7 +18,7 @@
 
 #ifdef SHARED
 # include <dl-vdso.h>
-# include <bits/libc-vdso.h>
+# include <libc-vdso.h>
 
 long int (*__vdso_clock_gettime) (clockid_t, struct timespec *)
   __attribute__ ((nocommon));

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   27 ++++++++++
 sysdeps/unix/sysv/linux/i386/gettimeofday.c        |   39 ++++++++++++++
 sysdeps/unix/sysv/linux/i386/init-first.c          |   52 +++++++++++++++++++
 sysdeps/unix/sysv/linux/i386/time.c                |   37 +++++++++++++
 sysdeps/unix/sysv/linux/x86/Makefile               |    4 ++
 sysdeps/unix/sysv/linux/x86/clock_gettime.c        |   34 ++++++++++++
 sysdeps/unix/sysv/linux/x86/gettimeofday.c         |   54 ++++++++++++++++++++
 .../sysv/linux/{x86_64/bits => x86}/libc-vdso.h    |    0
 sysdeps/unix/sysv/linux/x86/time.c                 |   49 ++++++++++++++++++
 sysdeps/unix/sysv/linux/x86/timespec_get.c         |   29 +++++++++++
 sysdeps/unix/sysv/linux/x86_64/Makefile            |    4 --
 sysdeps/unix/sysv/linux/x86_64/clock_gettime.c     |   20 -------
 sysdeps/unix/sysv/linux/x86_64/gettimeofday.c      |   41 ++-------------
 sysdeps/unix/sysv/linux/x86_64/init-first.c        |   12 ++--
 sysdeps/unix/sysv/linux/x86_64/time.c              |   44 ++--------------
 sysdeps/unix/sysv/linux/x86_64/timespec_get.c      |   10 ----
 sysdeps/unix/sysv/linux/x86_64/x32/init-first.c    |    2 +-
 17 files changed, 340 insertions(+), 118 deletions(-)
 create mode 100644 sysdeps/unix/sysv/linux/i386/gettimeofday.c
 create mode 100644 sysdeps/unix/sysv/linux/i386/init-first.c
 create mode 100644 sysdeps/unix/sysv/linux/i386/time.c
 create mode 100644 sysdeps/unix/sysv/linux/x86/clock_gettime.c
 create mode 100644 sysdeps/unix/sysv/linux/x86/gettimeofday.c
 rename sysdeps/unix/sysv/linux/{x86_64/bits => x86}/libc-vdso.h (100%)
 create mode 100644 sysdeps/unix/sysv/linux/x86/time.c
 create mode 100644 sysdeps/unix/sysv/linux/x86/timespec_get.c
 delete mode 100644 sysdeps/unix/sysv/linux/x86_64/clock_gettime.c
 delete mode 100644 sysdeps/unix/sysv/linux/x86_64/timespec_get.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]