From a086cd23991f342c679d5f5e3b4c4b0eb5d79e06 Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Jan 21 2015 18:52:13 +0000 Subject: Revert x86 vdso support patch to get i686 building again --- diff --git a/glibc-revert-x86-vdso.patch b/glibc-revert-x86-vdso.patch new file mode 100644 index 0000000..d16baab --- /dev/null +++ b/glibc-revert-x86-vdso.patch @@ -0,0 +1,655 @@ +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.spec b/glibc.spec index 734ef32..b5392de 100644 --- a/glibc.spec +++ b/glibc.spec @@ -206,6 +206,9 @@ 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 + ############################################################################## # # Patches from upstream @@ -575,6 +578,7 @@ package or when debugging this package. %patch0050 -p1 %patch0052 -p1 %patch0053 -p1 +%patch0054 -p1 -R ############################################################################## # %%prep - Additional prep required... @@ -1750,6 +1754,7 @@ rm -f *.filelist* * Wed Jan 21 2015 Siddhesh Poyarekar - 2.20.90-20 - Sync with upstream master. - Disable werror on s390x. +- Revert x86 vDSO support since it breaks i686 rtkaio build. * Tue Jan 20 2015 Peter Robinson 2.20.90-19 - Drop large ancient ChangeLogs (rhbz #1169546)