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.21-457-g7cbeaba


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  7cbeabac0fb28e24c99aaa5085e613ea543a2346 (commit)
      from  2f44ee08dbf51d39ef5692699cc35f93faf64db1 (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=7cbeabac0fb28e24c99aaa5085e613ea543a2346

commit 7cbeabac0fb28e24c99aaa5085e613ea543a2346
Author: Adhemerval Zanella <adhemerval.zanella@linaro.com>
Date:   Thu Apr 23 09:17:42 2015 -0300

    x86: Remove vsyscall usage
    
    This patch removes the vsyscall usage for x86_64 port.  As indicated
    by kernel code comments [1], vsyscalls are a legacy ABI and its concept
    is problematic:
    
    - It interferes with ASLR.
    - It's awkward to write code that lives in kernel addresses but is
      callable by userspace at fixed addresses.
    - The whole concept is impossible for 32-bit compat userspace.
    - UML cannot easily virtualize a vsyscall.
    
    The VDSO is a better approach for such functionality.  Tested on i686,
    x86_64, and x32.
    
    	* sysdeps/unix/sysv/linux/i386/gettimeofday.c
    	(__gettimeofday_syscall): Remove vsyscall fallback.
    	* sysdeps/unix/sysv/linux/i386/time.c (__time_syscall): Likewise.
    	* sysdeps/unix/sysv/linux/x86/gettimeofday.c (__gettimeofday_syscall):
    	Add syscall fallback function.
    	(gettimeofday_ifunc): Use __gettimeofday_syscall as fallback mechanism
    	if vDSO is not present.
    	* sysdeps/unix/sysv/linux/x86/time.c (__time_syscall): Add syscall
    	fallback function.
    	(time_ifunc): Use __time_syscall as fallback mechanism if vDSO is not
    	present.
    	* sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: Remove file.
    	* sysdeps/unix/sysv/linux/x86_64/time.c: Likewise.
    
    [1] arch/x86/kernel/vsyscall_64.c

diff --git a/ChangeLog b/ChangeLog
index 2501f45..5f745e7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2015-06-09  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+	* sysdeps/unix/sysv/linux/i386/gettimeofday.c
+	(__gettimeofday_syscall): Remove vsyscall fallback.
+	* sysdeps/unix/sysv/linux/i386/time.c (__time_syscall): Likewise.
+	* sysdeps/unix/sysv/linux/x86/gettimeofday.c (__gettimeofday_syscall):
+	Add syscall fallback function.
+	(gettimeofday_ifunc): Use __gettimeofday_syscall as fallback mechanism
+	if vDSO is not present.
+	* sysdeps/unix/sysv/linux/x86/time.c (__time_syscall): Add syscall
+	fallback function.
+	(time_ifunc): Use __time_syscall as fallback mechanism if vDSO is not
+	present.
+	* sysdeps/unix/sysv/linux/x86_64/gettimeofday.c: Remove file.
+	* sysdeps/unix/sysv/linux/x86_64/time.c: Likewise.
+
 2015-06-09  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #18497]
diff --git a/sysdeps/unix/sysv/linux/i386/gettimeofday.c b/sysdeps/unix/sysv/linux/i386/gettimeofday.c
index 3e00eb4..fdb0fab 100644
--- a/sysdeps/unix/sysv/linux/i386/gettimeofday.c
+++ b/sysdeps/unix/sysv/linux/i386/gettimeofday.c
@@ -20,16 +20,6 @@
 
 #ifdef SHARED
 
-# 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)
diff --git a/sysdeps/unix/sysv/linux/i386/time.c b/sysdeps/unix/sysv/linux/i386/time.c
index e8a4e59..66b9a6c 100644
--- a/sysdeps/unix/sysv/linux/i386/time.c
+++ b/sysdeps/unix/sysv/linux/i386/time.c
@@ -18,17 +18,6 @@
 
 #ifdef SHARED
 
-# 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)
diff --git a/sysdeps/unix/sysv/linux/x86/gettimeofday.c b/sysdeps/unix/sysv/linux/x86/gettimeofday.c
index c820fd7..440cb02 100644
--- a/sysdeps/unix/sysv/linux/x86/gettimeofday.c
+++ b/sysdeps/unix/sysv/linux/x86/gettimeofday.c
@@ -21,6 +21,13 @@
 #ifdef SHARED
 
 # include <dl-vdso.h>
+# include <errno.h>
+
+static int
+__gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
+{
+  return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
+}
 
 void *gettimeofday_ifunc (void) __asm__ ("__gettimeofday");
 
@@ -29,9 +36,9 @@ gettimeofday_ifunc (void)
 {
   PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
 
-  /* If the vDSO is not available we fall back on the old vsyscall.  */
+  /* If the vDSO is not available we fall back to syscall.  */
   return (_dl_vdso_vsym ("__vdso_gettimeofday", &linux26)
-	  ?: GETTIMEOFAY_FALLBACK);
+	  ?: (void*) (&__gettimeofday_syscall));
 }
 asm (".type __gettimeofday, %gnu_indirect_function");
 
