1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00

Remove PREPARE_VERSION and PREPARE_VERSION_KNOW

This patch removes the PREPARE_VERSION and PREPARE_VERSION_KNOW macro
and uses a static inline function instead, get_vdso_symbol.  Each
architecture that supports vDSO must define the Linux version and its
hash for symbol resolution (VDSO_NAME and VDSO_HASH macro respectively).

It also organizes the HAVE_*_VSYSCALL for mips, powerpc, and s390 to
define them on a common header.

The idea is to require less code to configure and enable vDSO support
for newer ports.  No semantic changes are expected.

Checked with a build against all affected architectures.

	* sysdeps/unix/make-syscalls.sh: Make vDSO call use get_vdso_symbol.
	* sysdeps/unix/sysv/linux/aarch64/gettimeofday.c (__gettimeofday):
	Use get_vdso_symbol instead of _dl_vdso_vsym.
	* sysdeps/unix/sysv/linux/powerpc/time.c (time): Likewise.
	* sysdeps/unix/sysv/linux/riscv/flush-icache.c
	(__lookup_riscv_flush_icache): Likewise.
	* sysdeps/unix/sysv/linux/x86/gettimeofday.c (__gettimeofday):
	Likewise.
	* sysdeps/unix/sysv/linux/x86/time.c (time): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/gettimeofday.c: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/init-first.c: Likewise.
	* sysdeps/unix/sysv/linux/arm/init-first.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/init-first.c: Likewise.
	* sysdeps/unix/sysv/linux/mips/init-first.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/init-first.c: Likewise.
	* sysdeps/unix/sysv/linux/riscv/init-first.c: Likewise.
	* sysdeps/unix/sysv/linux/sparc/init-first.c: Likewise.
	* sysdeps/unix/sysv/linux/s390/init-first.c: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/init-first.c: Likewise.
	* sysdeps/unix/sysv/linux/aarch64/sysdep.h (VDSO_NAME, VDSO_HASH):
	Define.
	* sysdeps/unix/sysv/linux/arm/sysdep.h (VDSO_NAME, VDSO_HASH):
	Likewise.
	* sysdeps/unix/sysv/linux/i386/sysdep.h (VDSO_NAME, VDSO_HASH):
	Likewise.
	* sysdeps/unix/sysv/linux/riscv/sysdep.h (VDSO_NAME, VDSO_HASH):
	Likewise.
	* sysdeps/unix/sysv/linux/sparc/sysdep.h (VDSO_NAME, VDSO_HASH):
	Likewise.
	* sysdeps/unix/sysv/linux/x86_64/sysdep.h (VDSO_NAME, VDSO_HASH):
	Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
	(HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Remove
	definition.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
	(HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h
	(HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
	(HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h
	(HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
	(HAVE_CLOCK_GETRES_VSYSCALL, HAVE_CLOCK_GETTIME_VSYSCALL,
	HAVE_GETTIMEOFDAY_VSYSCALL, HAVE_GETCPU_VSYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
	(HAVE_CLOCK_GETRES_VSYSCALL, HAVE_CLOCK_GETTIME_VSYSCALL,
	HAVE_GETTIMEOFDAY_VSYSCALL, HAVE_GETCPU_VSYSCALL): Likewise.
	* sysdeps/unix/sysv/linux/mips/sysdep.h: New file.
	* sysdeps/unix/sysv/linux/powerpc/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/s390/sysdep.h: Likewise.
	* sysdeps/unix/sysv/linux/dl-vdso.h (PREPARE_VERSION,
	PREPARE_VERSION_KNOWN, VDSO_NAME_LINUX_2_6, VDSO_HASH_LINUX_2_6,
	VDSO_NAME_LINUX_2_6_15, VDSO_HASH_LINUX_2_6_15,
	VDSO_NAME_LINUX_2_6_29, VDSO_HASH_LINUX_2_6_29,
	VDSO_NAME_LINUX_4_15, VDSO_HASH_LINUX_4_15): Remove defines.
	(get_vdso_symbol): New function.
This commit is contained in:
Adhemerval Zanella
2019-05-23 16:33:32 -03:00
parent b881217f17
commit b8386c2859
34 changed files with 223 additions and 157 deletions

View File

@ -1,3 +1,63 @@
2019-09-17 Adhemerval Zanella <adhemerval.zanella@linaro.org>
* sysdeps/unix/make-syscalls.sh: Make vDSO call use get_vdso_symbol.
* sysdeps/unix/sysv/linux/aarch64/gettimeofday.c (__gettimeofday):
Use get_vdso_symbol instead of _dl_vdso_vsym.
* sysdeps/unix/sysv/linux/powerpc/time.c (time): Likewise.
* sysdeps/unix/sysv/linux/riscv/flush-icache.c
(__lookup_riscv_flush_icache): Likewise.
* sysdeps/unix/sysv/linux/x86/gettimeofday.c (__gettimeofday):
Likewise.
* sysdeps/unix/sysv/linux/x86/time.c (time): Likewise.
* sysdeps/unix/sysv/linux/powerpc/gettimeofday.c: Likewise.
* sysdeps/unix/sysv/linux/aarch64/init-first.c: Likewise.
* sysdeps/unix/sysv/linux/arm/init-first.c: Likewise.
* sysdeps/unix/sysv/linux/i386/init-first.c: Likewise.
* sysdeps/unix/sysv/linux/mips/init-first.c: Likewise.
* sysdeps/unix/sysv/linux/powerpc/init-first.c: Likewise.
* sysdeps/unix/sysv/linux/riscv/init-first.c: Likewise.
* sysdeps/unix/sysv/linux/sparc/init-first.c: Likewise.
* sysdeps/unix/sysv/linux/s390/init-first.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/init-first.c: Likewise.
* sysdeps/unix/sysv/linux/aarch64/sysdep.h (VDSO_NAME, VDSO_HASH):
Define.
* sysdeps/unix/sysv/linux/arm/sysdep.h (VDSO_NAME, VDSO_HASH):
Likewise.
* sysdeps/unix/sysv/linux/i386/sysdep.h (VDSO_NAME, VDSO_HASH):
Likewise.
* sysdeps/unix/sysv/linux/riscv/sysdep.h (VDSO_NAME, VDSO_HASH):
Likewise.
* sysdeps/unix/sysv/linux/sparc/sysdep.h (VDSO_NAME, VDSO_HASH):
Likewise.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h (VDSO_NAME, VDSO_HASH):
Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
(HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Remove
definition.
* sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
(HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h
(HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h
(HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h
(HAVE_CLOCK_GETTIME_VSYSCALL, HAVE_GETTIMEOFDAY_VSYSCALL): Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
(HAVE_CLOCK_GETRES_VSYSCALL, HAVE_CLOCK_GETTIME_VSYSCALL,
HAVE_GETTIMEOFDAY_VSYSCALL, HAVE_GETCPU_VSYSCALL): Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
(HAVE_CLOCK_GETRES_VSYSCALL, HAVE_CLOCK_GETTIME_VSYSCALL,
HAVE_GETTIMEOFDAY_VSYSCALL, HAVE_GETCPU_VSYSCALL): Likewise.
* sysdeps/unix/sysv/linux/mips/sysdep.h: New file.
* sysdeps/unix/sysv/linux/powerpc/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/s390/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/dl-vdso.h (PREPARE_VERSION,
PREPARE_VERSION_KNOWN, VDSO_NAME_LINUX_2_6, VDSO_HASH_LINUX_2_6,
VDSO_NAME_LINUX_2_6_15, VDSO_HASH_LINUX_2_6_15,
VDSO_NAME_LINUX_2_6_29, VDSO_HASH_LINUX_2_6_29,
VDSO_NAME_LINUX_4_15, VDSO_HASH_LINUX_4_15): Remove defines.
(get_vdso_symbol): New function.
2019-09-17 Chung-Lin Tang <cltang@codesourcery.com> 2019-09-17 Chung-Lin Tang <cltang@codesourcery.com>
* sysdeps/generic/hp-timing-common.h (HP_TIMING_PRINT): Correct * sysdeps/generic/hp-timing-common.h (HP_TIMING_PRINT): Correct

View File

@ -283,10 +283,9 @@ while read file srcfile caller syscall args strong weak; do
(echo '#define ${strong} __redirect_${strong}'; \\ (echo '#define ${strong} __redirect_${strong}'; \\
echo '#include <dl-vdso.h>'; \\ echo '#include <dl-vdso.h>'; \\
echo '#undef ${strong}'; \\ echo '#undef ${strong}'; \\
echo '#define vdso_ifunc_init() \\'; \\ echo '#define vdso_ifunc_init()'; \\
echo ' PREPARE_VERSION_KNOWN (symver, ${vdso_symver})'; \\
echo '__ifunc (__redirect_${strong}, ${strong},'; \\ echo '__ifunc (__redirect_${strong}, ${strong},'; \\
echo ' _dl_vdso_vsym ("${vdso_symbol}", &symver), void,'; \\ echo ' get_vdso_symbol ("${vdso_symbol}"), void,'; \\
echo ' vdso_ifunc_init)'; \\ echo ' vdso_ifunc_init)'; \\
EOF EOF
# This is doing "hidden_def (${strong})", but the compiler # This is doing "hidden_def (${strong})", but the compiler

View File

@ -20,12 +20,10 @@
putting it into *tv and *tz. If tz is null, *tz is not filled. putting it into *tv and *tz. If tz is null, *tz is not filled.
Returns 0 on success, -1 on errors. */ Returns 0 on success, -1 on errors. */
#include <sys/time.h>
#ifdef SHARED #ifdef SHARED
# define __gettimeofday __redirect___gettimeofday
# include <sys/time.h>
# undef __gettimeofday
# define HAVE_VSYSCALL
# include <dl-vdso.h> # include <dl-vdso.h>
# include <sysdep-vdso.h> # include <sysdep-vdso.h>
@ -38,25 +36,14 @@ __gettimeofday_vsyscall (struct timeval *tv, struct timezone *tz)
return INLINE_VSYSCALL (gettimeofday, 2, tv, tz); return INLINE_VSYSCALL (gettimeofday, 2, tv, tz);
} }
/* PREPARE_VERSION_KNOWN will need an __LP64__ ifdef when ILP32 support # define INIT_ARCH()
goes in. See _libc_vdso_platform_setup in libc_ifunc_hidden (__gettimeofday, __gettimeofday,
sysdeps/unix/sysv/linux/aarch64/init-first.c. */ (get_vdso_symbol ("__kernel_gettimeofday")
?: __gettimeofday_vsyscall))
# undef INIT_ARCH libc_hidden_def (__gettimeofday)
# define INIT_ARCH() \
PREPARE_VERSION_KNOWN (linux_version, LINUX_2_6_39); \
void *vdso_gettimeofday = \
_dl_vdso_vsym ("__kernel_gettimeofday", &linux_version);
libc_ifunc_hidden (__redirect___gettimeofday, __gettimeofday,
vdso_gettimeofday ?: (void *) __gettimeofday_vsyscall)
__hidden_ver1 (__gettimeofday_vsyscall, __GI___gettimeofday,
__gettimeofday_vsyscall);
#else #else
# include <sys/time.h>
# include <sysdep.h> # include <sysdep.h>
int int
__gettimeofday (struct timeval *tv, struct timezone *tz) __gettimeofday (struct timeval *tv, struct timezone *tz)

View File

@ -26,21 +26,15 @@ int (*VDSO_SYMBOL(clock_getres)) (clockid_t, struct timespec *);
static inline void static inline void
_libc_vdso_platform_setup (void) _libc_vdso_platform_setup (void)
{ {
#ifdef __LP64__ void *p = get_vdso_symbol ("__kernel_gettimeofday");
PREPARE_VERSION_KNOWN (linux_version, LINUX_2_6_39);
#else
PREPARE_VERSION_KNOWN (linux_version, LINUX_4_9);
#endif
void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux_version);
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL(gettimeofday) = p; VDSO_SYMBOL(gettimeofday) = p;
p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux_version); p = get_vdso_symbol ("__kernel_clock_gettime");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL(clock_gettime) = 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); PTR_MANGLE (p);
VDSO_SYMBOL(clock_getres) = p; VDSO_SYMBOL(clock_getres) = p;
} }

View File

@ -151,6 +151,13 @@
#else /* not __ASSEMBLER__ */ #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. */ /* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETRES_VSYSCALL 1 # define HAVE_CLOCK_GETRES_VSYSCALL 1

View File

@ -27,13 +27,11 @@ int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
static inline void static inline void
_libc_vdso_platform_setup (void) _libc_vdso_platform_setup (void)
{ {
PREPARE_VERSION_KNOWN (linux26, LINUX_2_6); void *p = get_vdso_symbol ("__vdso_gettimeofday");
void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26);
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p; VDSO_SYMBOL (gettimeofday) = p;
p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26); p = get_vdso_symbol ("__vdso_clock_gettime");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p; VDSO_SYMBOL (clock_gettime) = p;
} }

View File

@ -388,6 +388,9 @@ __local_syscall_error: \
#undef INTERNAL_SYSCALL_ERRNO #undef INTERNAL_SYSCALL_ERRNO
#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) #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. */ /* List of system calls which are supported as vsyscalls. */
#define HAVE_CLOCK_GETTIME_VSYSCALL 1 #define HAVE_CLOCK_GETTIME_VSYSCALL 1
#define HAVE_GETTIMEOFDAY_VSYSCALL 1 #define HAVE_GETTIMEOFDAY_VSYSCALL 1

View File

@ -22,40 +22,18 @@
#include <assert.h> #include <assert.h>
#include <ldsodefs.h> #include <ldsodefs.h>
#include <dl-hash.h> #include <dl-hash.h>
#include <libc-vdso.h>
/* Create version number record for lookup. */
static inline struct r_found_version
prepare_version_base (const char *name, ElfW(Word) hash)
{
assert (hash == _dl_elf_hash (name));
return (struct r_found_version) { name, hash, 1, NULL };
}
#define prepare_version(vname) \
prepare_version_base (VDSO_NAME_##vname, VDSO_HASH_##vname)
/* 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) \
struct r_found_version var = prepare_version (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_2_6_39 "LINUX_2.6.39"
#define VDSO_HASH_LINUX_2_6_39 123718537
#define VDSO_NAME_LINUX_4 "LINUX_4"
#define VDSO_HASH_LINUX_4 14921332
#define VDSO_NAME_LINUX_4_9 "LINUX_4.9"
#define VDSO_HASH_LINUX_4_9 61765625
#define VDSO_NAME_LINUX_4_15 "LINUX_4.15"
#define VDSO_HASH_LINUX_4_15 182943605
/* Functions for resolving symbols in the VDSO link map. */ /* Functions for resolving symbols in the VDSO link map. */
extern void *_dl_vdso_vsym (const char *name, extern void *_dl_vdso_vsym (const char *name,
const struct r_found_version *version) const struct r_found_version *version)
attribute_hidden; 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 */ #endif /* dl-vdso.h */

View File

@ -34,9 +34,7 @@ clock_gettime_syscall (clockid_t id, struct timespec *tp)
static inline void static inline void
__vdso_platform_setup (void) __vdso_platform_setup (void)
{ {
PREPARE_VERSION_KNOWN (linux26, LINUX_2_6); void *p = get_vdso_symbol ("__vdso_clock_gettime");
void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
if (p == NULL) if (p == NULL)
p = clock_gettime_syscall; p = clock_gettime_syscall;
PTR_MANGLE (p); PTR_MANGLE (p);

View File

@ -309,6 +309,9 @@ struct libc_do_syscall_args
#define INLINE_SYSCALL_ERROR_RETURN_VALUE(resultvar) \ #define INLINE_SYSCALL_ERROR_RETURN_VALUE(resultvar) \
__syscall_error (-(resultvar)) __syscall_error (-(resultvar))
# define VDSO_NAME "LINUX_2.6"
# define VDSO_HASH 61765110
/* List of system calls which are supported as vsyscalls. */ /* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETTIME_VSYSCALL 1 # define HAVE_CLOCK_GETTIME_VSYSCALL 1
# define HAVE_GETTIMEOFDAY_VSYSCALL 1 # define HAVE_GETTIMEOFDAY_VSYSCALL 1

View File

@ -26,13 +26,11 @@ int (*VDSO_SYMBOL(clock_gettime)) (clockid_t, struct timespec *);
static inline void static inline void
_libc_vdso_platform_setup (void) _libc_vdso_platform_setup (void)
{ {
PREPARE_VERSION_KNOWN (linux26, LINUX_2_6); void *p = get_vdso_symbol ("__vdso_gettimeofday");
void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux26);
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p; VDSO_SYMBOL (gettimeofday) = p;
p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26); p = get_vdso_symbol ("__vdso_clock_gettime");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p; VDSO_SYMBOL (clock_gettime) = p;
} }

View File

@ -19,6 +19,7 @@
#define _LINUX_MIPS_MIPS32_SYSDEP_H 1 #define _LINUX_MIPS_MIPS32_SYSDEP_H 1
/* There is some commonality. */ /* There is some commonality. */
#include <sysdeps/unix/sysv/linux/mips/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h> #include <sysdeps/unix/sysv/linux/sysdep.h>
#include <sysdeps/unix/mips/mips32/sysdep.h> #include <sysdeps/unix/mips/mips32/sysdep.h>
@ -360,10 +361,6 @@ libc_hidden_proto (__mips_syscall7, nomips16)
_ret; \ _ret; \
}) })
/* List of system calls which are supported as vsyscalls. */
#define HAVE_CLOCK_GETTIME_VSYSCALL 1
#define HAVE_GETTIMEOFDAY_VSYSCALL 1
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */
/* Pointer mangling is not yet supported for MIPS. */ /* Pointer mangling is not yet supported for MIPS. */

View File

@ -19,6 +19,7 @@
#define _LINUX_MIPS_SYSDEP_H 1 #define _LINUX_MIPS_SYSDEP_H 1
/* There is some commonality. */ /* There is some commonality. */
#include <sysdeps/unix/sysv/linux/mips/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h> #include <sysdeps/unix/sysv/linux/sysdep.h>
#include <sysdeps/unix/mips/mips64/n32/sysdep.h> #include <sysdeps/unix/mips/mips64/n32/sysdep.h>
@ -308,10 +309,6 @@
_ret; \ _ret; \
}) })
/* List of system calls which are supported as vsyscalls. */
#define HAVE_CLOCK_GETTIME_VSYSCALL 1
#define HAVE_GETTIMEOFDAY_VSYSCALL 1
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */
/* Pointer mangling is not yet supported for MIPS. */ /* Pointer mangling is not yet supported for MIPS. */

