From 85a0930b022ac78abb1d1e3b6f3be6e1b934f56e Mon Sep 17 00:00:00 2001 From: Carlos O'Donell Date: Feb 12 2015 05:22:30 +0000 Subject: Manually sync form upstrem master: - Add back x86 vDSO support. - Fix rtkaio build to reference clock_* functions from libc. --- diff --git a/glibc-revert-x86-vdso.patch b/glibc-revert-x86-vdso.patch deleted file mode 100644 index d16baab..0000000 --- a/glibc-revert-x86-vdso.patch +++ /dev/null @@ -1,655 +0,0 @@ -commit ca677d3c3cd0eba7d1f03092517aea553a0e8569 -Author: Adhemerval Zanella -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/sysdeps/unix/sysv/linux/i386/gettimeofday.c b/sysdeps/unix/sysv/linux/i386/gettimeofday.c -new file mode 100644 -index 0000000..3e00eb4 ---- /dev/null -+++ b/sysdeps/unix/sysv/linux/i386/gettimeofday.c -@@ -0,0 +1,39 @@ -+/* 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 -+ 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 -+ . */ -+ -+#include -+ -+#ifdef SHARED -+ -+# include -+# include -+ -+/* 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 -+ -+#include -diff --git a/sysdeps/unix/sysv/linux/i386/init-first.c b/sysdeps/unix/sysv/linux/i386/init-first.c -new file mode 100644 -index 0000000..4be65d7 ---- /dev/null -+++ b/sysdeps/unix/sysv/linux/i386/init-first.c -@@ -0,0 +1,52 @@ -+/* 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 -+ 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 -+ . */ -+ -+#ifdef SHARED -+# include -+# include -+# include -+# include -+ -+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 -+__vdso_platform_setup (void) -+{ -+ 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 __vdso_platform_setup -+#endif -+ -+#include -diff --git a/sysdeps/unix/sysv/linux/i386/time.c b/sysdeps/unix/sysv/linux/i386/time.c -new file mode 100644 -index 0000000..e8a4e59 ---- /dev/null -+++ b/sysdeps/unix/sysv/linux/i386/time.c -@@ -0,0 +1,37 @@ -+/* 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 -+ 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 -+ . */ -+ -+#ifdef SHARED -+ -+# include -+# include -+ -+/* 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 -+ -+#include -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/clock_gettime.c b/sysdeps/unix/sysv/linux/x86/clock_gettime.c -new file mode 100644 -index 0000000..98ffb01 ---- /dev/null -+++ b/sysdeps/unix/sysv/linux/x86/clock_gettime.c -@@ -0,0 +1,34 @@ -+/* 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 -+ 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 -+ . */ -+ -+#include -+ -+#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; }) -+#endif -+ -+#include -diff --git a/sysdeps/unix/sysv/linux/x86/gettimeofday.c b/sysdeps/unix/sysv/linux/x86/gettimeofday.c -new file mode 100644 -index 0000000..c820fd7 ---- /dev/null -+++ b/sysdeps/unix/sysv/linux/x86/gettimeofday.c -@@ -0,0 +1,54 @@ -+/* 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 -+ 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 -+ . */ -+ -+#include -+ -+#ifdef SHARED -+ -+# include -+ -+void *gettimeofday_ifunc (void) __asm__ ("__gettimeofday"); -+ -+void * -+gettimeofday_ifunc (void) -+{ -+ 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) -+ ?: GETTIMEOFAY_FALLBACK); -+} -+asm (".type __gettimeofday, %gnu_indirect_function"); -+ -+libc_ifunc_hidden_def(__gettimeofday) -+ -+#else -+ -+# include -+# include -+ -+int -+__gettimeofday (struct timeval *tv, struct timezone *tz) -+{ -+ return INLINE_SYSCALL (gettimeofday, 2, tv, tz); -+} -+libc_hidden_def (__gettimeofday) -+ -+#endif -+weak_alias (__gettimeofday, gettimeofday) -+libc_hidden_weak (gettimeofday) -diff --git a/sysdeps/unix/sysv/linux/x86/libc-vdso.h b/sysdeps/unix/sysv/linux/x86/libc-vdso.h -new file mode 100644 -index 0000000..03ff875 ---- /dev/null -+++ b/sysdeps/unix/sysv/linux/x86/libc-vdso.h -@@ -0,0 +1,31 @@ -+/* Resolve function pointers to VDSO functions. -+ Copyright (C) 2005-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 -+ . */ -+ -+#ifndef _LIBC_VDSO_H -+#define _LIBC_VDSO_H -+ -+#include -+#include -+ -+#ifdef SHARED -+ -+extern long int (*__vdso_clock_gettime) (clockid_t, struct timespec *); -+ -+#endif -+ -+#endif /* _LIBC_VDSO_H */ -diff --git a/sysdeps/unix/sysv/linux/x86/time.c b/sysdeps/unix/sysv/linux/x86/time.c -new file mode 100644 -index 0000000..1ab9248 ---- /dev/null -+++ b/sysdeps/unix/sysv/linux/x86/time.c -@@ -0,0 +1,49 @@ -+/* 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 -+ 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 -+ . */ -+ -+#include -+ -+#ifdef SHARED -+ -+#include -+ -+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) -+ -+#else -+ -+# include -+ -+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/timespec_get.c b/sysdeps/unix/sysv/linux/x86/timespec_get.c -new file mode 100644 -index 0000000..b21efce ---- /dev/null -+++ b/sysdeps/unix/sysv/linux/x86/timespec_get.c -@@ -0,0 +1,29 @@ -+/* 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 -+ 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 -+ . */ -+ -+#include -+ -+#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 -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/bits/libc-vdso.h b/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h -deleted file mode 100644 -index 03ff875..0000000 ---- a/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h -+++ /dev/null -@@ -1,31 +0,0 @@ --/* Resolve function pointers to VDSO functions. -- Copyright (C) 2005-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 -- . */ -- --#ifndef _LIBC_VDSO_H --#define _LIBC_VDSO_H -- --#include --#include -- --#ifdef SHARED -- --extern long int (*__vdso_clock_gettime) (clockid_t, struct timespec *); -- --#endif -- --#endif /* _LIBC_VDSO_H */ -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 - - #ifdef SHARED -- --# include -- -+/* 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 --# include -- --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 -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 - # include - # include --# include -+# include - - 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 -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 @@ - . */ - - #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 -- --#include -- -+/* 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 --# include -- --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 -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 --# include -+# include - - long int (*__vdso_clock_gettime) (clockid_t, struct timespec *) - __attribute__ ((nocommon)); diff --git a/glibc-rtkaio-clock.patch b/glibc-rtkaio-clock.patch new file mode 100644 index 0000000..560380f --- /dev/null +++ b/glibc-rtkaio-clock.patch @@ -0,0 +1,102 @@ +# +# Based on the following upstream commit: +# +# commit 6e6249d0b461b952d0f544792372663feb6d792a +# Author: Roland McGrath +# Date: Wed Oct 24 14:50:46 2012 -0700 +# +# BZ#14743: Move clock_* symbols from librt to libc. +# +# We remove the clock* functions from librtkaio.so.1 and +# use those provided in libc.so.6, matching librt.so. +# +diff -urN glibc-2.21-59-gd35273f.mod/rtkaio/clock-compat.c glibc-2.21-59-gd35273f/rtkaio/clock-compat.c +--- glibc-2.21-59-gd35273f.mod/rtkaio/clock-compat.c 1969-12-31 19:00:00.000000000 -0500 ++++ glibc-2.21-59-gd35273f/rtkaio/clock-compat.c 2015-02-11 22:52:29.912765683 -0500 +@@ -0,0 +1 @@ ++#include +diff -urN glibc-2.21-59-gd35273f.mod/rtkaio/kaio_clock_getcpuclockid.c glibc-2.21-59-gd35273f/rtkaio/kaio_clock_getcpuclockid.c +--- glibc-2.21-59-gd35273f.mod/rtkaio/kaio_clock_getcpuclockid.c 2015-02-11 13:00:55.105400863 -0500 ++++ glibc-2.21-59-gd35273f/rtkaio/kaio_clock_getcpuclockid.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1 +0,0 @@ +-#include +diff -urN glibc-2.21-59-gd35273f.mod/rtkaio/kaio_clock_getres.c glibc-2.21-59-gd35273f/rtkaio/kaio_clock_getres.c +--- glibc-2.21-59-gd35273f.mod/rtkaio/kaio_clock_getres.c 2015-02-11 13:00:55.105400863 -0500 ++++ glibc-2.21-59-gd35273f/rtkaio/kaio_clock_getres.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1 +0,0 @@ +-#include +diff -urN glibc-2.21-59-gd35273f.mod/rtkaio/kaio_clock_gettime.c glibc-2.21-59-gd35273f/rtkaio/kaio_clock_gettime.c +--- glibc-2.21-59-gd35273f.mod/rtkaio/kaio_clock_gettime.c 2015-02-11 13:00:55.109400738 -0500 ++++ glibc-2.21-59-gd35273f/rtkaio/kaio_clock_gettime.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1 +0,0 @@ +-#include +diff -urN glibc-2.21-59-gd35273f.mod/rtkaio/kaio_clock_nanosleep.c glibc-2.21-59-gd35273f/rtkaio/kaio_clock_nanosleep.c +--- glibc-2.21-59-gd35273f.mod/rtkaio/kaio_clock_nanosleep.c 2015-02-11 13:00:55.115400552 -0500 ++++ glibc-2.21-59-gd35273f/rtkaio/kaio_clock_nanosleep.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1 +0,0 @@ +-#include +diff -urN glibc-2.21-59-gd35273f.mod/rtkaio/kaio_clock_settime.c glibc-2.21-59-gd35273f/rtkaio/kaio_clock_settime.c +--- glibc-2.21-59-gd35273f.mod/rtkaio/kaio_clock_settime.c 2015-02-11 13:00:55.110400708 -0500 ++++ glibc-2.21-59-gd35273f/rtkaio/kaio_clock_settime.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1 +0,0 @@ +-#include +diff -urN glibc-2.21-59-gd35273f.mod/rtkaio/kaio_get_clockfreq.c glibc-2.21-59-gd35273f/rtkaio/kaio_get_clockfreq.c +--- glibc-2.21-59-gd35273f.mod/rtkaio/kaio_get_clockfreq.c 2015-02-11 13:00:55.118400459 -0500 ++++ glibc-2.21-59-gd35273f/rtkaio/kaio_get_clockfreq.c 1969-12-31 19:00:00.000000000 -0500 +@@ -1 +0,0 @@ +-#include +diff -urN glibc-2.21-59-gd35273f.mod/rtkaio/Makefile glibc-2.21-59-gd35273f/rtkaio/Makefile +--- glibc-2.21-59-gd35273f.mod/rtkaio/Makefile 2015-02-11 13:00:55.107400801 -0500 ++++ glibc-2.21-59-gd35273f/rtkaio/Makefile 2015-02-11 22:46:46.930374298 -0500 +@@ -25,9 +25,6 @@ + aio_read64 aio_return aio_suspend aio_write \ + aio_write64 lio_listio lio_listio64 aio_sigqueue \ + aio_notify +-clock-routines := get_clockfreq clock_getcpuclockid \ +- clock_getres clock_gettime clock_settime \ +- clock_nanosleep + timer-routines := timer_create timer_delete timer_getoverr \ + timer_gettime timer_settime + shm-routines := shm_open shm_unlink +@@ -36,8 +33,9 @@ + mq_timedreceive + + librtkaio-routines = $(patsubst %,k%,$(aio-routines)) \ +- $(patsubst %,kaio_%,$(clock-routines) $(timer-routines) \ +- $(shm-routines) $(mq-routines)) ++ $(patsubst %,kaio_%,$(timer-routines) \ ++ $(shm-routines) $(mq-routines)) \ ++ clock-compat + + tests := tst-shm tst-clock tst-clock_nanosleep tst-timer tst-timer2 \ + tst-aio tst-aio64 tst-aio2 tst-aio3 tst-aio4 tst-aio5 tst-aio6 \ +@@ -64,7 +62,6 @@ + include $(..)Rules + + CFLAGS-kaio_suspend.c = -fexceptions +-CFLAGS-kaio_clock_nanosleep.c = -fexceptions -fasynchronous-unwind-tables + CFLAGS-kaio_librt-cancellation.c = -fasynchronous-unwind-tables + + LDFLAGS-rtkaio.so = -Wl,-soname=lib$(libprefix)rt.so$(librt.so-version) \ +@@ -88,9 +85,6 @@ + else + $(addprefix $(objpfx),$(tests)): $(objpfx)librtkaio.a $(static-thread-library) + endif +-ifeq (yes,$(build-bounded)) +-$(tests:%=$(objpfx)%-bp): $(objpfx)librtkaio_b.a $(bounded-thread-library) +-endif + + tst-mqueue7-ARGS = -- $(built-program-file) + +diff -urN glibc-2.21-59-gd35273f.mod/rtkaio/Versions glibc-2.21-59-gd35273f/rtkaio/Versions +--- glibc-2.21-59-gd35273f.mod/rtkaio/Versions 2015-02-11 13:00:55.118400459 -0500 ++++ glibc-2.21-59-gd35273f/rtkaio/Versions 2015-02-11 22:36:11.974051389 -0500 +@@ -6,7 +6,7 @@ + aio_suspend64; aio_write; aio_write64; lio_listio; lio_listio64; + } + GLIBC_2.2 { +- # c* ++ # These have moved to libc and are still here only for compatibility. + clock_getres; clock_gettime; clock_settime; clock_getcpuclockid; + clock_nanosleep; + diff --git a/glibc.spec b/glibc.spec index b5392de..42ed184 100644 --- a/glibc.spec +++ b/glibc.spec @@ -1,6 +1,6 @@ %define glibcsrcdir glibc-2.20-549-g86bba16 -%define glibcversion 2.20.90 -%define glibcrelease 20%{?dist} +%define glibcversion 2.21.90 +%define glibcrelease 1%{?dist} # Pre-release tarballs are pulled in from git using a command that is # effectively: # @@ -206,8 +206,8 @@ Patch0052: %{name}-disable-rwlock-elision.patch # symlink to it. Patch0053: %{name}-cs-path.patch -# Temporary revert till I fix rtkaio build on i686. -Patch0054: %{name}-revert-x86-vdso.patch +# Remove the clock_* functions and use the ones in libc like librt does. +Patch0054: %{name}-rtkaio-clock.patch ############################################################################## # @@ -578,7 +578,7 @@ package or when debugging this package. %patch0050 -p1 %patch0052 -p1 %patch0053 -p1 -%patch0054 -p1 -R +%patch0054 -p1 ############################################################################## # %%prep - Additional prep required... @@ -1751,6 +1751,10 @@ rm -f *.filelist* %endif %changelog +* Wed Feb 11 2015 Carlos O'Donell - 2.21.90-1 +- Add back x86 vDSO support. +- Fix rtkaio build to reference clock_* functions from libc. + * Wed Jan 21 2015 Siddhesh Poyarekar - 2.20.90-20 - Sync with upstream master. - Disable werror on s390x.