diff --git a/sysdeps/unix/sysv/linux/x86/time.c b/sysdeps/unix/sysv/linux/x86/time.c
index 1ab9248..ebf092a 100644
--- a/sysdeps/unix/sysv/linux/x86/time.c
+++ b/sysdeps/unix/sysv/linux/x86/time.c
@@ -21,6 +21,14 @@
 #ifdef SHARED
 
 #include <dl-vdso.h>
+#include <errno.h>
+
+static time_t
+__time_syscall (time_t *t)
+{
+  INTERNAL_SYSCALL_DECL (err);
+  return INTERNAL_SYSCALL (time, err, 1, t);
+}
 
 void *time_ifunc (void) __asm__ ("time");
 
@@ -29,7 +37,9 @@ time_ifunc (void)
 {
   PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
 
-  return _dl_vdso_vsym ("__vdso_time", &linux26) ?: TIME_FALLBACK;
+/* If the vDSO is not available we fall back on the syscall.  */
+  return _dl_vdso_vsym ("__vdso_time", &linux26)
+			?: (void*) &__time_syscall;
 }
 asm (".type time, %gnu_indirect_function");
 
diff --git a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c b/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
deleted file mode 100644
index daa14de..0000000
--- a/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright (C) 2002-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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sys/time.h>
-
-#ifdef SHARED
-/* If the vDSO is not available we fall back on the old vsyscall.  */
-# define VSYSCALL_ADDR_vgettimeofday	0xffffffffff600000ul
-# define GETTIMEOFAY_FALLBACK  (void*)VSYSCALL_ADDR_vgettimeofday
-#endif
-
-#include <sysdeps/unix/sysv/linux/x86/gettimeofday.c>
diff --git a/sysdeps/unix/sysv/linux/x86_64/time.c b/sysdeps/unix/sysv/linux/x86_64/time.c
deleted file mode 100644
index 6ceb819..0000000
--- a/sysdeps/unix/sysv/linux/x86_64/time.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright (C) 2001-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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifdef SHARED
-/* If the vDSO is not available we fall back on the old vsyscall.  */
-#define VSYSCALL_ADDR_vtime	0xffffffffff600400
-#define TIME_FALLBACK           (void*)VSYSCALL_ADDR_vtime
-#endif
-
-#include <sysdeps/unix/sysv/linux/x86/time.c>

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

Summary of changes:
 ChangeLog                                     |   16 +++++++++++++++
 sysdeps/unix/sysv/linux/i386/gettimeofday.c   |   10 ---------
 sysdeps/unix/sysv/linux/i386/time.c           |   11 ----------
 sysdeps/unix/sysv/linux/x86/gettimeofday.c    |   11 ++++++++-
 sysdeps/unix/sysv/linux/x86/time.c            |   12 ++++++++++-
 sysdeps/unix/sysv/linux/x86_64/gettimeofday.c |   26 -------------------------
 sysdeps/unix/sysv/linux/x86_64/time.c         |   24 -----------------------
 7 files changed, 36 insertions(+), 74 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
 delete mode 100644 sysdeps/unix/sysv/linux/x86_64/time.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]