View File

@ -19,6 +19,7 @@
#define _LINUX_MIPS_SYSDEP_H 1 #define _LINUX_MIPS_SYSDEP_H 1
/* There is some commonality. */ /* There is some commonality. */
#include <sysdeps/unix/sysv/linux/mips/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h> #include <sysdeps/unix/sysv/linux/sysdep.h>
#include <sysdeps/unix/mips/mips64/n64/sysdep.h> #include <sysdeps/unix/mips/mips64/n64/sysdep.h>
@ -304,10 +305,6 @@
_ret; \ _ret; \
}) })
/* List of system calls which are supported as vsyscalls. */
#define HAVE_CLOCK_GETTIME_VSYSCALL 1
#define HAVE_GETTIMEOFDAY_VSYSCALL 1
#endif /* __ASSEMBLER__ */ #endif /* __ASSEMBLER__ */
/* Pointer mangling is not yet supported for MIPS. */ /* Pointer mangling is not yet supported for MIPS. */

View File

@ -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

View File

@ -57,9 +57,8 @@ __gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
return INLINE_SYSCALL (gettimeofday, 2, tv, tz); return INLINE_SYSCALL (gettimeofday, 2, tv, tz);
} }
# define INIT_ARCH() \ # define INIT_ARCH() \
PREPARE_VERSION_KNOWN (linux2615, LINUX_2_6_15); \ void *vdso_gettimeofday = get_vdso_symbol ("__kernel_gettimeofday")
void *vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615);
/* If the vDSO is not available we fall back syscall. */ /* If the vDSO is not available we fall back syscall. */
libc_ifunc_hidden (__redirect___gettimeofday, __gettimeofday, libc_ifunc_hidden (__redirect___gettimeofday, __gettimeofday,

View File

@ -37,29 +37,27 @@ void *VDSO_SYMBOL(sigtramp_rt32);
static inline void static inline void
_libc_vdso_platform_setup (void) _libc_vdso_platform_setup (void)
{ {
PREPARE_VERSION_KNOWN (linux2615, LINUX_2_6_15); void *p = get_vdso_symbol ("__kernel_gettimeofday");
void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615);
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p; VDSO_SYMBOL (gettimeofday) = p;
p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2615); p = get_vdso_symbol ("__kernel_clock_gettime");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p; VDSO_SYMBOL (clock_gettime) = p;
p = _dl_vdso_vsym ("__kernel_clock_getres", &linux2615); p = get_vdso_symbol ("__kernel_clock_getres");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (clock_getres) = p; VDSO_SYMBOL (clock_getres) = p;
p = _dl_vdso_vsym ("__kernel_get_tbfreq", &linux2615); p = get_vdso_symbol ("__kernel_get_tbfreq");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (get_tbfreq) = p; VDSO_SYMBOL (get_tbfreq) = p;
p = _dl_vdso_vsym ("__kernel_getcpu", &linux2615); p = get_vdso_symbol ("__kernel_getcpu");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (getcpu) = p; VDSO_SYMBOL (getcpu) = p;
p = _dl_vdso_vsym ("__kernel_time", &linux2615); p = get_vdso_symbol ("__kernel_time");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (time) = 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 There is no need to pointer mangle these symbol because they will
used only for pointer comparison. */ used only for pointer comparison. */
#if defined(__PPC64__) || defined(__powerpc64__) #if defined(__PPC64__) || defined(__powerpc64__)
VDSO_SYMBOL(sigtramp_rt64) = _dl_vdso_vsym ("__kernel_sigtramp_rt64", VDSO_SYMBOL(sigtramp_rt64) = get_vdso_symbol ("__kernel_sigtramp_rt64");
&linux2615);
#else #else
VDSO_SYMBOL(sigtramp32) = _dl_vdso_vsym ("__kernel_sigtramp32", &linux2615); VDSO_SYMBOL(sigtramp32) = get_vdso_symbol ("__kernel_sigtramp32");
VDSO_SYMBOL(sigtramp_rt32) = _dl_vdso_vsym ("__kernel_sigtramp_rt32", VDSO_SYMBOL(sigtramp_rt32) = get_vdso_symbol ("__kernel_sigtramp_rt32");
&linux2615);
#endif #endif
} }

