@@ -283,10 +283,9 @@ while read file srcfile caller syscall args strong weak; do
(echo '#define ${strong} __redirect_${strong}'; \\
echo '#include <dl-vdso.h>'; \\
echo '#undef ${strong}'; \\
- echo '#define vdso_ifunc_init() \\'; \\
- echo ' PREPARE_VERSION_KNOWN (symver, ${vdso_symver})'; \\
+ echo '#define vdso_ifunc_init()'; \\
echo '__ifunc (__redirect_${strong}, ${strong},'; \\
- echo ' _dl_vdso_vsym ("${vdso_symbol}", &symver), void,'; \\
+ echo ' get_vdso_symbol ("${vdso_symbol}"), void,'; \\
echo ' vdso_ifunc_init)'; \\
EOF
# This is doing "hidden_def (${strong})", but the compiler
@@ -20,12 +20,10 @@
putting it into *tv and *tz. If tz is null, *tz is not filled.
Returns 0 on success, -1 on errors. */
+#include <sys/time.h>
+
#ifdef SHARED
-# define __gettimeofday __redirect___gettimeofday
-# include <sys/time.h>
-# undef __gettimeofday
-# define HAVE_VSYSCALL
# include <dl-vdso.h>
# include <sysdep-vdso.h>
@@ -38,25 +36,15 @@ __gettimeofday_vsyscall (struct timeval *tv, struct timezone *tz)
return INLINE_VSYSCALL (gettimeofday, 2, tv, tz);
}
-/* PREPARE_VERSION will need an __LP64__ ifdef when ILP32 support
- goes in. See _libc_vdso_platform_setup in
- sysdeps/unix/sysv/linux/aarch64/init-first.c. */
-
-# undef INIT_ARCH
-# define INIT_ARCH() \
- PREPARE_VERSION (linux_version, "LINUX_2.6.39", 123718537); \
- void *vdso_gettimeofday = \
- _dl_vdso_vsym ("__kernel_gettimeofday", &linux_version);
+# define INIT_ARCH()
-libc_ifunc_hidden (__redirect___gettimeofday, __gettimeofday,
- vdso_gettimeofday ?: (void *) __gettimeofday_vsyscall)
-
-__hidden_ver1 (__gettimeofday_vsyscall, __GI___gettimeofday,
- __gettimeofday_vsyscall);
+libc_ifunc_hidden (__gettimeofday, __gettimeofday,
+ (get_vdso_symbol ("__vdso_gettimeofday")
+ ?: __gettimeofday_vsyscall))
+libc_hidden_def (__gettimeofday)
#else
-# include <sys/time.h>
# include <sysdep.h>
int
__gettimeofday (struct timeval *tv, struct timezone *tz)
@@ -26,21 +26,15 @@ int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *);
static inline void
_libc_vdso_platform_setup (void)
{
-#ifdef __LP64__
- PREPARE_VERSION (linux_version, "LINUX_2.6.39", 123718537);
-#else
- PREPARE_VERSION (linux_version, "LINUX_4.9", 61765625);
-#endif
-
- void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux_version);
+ void *p = get_vdso_symbol ("__kernel_gettimeofday");
PTR_MANGLE (p);
VDSO_SYMBOL(gettimeofday) = p;
- p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux_version);
+ p = get_vdso_symbol ("__kernel_clock_gettime");
PTR_MANGLE (p);
VDSO_SYMBOL(clock_gettime) = p;
- p = _dl_vdso_vsym ("__kernel_clock_getres", &linux_version);
+ p = get_vdso_symbol ("__kernel_clock_getres");
PTR_MANGLE (p);
VDSO_SYMBOL(clock_getres) = p;
}
@@ -151,6 +151,13 @@
#else /* not __ASSEMBLER__ */
+# ifdef __LP64__
+# define VDSO_NAME "LINUX_2_6_39"
+# define VDSO_HASH 123718537
+# else
+# define VDSO_NAME "LINUX_4.9"
+# define VDSO_HASH 61765625
+# endif
/* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETRES_VSYSCALL 1
@@ -27,13 +27,11 @@ int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
-
- void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26);
+ void *p = get_vdso_symbol ("__vdso_gettimeofday");
PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p;
- p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
+ p = get_vdso_symbol ("__vdso_clock_gettime");
PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p;
}
@@ -388,6 +388,9 @@ __local_syscall_error: \
#undef INTERNAL_SYSCALL_ERRNO
#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
+#define VDSO_NAME "LINUX_2_6"
+#define VDSO_HASH 61765110
+
/* List of system calls which are supported as vsyscalls. */
#define HAVE_CLOCK_GETTIME_VSYSCALL 1
#define HAVE_GETTIMEOFDAY_VSYSCALL 1
@@ -22,34 +22,18 @@
#include <assert.h>
#include <ldsodefs.h>
#include <dl-hash.h>
-
-/* Create version number record for lookup. */
-#define PREPARE_VERSION(var, vname, vhash) \
- struct r_found_version var; \
- var.name = vname; \
- var.hidden = 1; \
- var.hash = vhash; \
- assert (var.hash == _dl_elf_hash (var.name)); \
- /* We don't have a specific file where the symbol can be found. */ \
- var.filename = NULL
-
-/* Use this for the known version sets defined below, where we
- record their precomputed hash values only once, in this file. */
-#define PREPARE_VERSION_KNOWN(var, vname) \
- PREPARE_VERSION (var, VDSO_NAME_##vname, VDSO_HASH_##vname)
-
-#define VDSO_NAME_LINUX_2_6 "LINUX_2.6"
-#define VDSO_HASH_LINUX_2_6 61765110
-#define VDSO_NAME_LINUX_2_6_15 "LINUX_2.6.15"
-#define VDSO_HASH_LINUX_2_6_15 123718565
-#define VDSO_NAME_LINUX_2_6_29 "LINUX_2.6.29"
-#define VDSO_HASH_LINUX_2_6_29 123718585
-#define VDSO_NAME_LINUX_4_15 "LINUX_4.15"
-#define VDSO_HASH_LINUX_4_15 182943605
+#include <libc-vdso.h>
/* Functions for resolving symbols in the VDSO link map. */
extern void *_dl_vdso_vsym (const char *name,
const struct r_found_version *version)
attribute_hidden;
+static inline void *
+get_vdso_symbol (const char *symbol)
+{
+ struct r_found_version rfv = { VDSO_NAME, VDSO_HASH, 1, NULL };
+ return _dl_vdso_vsym (symbol, &rfv);
+}
+
#endif /* dl-vdso.h */
@@ -34,9 +34,7 @@ clock_gettime_syscall (clockid_t id, struct timespec *tp)
static inline void
__vdso_platform_setup (void)
{
- PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
-
- void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
+ void *p = get_vdso_symbol ("__vdso_clock_gettime");
if (p == NULL)
p = clock_gettime_syscall;
PTR_MANGLE (p);
@@ -309,6 +309,9 @@ struct libc_do_syscall_args
#define INLINE_SYSCALL_ERROR_RETURN_VALUE(resultvar) \
__syscall_error (-(resultvar))
+# define VDSO_NAME "LINUX_2.6"
+# define VDSO_HASH 61765110
+
/* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETTIME_VSYSCALL 1
# define HAVE_GETTIMEOFDAY_VSYSCALL 1
@@ -26,13 +26,11 @@ int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
-
- void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26);
+ void *p = get_vdso_symbol ("__vdso_gettimeofday");
PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p;
- p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
+ p = get_vdso_symbol ("__vdso_clock_gettime");
PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p;
}
@@ -19,6 +19,7 @@
#define _LINUX_MIPS_MIPS32_SYSDEP_H 1
/* There is some commonality. */
+#include <sysdeps/unix/sysv/linux/mips/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h>
#include <sysdeps/unix/mips/mips32/sysdep.h>
@@ -360,10 +361,6 @@ libc_hidden_proto (__mips_syscall7, nomips16)
_ret; \
})
-/* List of system calls which are supported as vsyscalls. */
-#define HAVE_CLOCK_GETTIME_VSYSCALL 1
-#define HAVE_GETTIMEOFDAY_VSYSCALL 1
-
#endif /* __ASSEMBLER__ */
/* Pointer mangling is not yet supported for MIPS. */
@@ -19,6 +19,7 @@
#define _LINUX_MIPS_SYSDEP_H 1
/* There is some commonality. */
+#include <sysdeps/unix/sysv/linux/mips/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h>
#include <sysdeps/unix/mips/mips64/n32/sysdep.h>
@@ -308,10 +309,6 @@
_ret; \
})
-/* List of system calls which are supported as vsyscalls. */
-#define HAVE_CLOCK_GETTIME_VSYSCALL 1
-#define HAVE_GETTIMEOFDAY_VSYSCALL 1
-
#endif /* __ASSEMBLER__ */
/* Pointer mangling is not yet supported for MIPS. */
@@ -19,6 +19,7 @@
#define _LINUX_MIPS_SYSDEP_H 1
/* There is some commonality. */
+#include <sysdeps/unix/sysv/linux/mips/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h>
#include <sysdeps/unix/mips/mips64/n64/sysdep.h>
@@ -304,10 +305,6 @@
_ret; \
})
-/* List of system calls which are supported as vsyscalls. */
-#define HAVE_CLOCK_GETTIME_VSYSCALL 1
-#define HAVE_GETTIMEOFDAY_VSYSCALL 1
-
#endif /* __ASSEMBLER__ */
/* Pointer mangling is not yet supported for MIPS. */
new file mode 100644
@@ -0,0 +1,24 @@
+/* Syscall definitions, Linux MIPS generic version.
+ Copyright (C) 2019 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/>. */
+
+#define VDSO_NAME "LINUX_2_6"
+#define VDSO_HASH 61765110
+
+/* List of system calls which are supported as vsyscalls. */
+#define HAVE_CLOCK_GETTIME_VSYSCALL 1
+#define HAVE_GETTIMEOFDAY_VSYSCALL 1
@@ -57,9 +57,9 @@ __gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
}
-# define INIT_ARCH() \
- PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565); \
- void *vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615);
+# define INIT_ARCH() \
+ void *vdso_gettimeofday = get_vdso_symbol ("__kernel_gettimeofday")
+
/* If the vDSO is not available we fall back syscall. */
libc_ifunc_hidden (__redirect___gettimeofday, __gettimeofday,
@@ -37,29 +37,27 @@ void *VDSO_SYMBOL(sigtramp_rt32);
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565);
-
- void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615);
+ void *p = get_vdso_symbol ("__kernel_gettimeofday");
PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p;
- p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2615);
+ p = get_vdso_symbol ("__kernel_clock_gettime");
PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p;
- p = _dl_vdso_vsym ("__kernel_clock_getres", &linux2615);
+ p = get_vdso_symbol ("__kernel_clock_getres");
PTR_MANGLE (p);
VDSO_SYMBOL (clock_getres) = p;
- p = _dl_vdso_vsym ("__kernel_get_tbfreq", &linux2615);
+ p = get_vdso_symbol ("__kernel_get_tbfreq");
PTR_MANGLE (p);
VDSO_SYMBOL (get_tbfreq) = p;
- p = _dl_vdso_vsym ("__kernel_getcpu", &linux2615);
+ p = get_vdso_symbol ("__kernel_getcpu");
PTR_MANGLE (p);
VDSO_SYMBOL (getcpu) = p;
- p = _dl_vdso_vsym ("__kernel_time", &linux2615);
+ p = get_vdso_symbol ("__kernel_time");
PTR_MANGLE (p);
VDSO_SYMBOL (time) = p;
@@ -69,12 +67,10 @@ _libc_vdso_platform_setup (void)
There is no need to pointer mangle these symbol because they will
used only for pointer comparison. */
#if defined(__PPC64__) || defined(__powerpc64__)
- VDSO_SYMBOL(sigtramp_rt64) = _dl_vdso_vsym ("__kernel_sigtramp_rt64",
- &linux2615);
+ VDSO_SYMBOL(sigtramp_rt64) = get_vdso_symbol ("__kernel_sigtramp_rt64");
#else
- VDSO_SYMBOL(sigtramp32) = _dl_vdso_vsym ("__kernel_sigtramp32", &linux2615);
- VDSO_SYMBOL(sigtramp_rt32) = _dl_vdso_vsym ("__kernel_sigtramp_rt32",
- &linux2615);
+ VDSO_SYMBOL(sigtramp32) = get_vdso_symbol ("__kernel_sigtramp32");
+ VDSO_SYMBOL(sigtramp_rt32) = get_vdso_symbol ("__kernel_sigtramp_rt32");
#endif
}
@@ -18,6 +18,7 @@
#ifndef _LINUX_POWERPC_SYSDEP_H
#define _LINUX_POWERPC_SYSDEP_H 1
+#include <sysdeps/unix/sysv/linux/powerpc/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h>
#include <sysdeps/unix/powerpc/sysdep.h>
#include <tls.h>
@@ -144,12 +145,6 @@
sc_ret; \
})
-/* List of system calls which are supported as vsyscalls. */
-# define HAVE_CLOCK_GETRES_VSYSCALL 1
-# define HAVE_CLOCK_GETTIME_VSYSCALL 1
-# define HAVE_GETCPU_VSYSCALL 1
-
-
# define LOADARGS_0(name, dummy) \
r0 = name
# define LOADARGS_1(name, __arg1) \
@@ -20,6 +20,7 @@
#ifndef _LINUX_POWERPC_SYSDEP_H
#define _LINUX_POWERPC_SYSDEP_H 1
+#include <sysdeps/unix/sysv/linux/powerpc/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h>
#include <sysdeps/unix/powerpc/sysdep.h>
#include <tls.h>
@@ -60,11 +61,6 @@
sc_ret; \
})
-/* List of system calls which are supported as vsyscalls. */
-#define HAVE_CLOCK_GETRES_VSYSCALL 1
-#define HAVE_CLOCK_GETTIME_VSYSCALL 1
-#define HAVE_GETCPU_VSYSCALL 1
-
/* Define a macro which expands inline into the wrapper code for a system
call. This use is for internal calls that do not need to handle errors
normally. It will never touch errno. This returns just what the kernel
new file mode 100644
@@ -0,0 +1,26 @@
+/* Syscall definitions, Linux PowerPC generic version.
+ Copyright (C) 2019 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/>. */
+
+#define VDSO_NAME "LINUX_2.6.15"
+#define VDSO_HASH 123718565
+
+/* List of system calls which are supported as vsyscalls. */
+#define HAVE_CLOCK_GETRES_VSYSCALL 1
+#define HAVE_CLOCK_GETTIME_VSYSCALL 1
+#define HAVE_GETCPU_VSYSCALL 1
+
@@ -67,8 +67,7 @@ time_syscall (time_t *t)
}
# define INIT_ARCH() \
- PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565); \
- void *vdso_time = _dl_vdso_vsym ("__kernel_time", &linux2615);
+ void *vdso_time = get_vdso_symbol ("__kernel_time");
/* If the vDSO is not available we fall back to the syscall. */
libc_ifunc_hidden (__redirect_time, time,
@@ -38,9 +38,7 @@ __riscv_flush_icache_syscall (void *start, void *end, unsigned long int flags)
static func_type
__lookup_riscv_flush_icache (void)
{
- PREPARE_VERSION_KNOWN (linux_version, LINUX_4_15);
-
- func_type func = _dl_vdso_vsym ("__vdso_flush_icache", &linux_version);
+ func_type func = get_vdso_symbol ("__vdso_flush_icache");
/* If there is no vDSO entry then call the system call directly. All Linux
versions provide the vDSO entry, but QEMU's user-mode emulation doesn't
@@ -32,21 +32,19 @@ long int (*VDSO_SYMBOL (clock_getres)) (clockid_t, struct timespec *)
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION_KNOWN (linux_version, LINUX_4_15);
-
- void *p = _dl_vdso_vsym ("__vdso_getcpu", &linux_version);
+ void *p = get_vdso_symbol ("__vdso_getcpu");
PTR_MANGLE (p);
VDSO_SYMBOL (getcpu) = p;
- p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux_version);
+ p = get_vdso_symbol ("__vdso_gettimeofday");
PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p;
- p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux_version);
+ p = get_vdso_symbol ("__vdso_clock_gettime");
PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p;
- p = _dl_vdso_vsym ("__vdso_clock_getres", &linux_version);
+ p = get_vdso_symbol ("__vdso_clock_getres");
PTR_MANGLE (p);
VDSO_SYMBOL (clock_getres) = p;
}
@@ -121,6 +121,9 @@
#ifndef __ASSEMBLER__
+# define VDSO_NAME "LINUX_4.15"
+# define VDSO_HASH 182943605
+
/* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETRES_VSYSCALL 1
# define HAVE_CLOCK_GETTIME_VSYSCALL 1
@@ -34,21 +34,19 @@ long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *)
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION (linux2629, "LINUX_2.6.29", 123718585);
-
- void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2629);
+ void *p = get_vdso_symbol ("__kernel_gettimeofday");
PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p;
- p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2629);
+ p = get_vdso_symbol ("__kernel_clock_gettime");
PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p;
- p = _dl_vdso_vsym ("__kernel_clock_getres", &linux2629);
+ p = get_vdso_symbol ("__kernel_clock_getres");
PTR_MANGLE (p);
VDSO_SYMBOL (clock_getres) = p;
- p = _dl_vdso_vsym ("__kernel_getcpu", &linux2629);
+ p = get_vdso_symbol ("__kernel_getcpu");
PTR_MANGLE (p);
VDSO_SYMBOL (getcpu) = p;
}
@@ -21,6 +21,7 @@
#include <sysdeps/s390/s390-32/sysdep.h>
#include <sysdeps/unix/sysdep.h>
+#include <sysdeps/unix/sysv/linux/s390/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h>
#include <dl-sysdep.h> /* For RTLD_PRIVATE_ERRNO. */
#include <tls.h>
@@ -271,12 +272,6 @@
#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6)
#define ASMFMT_6 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6), "d" (gpr7)
-/* List of system calls which are supported as vsyscalls. */
-#define HAVE_CLOCK_GETRES_VSYSCALL 1
-#define HAVE_CLOCK_GETTIME_VSYSCALL 1
-#define HAVE_GETTIMEOFDAY_VSYSCALL 1
-#define HAVE_GETCPU_VSYSCALL 1
-
/* Pointer mangling support. */
#if IS_IN (rtld)
/* We cannot use the thread descriptor because in ld.so we use setjmp
@@ -22,6 +22,7 @@
#include <sysdeps/s390/s390-64/sysdep.h>
#include <sysdeps/unix/sysdep.h>
+#include <sysdeps/unix/sysv/linux/s390/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h>
#include <dl-sysdep.h> /* For RTLD_PRIVATE_ERRNO. */
#include <tls.h>
@@ -277,12 +278,6 @@
#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6)
#define ASMFMT_6 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6), "d" (gpr7)
-/* List of system calls which are supported as vsyscalls. */
-#define HAVE_CLOCK_GETRES_VSYSCALL 1
-#define HAVE_CLOCK_GETTIME_VSYSCALL 1
-#define HAVE_GETTIMEOFDAY_VSYSCALL 1
-#define HAVE_GETCPU_VSYSCALL 1
-
#define SINGLE_THREAD_BY_GLOBAL 1
/* Pointer mangling support. */
new file mode 100644
@@ -0,0 +1,27 @@
+/* Syscall definitions, Linux PowerPC generic version.
+ Copyright (C) 2000-2019 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/>. */
+
+#define VDSO_NAME "LINUX_2_6_29"
+#define VDSO_HASH 123718585
+
+/* List of system calls which are supported as vsyscalls. */
+#define HAVE_CLOCK_GETRES_VSYSCALL 1
+#define HAVE_CLOCK_GETTIME_VSYSCALL 1
+#define HAVE_GETTIMEOFDAY_VSYSCALL 1
+#define HAVE_GETCPU_VSYSCALL 1
+
@@ -28,13 +28,11 @@ long int (*VDSO_SYMBOL (clock_gettime)) (clockid_t, struct timespec *)
static inline void
_libc_vdso_platform_setup (void)
{
- PREPARE_VERSION_KNOWN (linux_version, LINUX_2_6);
-
- void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux_version);
+ void *p = get_vdso_symbol ("__vdso_gettimeofday");
PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p;
- p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux_version);
+ p = get_vdso_symbol ("__vdso_clock_gettime");
PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p;
}
@@ -41,6 +41,9 @@
_ret; \
})
+# define VDSO_NAME "LINUX_2_6"
+# define VDSO_HASH 61765110
+
/* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETTIME_VSYSCALL 1
# define HAVE_GETTIMEOFDAY_VSYSCALL 1
@@ -22,6 +22,8 @@
# include <dl-vdso.h>
# include <errno.h>
+# include <sysdep-vdso.h>
+# include <sysdep-vdso.h>
static int
__gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
@@ -36,12 +38,12 @@ __gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
# define __gettimeofday_type __gettimeofday
# endif
-# undef INIT_ARCH
-# define INIT_ARCH() PREPARE_VERSION_KNOWN (linux26, LINUX_2_6)
+# define INIT_ARCH()
+
/* If the vDSO is not available we fall back to syscall. */
libc_ifunc_hidden (__gettimeofday_type, __gettimeofday,
- (_dl_vdso_vsym ("__vdso_gettimeofday", &linux26)
- ?: &__gettimeofday_syscall))
+ (get_vdso_symbol ("__vdso_gettimeofday")
+ ?: __gettimeofday_syscall));
libc_hidden_def (__gettimeofday)
#else
@@ -22,6 +22,7 @@
#include <dl-vdso.h>
#include <errno.h>
+#include <sysdep-vdso.h>
static time_t
__time_syscall (time_t *t)
@@ -38,11 +39,11 @@ __time_syscall (time_t *t)
# endif
#undef INIT_ARCH
-#define INIT_ARCH() PREPARE_VERSION_KNOWN (linux26, LINUX_2_6);
+#define INIT_ARCH()
+
/* If the vDSO is not available we fall back on the syscall. */
libc_ifunc_hidden (time_type, time,
- (_dl_vdso_vsym ("__vdso_time", &linux26)
- ?: &__time_syscall))
+ (get_vdso_symbol ("__vdso_time") ?: __time_syscall))
libc_hidden_def (time)
#else
@@ -32,15 +32,13 @@ extern __typeof (clock_gettime) __syscall_clock_gettime attribute_hidden;
static inline void
__vdso_platform_setup (void)
{
- PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
-
- void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
+ void *p = get_vdso_symbol ("__vdso_clock_gettime");
if (p == NULL)
p = __syscall_clock_gettime;
PTR_MANGLE (p);
VDSO_SYMBOL(clock_gettime) = p;
- p = _dl_vdso_vsym ("__vdso_getcpu", &linux26);
+ p = get_vdso_symbol ("__vdso_getcpu");
PTR_MANGLE (p);
VDSO_SYMBOL(getcpu) = p;
}
@@ -370,6 +370,9 @@
# undef INTERNAL_SYSCALL_ERRNO
# define INTERNAL_SYSCALL_ERRNO(val, err) (-(val))
+# define VDSO_NAME "LINUX_2.6"
+# define VDSO_HASH 61765110
+
/* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETTIME_VSYSCALL 1
# define HAVE_GETTIMEOFDAY_VSYSCALL 1