+2007-08-12 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/x86_64/libc-start.c
+ (_libc_vdso_platform_setup): Mangle function pointers before storing
+ them.
+ * sysdeps/unix/sysv/linux/x86_64/sysdep.h (INLINE_VSYSCALL):
+ Demangle vdso pointer before use.
+ (INTERNAL_VSYSCALL): Likewise.
+
+ * elf/cache.c (primes): Mark as const.
+ Noted by Roland McGrath.
+
2007-08-01 Andreas Jaeger <aj@suse.de>
Jakub Jelinek <jakub@redhat.com>
/* After this the string table of size len_strings is found. */
};
-static unsigned int primes[] =
+static const unsigned int primes[] =
{
1021, 2039, 4093, 8191, 16381, 32749, 65521, 131071, 262139,
524287, 1048573, 2097143, 4194301, 8388593, 16777213, 33554393,
{
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
- __vdso_gettimeofday = _dl_vdso_vsym ("gettimeofday", &linux26);
+ void *p = _dl_vdso_vsym ("gettimeofday", &linux26);
+ PTR_MANGLE (p);
+ __vdso_gettimeofday = p;
- __vdso_clock_gettime = _dl_vdso_vsym ("clock_gettime", &linux26);
+ p = _dl_vdso_vsym ("clock_gettime", &linux26);
+ PTR_MANGLE (p);
+ __vdso_clock_gettime = p;
}
# define VDSO_SETUP _libc_vdso_platform_setup
INTERNAL_SYSCALL_DECL (sc_err); \
long int sc_ret; \
\
- if (__vdso_##name != NULL) \
+ __typeof (__vdso_##name) vdsop = __vdso_##name; \
+ PTR_DEMANGLE (vdsop); \
+ if (vdsop != NULL) \
{ \
- sc_ret = __vdso_##name (args); \
+ sc_ret = vdsop (args); \
if (!INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \
goto out; \
if (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err) != ENOSYS) \
__label__ out; \
long int v_ret; \
\
- if (__vdso_##name != NULL) \
+ __typeof (__vdso_##name) vdsop = __vdso_##name; \
+ PTR_DEMANGLE (vdsop); \
+ if (vdsop != NULL) \
{ \
- v_ret = __vdso_##name (args); \
+ v_ret = vdsop (args); \
if (!INTERNAL_SYSCALL_ERROR_P (v_ret, err) \
|| INTERNAL_SYSCALL_ERRNO (v_ret, err) != ENOSYS) \
goto out; \