View File

@ -18,6 +18,7 @@
#ifndef _LINUX_POWERPC_SYSDEP_H #ifndef _LINUX_POWERPC_SYSDEP_H
#define _LINUX_POWERPC_SYSDEP_H 1 #define _LINUX_POWERPC_SYSDEP_H 1
#include <sysdeps/unix/sysv/linux/powerpc/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h> #include <sysdeps/unix/sysv/linux/sysdep.h>
#include <sysdeps/unix/powerpc/sysdep.h> #include <sysdeps/unix/powerpc/sysdep.h>
#include <tls.h> #include <tls.h>
@ -144,12 +145,6 @@
sc_ret; \ 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) \ # define LOADARGS_0(name, dummy) \
r0 = name r0 = name
# define LOADARGS_1(name, __arg1) \ # define LOADARGS_1(name, __arg1) \

View File

@ -20,6 +20,7 @@
#ifndef _LINUX_POWERPC_SYSDEP_H #ifndef _LINUX_POWERPC_SYSDEP_H
#define _LINUX_POWERPC_SYSDEP_H 1 #define _LINUX_POWERPC_SYSDEP_H 1
#include <sysdeps/unix/sysv/linux/powerpc/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h> #include <sysdeps/unix/sysv/linux/sysdep.h>
#include <sysdeps/unix/powerpc/sysdep.h> #include <sysdeps/unix/powerpc/sysdep.h>
#include <tls.h> #include <tls.h>
@ -60,11 +61,6 @@
sc_ret; \ 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 /* 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 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 normally. It will never touch errno. This returns just what the kernel

View File

@ -0,0 +1,25 @@
/* 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

View File

@ -66,9 +66,8 @@ time_syscall (time_t *t)
return result; return result;
} }
# define INIT_ARCH() \ # define INIT_ARCH() \
PREPARE_VERSION_KNOWN (linux2615, LINUX_2_6_15); \ void *vdso_time = get_vdso_symbol ("__kernel_time");
void *vdso_time = _dl_vdso_vsym ("__kernel_time", &linux2615);
/* If the vDSO is not available we fall back to the syscall. */ /* If the vDSO is not available we fall back to the syscall. */
libc_ifunc_hidden (__redirect_time, time, libc_ifunc_hidden (__redirect_time, time,

View File

@ -38,9 +38,7 @@ __riscv_flush_icache_syscall (void *start, void *end, unsigned long int flags)
static func_type static func_type
__lookup_riscv_flush_icache (void) __lookup_riscv_flush_icache (void)
{ {
PREPARE_VERSION_KNOWN (linux_version, LINUX_4_15); func_type func = get_vdso_symbol ("__vdso_flush_icache");
func_type func = _dl_vdso_vsym ("__vdso_flush_icache", &linux_version);
/* If there is no vDSO entry then call the system call directly. All Linux /* 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 versions provide the vDSO entry, but QEMU's user-mode emulation doesn't

View File

@ -32,21 +32,19 @@ long int (*VDSO_SYMBOL (clock_getres)) (clockid_t, struct timespec *)
static inline void static inline void
_libc_vdso_platform_setup (void) _libc_vdso_platform_setup (void)
{ {
PREPARE_VERSION_KNOWN (linux_version, LINUX_4_15); void *p = get_vdso_symbol ("__vdso_getcpu");
void *p = _dl_vdso_vsym ("__vdso_getcpu", &linux_version);
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (getcpu) = p; VDSO_SYMBOL (getcpu) = p;
p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux_version); p = get_vdso_symbol ("__vdso_gettimeofday");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p; VDSO_SYMBOL (gettimeofday) = p;
p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux_version); p = get_vdso_symbol ("__vdso_clock_gettime");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = 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); PTR_MANGLE (p);
VDSO_SYMBOL (clock_getres) = p; VDSO_SYMBOL (clock_getres) = p;
} }

View File

@ -121,6 +121,9 @@
#ifndef __ASSEMBLER__ #ifndef __ASSEMBLER__
# define VDSO_NAME "LINUX_4.15"
# define VDSO_HASH 182943605
/* List of system calls which are supported as vsyscalls. */ /* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETRES_VSYSCALL 1 # define HAVE_CLOCK_GETRES_VSYSCALL 1
# define HAVE_CLOCK_GETTIME_VSYSCALL 1 # define HAVE_CLOCK_GETTIME_VSYSCALL 1

View File

@ -34,21 +34,19 @@ long int (*VDSO_SYMBOL(getcpu)) (unsigned *, unsigned *, void *)
static inline void static inline void
_libc_vdso_platform_setup (void) _libc_vdso_platform_setup (void)
{ {
PREPARE_VERSION_KNOWN (linux2629, LINUX_2_6_29); void *p = get_vdso_symbol ("__kernel_gettimeofday");
void *p = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2629);
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p; VDSO_SYMBOL (gettimeofday) = p;
p = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2629); p = get_vdso_symbol ("__kernel_clock_gettime");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p; VDSO_SYMBOL (clock_gettime) = p;
p = _dl_vdso_vsym ("__kernel_clock_getres", &linux2629); p = get_vdso_symbol ("__kernel_clock_getres");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (clock_getres) = p; VDSO_SYMBOL (clock_getres) = p;
p = _dl_vdso_vsym ("__kernel_getcpu", &linux2629); p = get_vdso_symbol ("__kernel_getcpu");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (getcpu) = p; VDSO_SYMBOL (getcpu) = p;
} }

View File

@ -21,6 +21,7 @@
#include <sysdeps/s390/s390-32/sysdep.h> #include <sysdeps/s390/s390-32/sysdep.h>
#include <sysdeps/unix/sysdep.h> #include <sysdeps/unix/sysdep.h>
#include <sysdeps/unix/sysv/linux/s390/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h> #include <sysdeps/unix/sysv/linux/sysdep.h>
#include <dl-sysdep.h> /* For RTLD_PRIVATE_ERRNO. */ #include <dl-sysdep.h> /* For RTLD_PRIVATE_ERRNO. */
#include <tls.h> #include <tls.h>
@ -271,12 +272,6 @@
#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6) #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) #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. */ /* Pointer mangling support. */
#if IS_IN (rtld) #if IS_IN (rtld)
/* We cannot use the thread descriptor because in ld.so we use setjmp /* We cannot use the thread descriptor because in ld.so we use setjmp

View File

@ -22,6 +22,7 @@
#include <sysdeps/s390/s390-64/sysdep.h> #include <sysdeps/s390/s390-64/sysdep.h>
#include <sysdeps/unix/sysdep.h> #include <sysdeps/unix/sysdep.h>
#include <sysdeps/unix/sysv/linux/s390/sysdep.h>
#include <sysdeps/unix/sysv/linux/sysdep.h> #include <sysdeps/unix/sysv/linux/sysdep.h>
#include <dl-sysdep.h> /* For RTLD_PRIVATE_ERRNO. */ #include <dl-sysdep.h> /* For RTLD_PRIVATE_ERRNO. */
#include <tls.h> #include <tls.h>
@ -277,12 +278,6 @@
#define ASMFMT_5 , "0" (gpr2), "d" (gpr3), "d" (gpr4), "d" (gpr5), "d" (gpr6) #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) #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 #define SINGLE_THREAD_BY_GLOBAL 1
/* Pointer mangling support. */ /* Pointer mangling support. */

View File

@ -0,0 +1,26 @@
/* Syscall definitions, Linux s390 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.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

View File

@ -28,13 +28,11 @@ long int (*VDSO_SYMBOL (clock_gettime)) (clockid_t, struct timespec *)
static inline void static inline void
_libc_vdso_platform_setup (void) _libc_vdso_platform_setup (void)
{ {
PREPARE_VERSION_KNOWN (linux_version, LINUX_2_6); void *p = get_vdso_symbol ("__vdso_gettimeofday");
void *p = _dl_vdso_vsym ("__vdso_gettimeofday", &linux_version);
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (gettimeofday) = p; VDSO_SYMBOL (gettimeofday) = p;
p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux_version); p = get_vdso_symbol ("__vdso_clock_gettime");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL (clock_gettime) = p; VDSO_SYMBOL (clock_gettime) = p;
} }

View File

@ -41,6 +41,9 @@
_ret; \ _ret; \
}) })
# define VDSO_NAME "LINUX_2.6"
# define VDSO_HASH 61765110
/* List of system calls which are supported as vsyscalls. */ /* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETTIME_VSYSCALL 1 # define HAVE_CLOCK_GETTIME_VSYSCALL 1
# define HAVE_GETTIMEOFDAY_VSYSCALL 1 # define HAVE_GETTIMEOFDAY_VSYSCALL 1

View File

@ -22,6 +22,8 @@
# include <dl-vdso.h> # include <dl-vdso.h>
# include <errno.h> # include <errno.h>
# include <sysdep-vdso.h>
# include <sysdep-vdso.h>
static int static int
__gettimeofday_syscall (struct timeval *tv, struct timezone *tz) __gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
@ -36,12 +38,11 @@ __gettimeofday_syscall (struct timeval *tv, struct timezone *tz)
# define __gettimeofday_type __gettimeofday # define __gettimeofday_type __gettimeofday
# endif # endif
# undef INIT_ARCH # define INIT_ARCH()
# define INIT_ARCH() PREPARE_VERSION_KNOWN (linux26, LINUX_2_6)
/* If the vDSO is not available we fall back to syscall. */ /* If the vDSO is not available we fall back to syscall. */
libc_ifunc_hidden (__gettimeofday_type, __gettimeofday, libc_ifunc_hidden (__gettimeofday_type, __gettimeofday,
(_dl_vdso_vsym ("__vdso_gettimeofday", &linux26) (get_vdso_symbol ("__vdso_gettimeofday")
?: &__gettimeofday_syscall)) ?: __gettimeofday_syscall));
libc_hidden_def (__gettimeofday) libc_hidden_def (__gettimeofday)
#else #else

View File

@ -22,6 +22,7 @@
#include <dl-vdso.h> #include <dl-vdso.h>
#include <errno.h> #include <errno.h>
#include <sysdep-vdso.h>
static time_t static time_t
__time_syscall (time_t *t) __time_syscall (time_t *t)
@ -38,11 +39,10 @@ __time_syscall (time_t *t)
# endif # endif
#undef INIT_ARCH #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. */ /* If the vDSO is not available we fall back on the syscall. */
libc_ifunc_hidden (time_type, time, libc_ifunc_hidden (time_type, time,
(_dl_vdso_vsym ("__vdso_time", &linux26) (get_vdso_symbol ("__vdso_time") ?: __time_syscall))
?: &__time_syscall))
libc_hidden_def (time) libc_hidden_def (time)
#else #else

View File

@ -32,15 +32,13 @@ extern __typeof (clock_gettime) __syscall_clock_gettime attribute_hidden;
static inline void static inline void
__vdso_platform_setup (void) __vdso_platform_setup (void)
{ {
PREPARE_VERSION_KNOWN (linux26, LINUX_2_6); void *p = get_vdso_symbol ("__vdso_clock_gettime");
void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
if (p == NULL) if (p == NULL)
p = __syscall_clock_gettime; p = __syscall_clock_gettime;
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL(clock_gettime) = p; VDSO_SYMBOL(clock_gettime) = p;
p = _dl_vdso_vsym ("__vdso_getcpu", &linux26); p = get_vdso_symbol ("__vdso_getcpu");
PTR_MANGLE (p); PTR_MANGLE (p);
VDSO_SYMBOL(getcpu) = p; VDSO_SYMBOL(getcpu) = p;
} }

View File

@ -370,6 +370,9 @@
# undef INTERNAL_SYSCALL_ERRNO # undef INTERNAL_SYSCALL_ERRNO
# define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) # 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. */ /* List of system calls which are supported as vsyscalls. */
# define HAVE_CLOCK_GETTIME_VSYSCALL 1 # define HAVE_CLOCK_GETTIME_VSYSCALL 1
# define HAVE_GETTIMEOFDAY_VSYSCALL 1 # define HAVE_GETTIMEOFDAY_VSYSCALL 1