aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2007-08-13 00:23:59 +0000
committerUlrich Drepper <drepper@redhat.com>2007-08-13 00:23:59 +0000
commit3c87d79db7ae1f65294d088be7709140780b652c (patch)
tree603151b0786c63510e4e3f85bb019bb7da9aa312 /sysdeps/unix
parent974a1f0fb2fa441152dfda9acb4c3898f67eea6a (diff)
downloadglibc-3c87d79db7ae1f65294d088be7709140780b652c.tar
glibc-3c87d79db7ae1f65294d088be7709140780b652c.tar.gz
glibc-3c87d79db7ae1f65294d088be7709140780b652c.tar.bz2
glibc-3c87d79db7ae1f65294d088be7709140780b652c.zip
* 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.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/libc-start.c8
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/sysdep.h12
2 files changed, 14 insertions, 6 deletions
diff --git a/sysdeps/unix/sysv/linux/x86_64/libc-start.c b/sysdeps/unix/sysv/linux/x86_64/libc-start.c
index 08b1c497c8..0ce47952d7 100644
--- a/sysdeps/unix/sysv/linux/x86_64/libc-start.c
+++ b/sysdeps/unix/sysv/linux/x86_64/libc-start.c
@@ -30,9 +30,13 @@ _libc_vdso_platform_setup (void)
{
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
diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
index 61701a2869..44d5650549 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
@@ -264,9 +264,11 @@
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) \
@@ -288,9 +290,11 @@
__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; \