about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/x86_64/sysdep.h
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/sysv/linux/x86_64/sysdep.h
parent974a1f0fb2fa441152dfda9acb4c3898f67eea6a (diff)
downloadglibc-3c87d79db7ae1f65294d088be7709140780b652c.tar.gz
glibc-3c87d79db7ae1f65294d088be7709140780b652c.tar.xz
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/sysv/linux/x86_64/sysdep.h')
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/sysdep.h12
1 files changed, 8 insertions, 4 deletions
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;							      \