Make sure __vdso_clock_gettime always contains a valid pointer

This commit is contained in:
Ulrich Drepper 2011-09-07 00:07:08 -04:00
parent fc8bffcccf
commit e38ba7ab6a
3 changed files with 16 additions and 0 deletions

View File

@ -1,3 +1,11 @@
2011-09-07 Ulrich Drepper <drepper@gmail.com>
* sysdeps/unix/sysv/linux/x86_64/init-first.c
(_libc_vdso_platform_setup): If vDSO is not present store pointer to
syscall wrapper around clock_gettime in __vdso_clock_gettime.
* sysdeps/unix/sysv/linux/x86_64/syscalls.list: Add entry for
clock_gettime.
2011-09-06 Ulrich Drepper <drepper@gmail.com> 2011-09-06 Ulrich Drepper <drepper@gmail.com>
* sysdeps/unix/sysv/linux/x86_64/clock_gettime.c (INTERNAL_GETTIME): * sysdeps/unix/sysv/linux/x86_64/clock_gettime.c (INTERNAL_GETTIME):

View File

@ -17,6 +17,8 @@
02111-1307 USA. */ 02111-1307 USA. */
#ifdef SHARED #ifdef SHARED
# include <time.h>
# include <sysdep.h>
# include <dl-vdso.h> # include <dl-vdso.h>
# include <bits/libc-vdso.h> # include <bits/libc-vdso.h>
@ -27,12 +29,17 @@ strong_alias (__vdso_clock_gettime, __GI___vdso_clock_gettime attribute_hidden)
long int (*__vdso_getcpu) (unsigned *, unsigned *, void *) attribute_hidden; long int (*__vdso_getcpu) (unsigned *, unsigned *, void *) attribute_hidden;
extern long int __syscall_clock_gettime (clockid_t, struct timespec *);
static inline void static inline void
_libc_vdso_platform_setup (void) _libc_vdso_platform_setup (void)
{ {
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110); PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
void *p = _dl_vdso_vsym ("clock_gettime", &linux26); void *p = _dl_vdso_vsym ("clock_gettime", &linux26);
if (p == NULL)
p = __syscall_clock_gettime;
PTR_MANGLE (p); PTR_MANGLE (p);
__GI___vdso_clock_gettime = p; __GI___vdso_clock_gettime = p;

View File

@ -14,6 +14,7 @@ semop - semop i:ipi __semop semop
semtimedop - semtimedop i:ipip semtimedop semtimedop - semtimedop i:ipip semtimedop
semget - semget i:iii __semget semget semget - semget i:iii __semget semget
semctl - semctl i:iiii __semctl semctl semctl - semctl i:iiii __semctl semctl
syscall_clock_gettime EXTRA clock_gettime Ei:ip __syscall_clock_gettime
# proper socket implementations: # proper socket implementations: