aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/generic/memusage.h16
-rw-r--r--sysdeps/mach/hurd/getitimer.c11
-rw-r--r--sysdeps/mach/hurd/setitimer.c13
-rw-r--r--sysdeps/mach/hurd/times.c7
-rw-r--r--sysdeps/mach/nanosleep.c36
-rw-r--r--sysdeps/mach/usleep.c5
-rw-r--r--sysdeps/posix/tempname.c9
-rw-r--r--sysdeps/posix/timespec_get.c14
-rw-r--r--sysdeps/pthread/aio_misc.c6
-rw-r--r--sysdeps/pthread/aio_suspend.c6
-rw-r--r--sysdeps/unix/make-syscalls.sh2
11 files changed, 64 insertions, 61 deletions
diff --git a/sysdeps/generic/memusage.h b/sysdeps/generic/memusage.h
index 400fe23..88b291e 100644
--- a/sysdeps/generic/memusage.h
+++ b/sysdeps/generic/memusage.h
@@ -26,14 +26,14 @@
#endif
#ifndef GETTIME
-# define GETTIME(low,high) \
- { \
- struct timeval tval; \
- uint64_t usecs; \
- gettimeofday (&tval, NULL); \
- usecs = (uint64_t) tval.tv_usec + (uint64_t) tval.tv_usec * 1000000; \
- low = usecs & 0xffffffff; \
- high = usecs >> 32; \
+# define GETTIME(low,high) \
+ { \
+ struct timespec now; \
+ uint64_t usecs; \
+ clock_gettime (CLOCK_REALTIME, &now); \
+ usecs = (uint64_t)now.tv_nsec / 1000 + (uint64_t)now.tv_sec * 1000000; \
+ low = usecs & 0xffffffff; \
+ high = usecs >> 32; \
}
#endif
diff --git a/sysdeps/mach/hurd/getitimer.c b/sysdeps/mach/hurd/getitimer.c
index f332f0e..0982357 100644
--- a/sysdeps/mach/hurd/getitimer.c
+++ b/sysdeps/mach/hurd/getitimer.c
@@ -19,8 +19,9 @@
#include <errno.h>
#include <sys/time.h>
#include <hurd.h>
+#include <mach.h>
-/* XXX Temporary cheezoid implementation; see __setitmr.c. */
+/* XXX Temporary cheezoid implementation; see setitimer.c. */
/* These are defined in __setitmr.c. */
extern spin_lock_t _hurd_itimer_lock;
@@ -61,8 +62,12 @@ __getitimer (enum __itimer_which which, struct itimerval *value)
}
/* Get the time now. */
- if (__gettimeofday (&elapsed, NULL) < 0)
- return -1;
+ {
+ time_value_t tv;
+ __host_get_time (__mach_host_self (), &tv);
+ elapsed.tv_sec = tv.seconds;
+ elapsed.tv_usec = tv.microseconds;
+ }
/* Extract the current timer setting; and the time it was set, so we can
calculate the time elapsed so far. */
diff --git a/sysdeps/mach/hurd/setitimer.c b/sysdeps/mach/hurd/setitimer.c
index 34b4339..2aab365 100644
--- a/sysdeps/mach/hurd/setitimer.c
+++ b/sysdeps/mach/hurd/setitimer.c
@@ -23,6 +23,7 @@
#include <hurd/signal.h>
#include <hurd/sigpreempt.h>
#include <hurd/msg_request.h>
+#include <mach.h>
#include <mach/message.h>
/* XXX Temporary cheezoid implementation of ITIMER_REAL/SIGALRM. */
@@ -243,12 +244,12 @@ setitimer_locked (const struct itimerval *new, struct itimerval *old,
if ((newval.it_value.tv_sec | newval.it_value.tv_usec) != 0 || old != NULL)
{
/* Calculate how much time is remaining for the pending alarm. */
- if (__gettimeofday (&now, NULL) < 0)
- {
- __spin_unlock (&_hurd_itimer_lock);
- _hurd_critical_section_unlock (crit);
- return -1;
- }
+ {
+ time_value_t tv;
+ __host_get_time (__mach_host_self (), &tv);
+ now.tv_sec = tv.seconds;
+ now.tv_usec = tv.microseconds;
+ }
elapsed = now;
subtract_timeval (&elapsed, &_hurd_itimer_started);
remaining = _hurd_itimerval.it_value;
diff --git a/sysdeps/mach/hurd/times.c b/sysdeps/mach/hurd/times.c
index 3aac803..56a0062 100644
--- a/sysdeps/mach/hurd/times.c
+++ b/sysdeps/mach/hurd/times.c
@@ -42,7 +42,7 @@ __times (struct tms *tms)
struct task_basic_info bi;
struct task_thread_times_info tti;
mach_msg_type_number_t count;
- union { time_value_t tvt; struct timeval tv; } now;
+ time_value_t now;
error_t err;
count = TASK_BASIC_INFO_COUNT;
@@ -65,10 +65,9 @@ __times (struct tms *tms)
/* XXX This can't be implemented until getrusage(RUSAGE_CHILDREN) can be. */
tms->tms_cutime = tms->tms_cstime = 0;
- if (__gettimeofday (&now.tv, NULL) < 0)
- return -1;
+ __host_get_time (__mach_host_self (), &now);
- return (clock_from_time_value (&now.tvt)
+ return (clock_from_time_value (&now)
- clock_from_time_value (&bi.creation_time));
}
weak_alias (__times, times)
diff --git a/sysdeps/mach/nanosleep.c b/sysdeps/mach/nanosleep.c
index 555251f..b60a217 100644
--- a/sysdeps/mach/nanosleep.c
+++ b/sysdeps/mach/nanosleep.c
@@ -18,16 +18,26 @@
#include <errno.h>
#include <mach.h>
-#include <sys/time.h>
#include <time.h>
#include <unistd.h>
+# define timespec_sub(a, b, result) \
+ do { \
+ (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
+ (result)->tv_nsec = (a)->tv_nsec - (b)->tv_nsec; \
+ if ((result)->tv_nsec < 0) { \
+ --(result)->tv_sec; \
+ (result)->tv_nsec += 1000000000; \
+ } \
+ } while (0)
+
int
__libc_nanosleep (const struct timespec *requested_time,
- struct timespec *remaining)
+ struct timespec *remaining)
{
mach_port_t recv;
- struct timeval before, after;
+ struct timespec before;
+ error_t err;
if (requested_time->tv_sec < 0
|| ! valid_nanoseconds (requested_time->tv_nsec))
@@ -42,20 +52,20 @@ __libc_nanosleep (const struct timespec *requested_time,
recv = __mach_reply_port ();
- if (remaining && __gettimeofday (&before, NULL) < 0)
- return -1;
- error_t err = __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT,
- 0, 0, recv, ms, MACH_PORT_NULL);
+ if (remaining != 0)
+ __clock_gettime (CLOCK_REALTIME, &before);
+
+ err = __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT,
+ 0, 0, recv, ms, MACH_PORT_NULL);
__mach_port_destroy (mach_task_self (), recv);
if (err == EMACH_RCV_INTERRUPTED)
{
- if (remaining && __gettimeofday (&after, NULL) >= 0)
+ if (remaining != 0)
{
- struct timeval req_time, elapsed, rem;
- TIMESPEC_TO_TIMEVAL (&req_time, requested_time);
- timersub (&after, &before, &elapsed);
- timersub (&req_time, &elapsed, &rem);
- TIMEVAL_TO_TIMESPEC (&rem, remaining);
+ struct timespec after, elapsed;
+ __clock_gettime (CLOCK_REALTIME, &after);
+ timespec_sub (&after, &before, &elapsed);
+ timespec_sub (requested_time, &elapsed, remaining);
}
errno = EINTR;
diff --git a/sysdeps/mach/usleep.c b/sysdeps/mach/usleep.c
index 3b79857..578540d 100644
--- a/sysdeps/mach/usleep.c
+++ b/sysdeps/mach/usleep.c
@@ -25,17 +25,12 @@ int
usleep (useconds_t useconds)
{
mach_port_t recv;
- struct timeval before, after;
recv = __mach_reply_port ();
- if (__gettimeofday (&before, NULL) < 0)
- return -1;
(void) __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT,
0, 0, recv, (useconds + 999) / 1000, MACH_PORT_NULL);
__mach_port_destroy (mach_task_self (), recv);
- if (__gettimeofday (&after, NULL) < 0)
- return -1;
return 0;
}
diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c
index a248472..692c336 100644
--- a/sysdeps/posix/tempname.c
+++ b/sysdeps/posix/tempname.c
@@ -50,7 +50,7 @@
#include <string.h>
#include <fcntl.h>
-#include <sys/time.h>
+#include <time.h>
#include <stdint.h>
#include <unistd.h>
@@ -63,7 +63,6 @@
# define struct_stat64 struct stat
# define __gen_tempname gen_tempname
# define __getpid getpid
-# define __gettimeofday gettimeofday
# define __mkdir mkdir
# define __open open
# define __lxstat64(version, file, buf) lstat (file, buf)
@@ -76,9 +75,9 @@
# else
# define RANDOM_BITS(Var) \
{ \
- struct timeval tv; \
- __gettimeofday (&tv, NULL); \
- (Var) = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \
+ struct timespec ts; \
+ clock_gettime (CLOCK_REALTIME, &ts); \
+ (Var) = ((uint64_t) tv.tv_nsec << 16) ^ tv.tv_sec; \
}
#endif
diff --git a/sysdeps/posix/timespec_get.c b/sysdeps/posix/timespec_get.c
index 1fc18ac..e3146da 100644
--- a/sysdeps/posix/timespec_get.c
+++ b/sysdeps/posix/timespec_get.c
@@ -23,16 +23,10 @@
int
timespec_get (struct timespec *ts, int base)
{
- switch (base)
+ if (base == TIME_UTC)
{
- case TIME_UTC:
- if (__clock_gettime (CLOCK_REALTIME, ts) < 0)
- return 0;
- break;
-
- default:
- return 0;
+ __clock_gettime (CLOCK_REALTIME, ts);
+ return base;
}
-
- return base;
+ return 0;
}
diff --git a/sysdeps/pthread/aio_misc.c b/sysdeps/pthread/aio_misc.c
index 6ff0132..65b4b1a 100644
--- a/sysdeps/pthread/aio_misc.c
+++ b/sysdeps/pthread/aio_misc.c
@@ -614,13 +614,13 @@ handle_fildes_io (void *arg)
something to arrive in it. */
if (runp == NULL && optim.aio_idle_time >= 0)
{
- struct timeval now;
+ struct timespec now;
struct timespec wakeup_time;
++idle_thread_count;
- __gettimeofday (&now, NULL);
+ __clock_gettime (CLOCK_REALTIME, &now);
wakeup_time.tv_sec = now.tv_sec + optim.aio_idle_time;
- wakeup_time.tv_nsec = now.tv_usec * 1000;
+ wakeup_time.tv_nsec = now.tv_nsec;
if (wakeup_time.tv_nsec >= 1000000000)
{
wakeup_time.tv_nsec -= 1000000000;
diff --git a/sysdeps/pthread/aio_suspend.c b/sysdeps/pthread/aio_suspend.c
index ad654e1..bb324a5 100644
--- a/sysdeps/pthread/aio_suspend.c
+++ b/sysdeps/pthread/aio_suspend.c
@@ -183,11 +183,11 @@ aio_suspend (const struct aiocb *const list[], int nent,
{
/* We have to convert the relative timeout value into an
absolute time value with pthread_cond_timedwait expects. */
- struct timeval now;
+ struct timespec now;
struct timespec abstime;
- __gettimeofday (&now, NULL);
- abstime.tv_nsec = timeout->tv_nsec + now.tv_usec * 1000;
+ __clock_gettime (CLOCK_REALTIME, &now);
+ abstime.tv_nsec = timeout->tv_nsec + now.tv_nsec;
abstime.tv_sec = timeout->tv_sec + now.tv_sec;
if (abstime.tv_nsec >= 1000000000)
{
diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
index b49e6b6..fe24bbc 100644
--- a/sysdeps/unix/make-syscalls.sh
+++ b/sysdeps/unix/make-syscalls.sh
@@ -27,7 +27,7 @@
# n: scalar buffer length (e.g., 3rd arg to read)
# N: pointer to value/return scalar buffer length (e.g., 6th arg to recvfrom)
# p: non-NULL pointer to typed object (e.g., any non-void* arg)
-# P: optionally-NULL pointer to typed object (e.g., 2nd argument to gettimeofday)
+# P: optionally-NULL pointer to typed object (e.g., 3rd argument to sigaction)
# s: non-NULL string (e.g., 1st arg to open)
# S: optionally-NULL string (e.g., 1st arg to acct)
# v: vararg scalar (e.g., optional 3rd arg to open)