* 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.
This commit is contained in:
Ulrich Drepper 2007-08-13 00:23:59 +00:00
parent 974a1f0fb2
commit 3c87d79db7
4 changed files with 27 additions and 7 deletions

View File

@ -1,3 +1,15 @@
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> 2007-08-01 Andreas Jaeger <aj@suse.de>
Jakub Jelinek <jakub@redhat.com> Jakub Jelinek <jakub@redhat.com>

View File

@ -547,7 +547,7 @@ struct aux_cache_file
/* After this the string table of size len_strings is found. */ /* 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, 1021, 2039, 4093, 8191, 16381, 32749, 65521, 131071, 262139,
524287, 1048573, 2097143, 4194301, 8388593, 16777213, 33554393, 524287, 1048573, 2097143, 4194301, 8388593, 16777213, 33554393,

View File

@ -30,9 +30,13 @@ _libc_vdso_platform_setup (void)
{ {
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110); 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 # define VDSO_SETUP _libc_vdso_platform_setup

View File

@ -264,9 +264,11 @@
INTERNAL_SYSCALL_DECL (sc_err); \ INTERNAL_SYSCALL_DECL (sc_err); \
long int sc_ret; \ 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)) \ if (!INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \
goto out; \ goto out; \
if (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err) != ENOSYS) \ if (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err) != ENOSYS) \
@ -288,9 +290,11 @@
__label__ out; \ __label__ out; \
long int v_ret; \ 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) \ if (!INTERNAL_SYSCALL_ERROR_P (v_ret, err) \
|| INTERNAL_SYSCALL_ERRNO (v_ret, err) != ENOSYS) \ || INTERNAL_SYSCALL_ERRNO (v_ret, err) != ENOSYS) \
goto out; \ goto out; \