about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--sysdeps/unix/sysv/linux/clock_gettime.c10
2 files changed, 12 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 55201ca127..cb5f6c67ee 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2007-08-12  Ulrich Drepper  <drepper@redhat.com>
 
+	* sysdeps/unix/sysv/linux/clock_gettime.c (maybe_syscall_gettime_cpu):
+	Build fix for systems which might lack POSIX timer support.
+
 	* sysdeps/unix/sysv/linux/x86_64/libc-start.c
 	(_libc_vdso_platform_setup): Mangle function pointers before storing
 	them.
diff --git a/sysdeps/unix/sysv/linux/clock_gettime.c b/sysdeps/unix/sysv/linux/clock_gettime.c
index 5afe20feb5..cd536a0fc0 100644
--- a/sysdeps/unix/sysv/linux/clock_gettime.c
+++ b/sysdeps/unix/sysv/linux/clock_gettime.c
@@ -1,5 +1,5 @@
 /* clock_gettime -- Get current time from a POSIX clockid_t.  Linux version.
-   Copyright (C) 2003,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 2003,2004,2005,2006,2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -133,11 +133,19 @@ maybe_syscall_gettime_cpu (clockid_t clock_id, struct timespec *tp)
 	{
 	  if (e == EINVAL)
 	    {
+# ifdef HAVE_CLOCK_GETRES_VSYSCALL
 	      /* Check whether the kernel supports CPU clocks at all.
 		 If not, record it for the future.  */
 	      r = INTERNAL_VSYSCALL (clock_getres, err, 2,
+				     MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED),
+				     NULL);
+# else
+	      /* Check whether the kernel supports CPU clocks at all.
+		 If not, record it for the future.  */
+	      r = INTERNAL_SYSCALL (clock_getres, err, 2,
 				    MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED),
 				    NULL);
+# endif
 	      if (INTERNAL_SYSCALL_ERROR_P (r, err))
 		__libc_missing_posix_cpu_timers = 1;
 	    }