diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2012-08-30 23:31:39 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2012-08-30 23:31:39 +0200 |
commit | 16a92d2765c5732abb64742cb5d387148e0ac629 (patch) | |
tree | abbbadbf54f87eed25f71a312e43ce7f7cb7adfe /sysdeps/generic | |
parent | 9a231435f830c459c0e214c2b99877e2ed6edb56 (diff) | |
parent | 0096579c8bea920f7c42b40ea22db621da6480a5 (diff) |
Merge commit 'refs/top-bases/t/fix_inline' into t/fix_inlinet/fix_inline
Conflicts:
sysdeps/l4/hurd/pt-sysdep.h
Diffstat (limited to 'sysdeps/generic')
30 files changed, 100 insertions, 34 deletions
diff --git a/sysdeps/generic/bits/pthreadtypes.h b/sysdeps/generic/bits/pthreadtypes.h index e5cbfd2..70368ff 100644 --- a/sysdeps/generic/bits/pthreadtypes.h +++ b/sysdeps/generic/bits/pthreadtypes.h @@ -24,6 +24,6 @@ #ifndef _BITS_PTHREADTYPES_H #define _BITS_PTHREADTYPES_H 1 -#include <pthread.h> +#include <pthread/pthreadtypes.h> #endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/generic/pt-attr-destroy.c b/sysdeps/generic/pt-attr-destroy.c index c4b9aa5..b9bd374 100644 --- a/sysdeps/generic/pt-attr-destroy.c +++ b/sysdeps/generic/pt-attr-destroy.c @@ -21,7 +21,8 @@ #include <pt-internal.h> int -pthread_attr_destroy (pthread_attr_t *attr) +__pthread_attr_destroy (pthread_attr_t *attr) { return 0; } +strong_alias (__pthread_attr_destroy, pthread_attr_destroy); diff --git a/sysdeps/generic/pt-attr-getdetachstate.c b/sysdeps/generic/pt-attr-getdetachstate.c index be406f1..b50f913 100644 --- a/sysdeps/generic/pt-attr-getdetachstate.c +++ b/sysdeps/generic/pt-attr-getdetachstate.c @@ -21,9 +21,11 @@ #include <pt-internal.h> int -pthread_attr_getdetachstate (const pthread_attr_t *attr, +__pthread_attr_getdetachstate (const pthread_attr_t *attr, int *detachstate) { *detachstate = attr->detachstate; return 0; } + +strong_alias (__pthread_attr_getdetachstate, pthread_attr_getdetachstate); diff --git a/sysdeps/generic/pt-attr-getinheritsched.c b/sysdeps/generic/pt-attr-getinheritsched.c index cca4e3d..7f1f601 100644 --- a/sysdeps/generic/pt-attr-getinheritsched.c +++ b/sysdeps/generic/pt-attr-getinheritsched.c @@ -21,9 +21,11 @@ #include <pt-internal.h> int -pthread_attr_getinheritsched (const pthread_attr_t *attr, +__pthread_attr_getinheritsched (const pthread_attr_t *attr, int *inheritsched) { *inheritsched = attr->inheritsched; return 0; } + +strong_alias (__pthread_attr_getinheritsched, pthread_attr_getinheritsched); diff --git a/sysdeps/generic/pt-attr-getschedparam.c b/sysdeps/generic/pt-attr-getschedparam.c index 190cf9d..4519b69 100644 --- a/sysdeps/generic/pt-attr-getschedparam.c +++ b/sysdeps/generic/pt-attr-getschedparam.c @@ -24,9 +24,11 @@ #include <pt-internal.h> int -pthread_attr_getschedparam (const pthread_attr_t *attr, +__pthread_attr_getschedparam (const pthread_attr_t *attr, struct sched_param *param) { memcpy (param, &attr->schedparam, sizeof *param); return 0; } + +strong_alias (__pthread_attr_getschedparam, pthread_attr_getschedparam); diff --git a/sysdeps/generic/pt-attr-getschedpolicy.c b/sysdeps/generic/pt-attr-getschedpolicy.c index 4349a23..0980bdd 100644 --- a/sysdeps/generic/pt-attr-getschedpolicy.c +++ b/sysdeps/generic/pt-attr-getschedpolicy.c @@ -21,9 +21,11 @@ #include <pt-internal.h> int -pthread_attr_getschedpolicy (const pthread_attr_t *attr, +__pthread_attr_getschedpolicy (const pthread_attr_t *attr, int *policy) { *policy = attr->schedpolicy; return 0; } + +strong_alias (__pthread_attr_getschedpolicy, pthread_attr_getschedpolicy); diff --git a/sysdeps/generic/pt-attr-getscope.c b/sysdeps/generic/pt-attr-getscope.c index 97198fa..46eb604 100644 --- a/sysdeps/generic/pt-attr-getscope.c +++ b/sysdeps/generic/pt-attr-getscope.c @@ -21,9 +21,11 @@ #include <pt-internal.h> int -pthread_attr_getscope (const pthread_attr_t *attr, +__pthread_attr_getscope (const pthread_attr_t *attr, int *contentionscope) { *contentionscope = attr->contentionscope; return 0; } + +strong_alias (__pthread_attr_getscope, pthread_attr_getscope); diff --git a/sysdeps/generic/pt-attr-init.c b/sysdeps/generic/pt-attr-init.c index 6a930e3..f9eb361 100644 --- a/sysdeps/generic/pt-attr-init.c +++ b/sysdeps/generic/pt-attr-init.c @@ -21,8 +21,9 @@ #include <pt-internal.h> int -pthread_attr_init (pthread_attr_t *attr) +__pthread_attr_init (pthread_attr_t *attr) { *attr = __pthread_default_attr; return 0; } +strong_alias (__pthread_attr_init, pthread_attr_init); diff --git a/sysdeps/generic/pt-attr-setdetachstate.c b/sysdeps/generic/pt-attr-setdetachstate.c index 688ba5d..abd6bbb 100644 --- a/sysdeps/generic/pt-attr-setdetachstate.c +++ b/sysdeps/generic/pt-attr-setdetachstate.c @@ -21,7 +21,7 @@ #include <pt-internal.h> int -pthread_attr_setdetachstate (pthread_attr_t *attr, +__pthread_attr_setdetachstate (pthread_attr_t *attr, int detachstate) { switch (detachstate) @@ -36,3 +36,5 @@ pthread_attr_setdetachstate (pthread_attr_t *attr, return 0; } + +strong_alias (__pthread_attr_setdetachstate, pthread_attr_setdetachstate); diff --git a/sysdeps/generic/pt-attr-setinheritsched.c b/sysdeps/generic/pt-attr-setinheritsched.c index e9012c5..9fdbd4e 100644 --- a/sysdeps/generic/pt-attr-setinheritsched.c +++ b/sysdeps/generic/pt-attr-setinheritsched.c @@ -21,7 +21,7 @@ #include <pt-internal.h> int -pthread_attr_setinheritsched (pthread_attr_t *attr, +__pthread_attr_setinheritsched (pthread_attr_t *attr, int inheritsched) { switch (inheritsched) @@ -36,3 +36,5 @@ pthread_attr_setinheritsched (pthread_attr_t *attr, return 0; } + +strong_alias (__pthread_attr_setinheritsched, pthread_attr_setinheritsched); diff --git a/sysdeps/generic/pt-attr-setschedparam.c b/sysdeps/generic/pt-attr-setschedparam.c index 5459f10..2fd1d3a 100644 --- a/sysdeps/generic/pt-attr-setschedparam.c +++ b/sysdeps/generic/pt-attr-setschedparam.c @@ -24,7 +24,7 @@ #include <pt-internal.h> int -pthread_attr_setschedparam (pthread_attr_t *attr, +__pthread_attr_setschedparam (pthread_attr_t *attr, const struct sched_param *param) { if (memcmp (param, &__pthread_default_attr.schedparam, @@ -36,3 +36,5 @@ pthread_attr_setschedparam (pthread_attr_t *attr, return ENOTSUP; } + +strong_alias (__pthread_attr_setschedparam, pthread_attr_setschedparam); diff --git a/sysdeps/generic/pt-attr-setschedpolicy.c b/sysdeps/generic/pt-attr-setschedpolicy.c index e481d04..04e93c9 100644 --- a/sysdeps/generic/pt-attr-setschedpolicy.c +++ b/sysdeps/generic/pt-attr-setschedpolicy.c @@ -21,7 +21,7 @@ #include <pt-internal.h> int -pthread_attr_setschedpolicy (pthread_attr_t *attr, +__pthread_attr_setschedpolicy (pthread_attr_t *attr, int policy) { switch (policy) @@ -40,3 +40,5 @@ pthread_attr_setschedpolicy (pthread_attr_t *attr, return 0; } + +strong_alias (__pthread_attr_setschedpolicy, pthread_attr_setschedpolicy); diff --git a/sysdeps/generic/pt-attr-setscope.c b/sysdeps/generic/pt-attr-setscope.c index c74a4f6..d86d7b5 100644 --- a/sysdeps/generic/pt-attr-setscope.c +++ b/sysdeps/generic/pt-attr-setscope.c @@ -21,7 +21,7 @@ #include <pt-internal.h> int -pthread_attr_setscope (pthread_attr_t *attr, +__pthread_attr_setscope (pthread_attr_t *attr, int contentionscope) { if (contentionscope == __pthread_default_attr.contentionscope) @@ -39,3 +39,5 @@ pthread_attr_setscope (pthread_attr_t *attr, return EINVAL; } } + +strong_alias (__pthread_attr_setscope, pthread_attr_setscope); diff --git a/sysdeps/generic/pt-attr.c b/sysdeps/generic/pt-attr.c index 769f292..e501dc7 100644 --- a/sysdeps/generic/pt-attr.c +++ b/sysdeps/generic/pt-attr.c @@ -32,7 +32,7 @@ const struct __pthread_attr __pthread_default_attr = #ifdef PAGESIZE guardsize: PAGESIZE, #else - guardsize: 0, + guardsize: 1, #endif /* PAGESIZE */ detachstate: PTHREAD_CREATE_JOINABLE, inheritsched: PTHREAD_EXPLICIT_SCHED, diff --git a/sysdeps/generic/pt-cond-brdcast.c b/sysdeps/generic/pt-cond-brdcast.c index 3f55e33..999cc2d 100644 --- a/sysdeps/generic/pt-cond-brdcast.c +++ b/sysdeps/generic/pt-cond-brdcast.c @@ -23,7 +23,7 @@ /* Unblock all threads that are blocked on condition variable COND. */ int -pthread_cond_broadcast (pthread_cond_t *cond) +__pthread_cond_broadcast (pthread_cond_t *cond) { struct __pthread *wakeup; @@ -40,3 +40,5 @@ pthread_cond_broadcast (pthread_cond_t *cond) return 0; } + +strong_alias (__pthread_cond_broadcast, pthread_cond_broadcast); diff --git a/sysdeps/generic/pt-cond-destroy.c b/sysdeps/generic/pt-cond-destroy.c index eba4778..d72ea75 100644 --- a/sysdeps/generic/pt-cond-destroy.c +++ b/sysdeps/generic/pt-cond-destroy.c @@ -21,7 +21,9 @@ #include <pt-internal.h> int -pthread_cond_destroy (pthread_cond_t *cond) +__pthread_cond_destroy (pthread_cond_t *cond) { return 0; } + +strong_alias (__pthread_cond_destroy, pthread_cond_destroy); diff --git a/sysdeps/generic/pt-cond-init.c b/sysdeps/generic/pt-cond-init.c index b9e9fb7..350f2eb 100644 --- a/sysdeps/generic/pt-cond-init.c +++ b/sysdeps/generic/pt-cond-init.c @@ -24,7 +24,7 @@ #include <pt-internal.h> int -pthread_cond_init (pthread_cond_t *cond, +__pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *attr) { *cond = (pthread_cond_t) __PTHREAD_COND_INITIALIZER; @@ -43,3 +43,5 @@ pthread_cond_init (pthread_cond_t *cond, *cond->__attr = *attr; return 0; } + +strong_alias (__pthread_cond_init, pthread_cond_init); diff --git a/sysdeps/generic/pt-cond-signal.c b/sysdeps/generic/pt-cond-signal.c index c5e1bc1..d7c91e6 100644 --- a/sysdeps/generic/pt-cond-signal.c +++ b/sysdeps/generic/pt-cond-signal.c @@ -46,9 +46,11 @@ cond_signal (struct __pthread_cond *cond, int *unblocked) /* Unblock at least one of the threads that are blocked on condition variable COND. */ int -pthread_cond_signal (pthread_cond_t *cond) +__pthread_cond_signal (pthread_cond_t *cond) { int unblocked = 0; return cond_signal (cond, &unblocked); } + +strong_alias (__pthread_cond_signal, pthread_cond_signal); diff --git a/sysdeps/generic/pt-cond-timedwait.c b/sysdeps/generic/pt-cond-timedwait.c index c10bdb3..56eb1ec 100644 --- a/sysdeps/generic/pt-cond-timedwait.c +++ b/sysdeps/generic/pt-cond-timedwait.c @@ -26,13 +26,15 @@ extern int __pthread_cond_timedwait_internal (pthread_cond_t *cond, const struct timespec *abstime); int -pthread_cond_timedwait (pthread_cond_t *cond, +__pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime) { return __pthread_cond_timedwait_internal (cond, mutex, abstime); } +strong_alias (__pthread_cond_timedwait, pthread_cond_timedwait); + /* Block on condition variable COND until ABSTIME. As a GNU extension, if ABSTIME is NULL, then wait forever. MUTEX should be held by the calling thread. On return, MUTEX will be held by the @@ -44,6 +46,7 @@ __pthread_cond_timedwait_internal (pthread_cond_t *cond, { error_t err; int canceltype; + clockid_t clock_id = __pthread_default_condattr.clock; void cleanup (void *arg) { @@ -66,6 +69,8 @@ __pthread_cond_timedwait_internal (pthread_cond_t *cond, /* Add ourselves to the list of waiters. */ __pthread_spin_lock (&cond->__lock); __pthread_enqueue (&cond->__queue, self); + if (cond->__attr) + clock_id = cond->__attr->clock; __pthread_spin_unlock (&cond->__lock); __pthread_mutex_unlock (mutex); @@ -77,7 +82,7 @@ __pthread_cond_timedwait_internal (pthread_cond_t *cond, if (abstime) { - err = __pthread_timedblock (self, abstime); + err = __pthread_timedblock (self, abstime, clock_id); if (err) /* We timed out. We may need to disconnect ourself from the waiter queue. diff --git a/sysdeps/generic/pt-cond-wait.c b/sysdeps/generic/pt-cond-wait.c index a03476d..38a2ae6 100644 --- a/sysdeps/generic/pt-cond-wait.c +++ b/sysdeps/generic/pt-cond-wait.c @@ -31,7 +31,9 @@ extern int __pthread_cond_timedwait_internal (pthread_cond_t *cond, calling thread. On return, MUTEX will be held by the calling thread. */ int -pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex) +__pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex) { return __pthread_cond_timedwait_internal (cond, mutex, 0); } + +strong_alias (__pthread_cond_wait, pthread_cond_wait); diff --git a/sysdeps/generic/pt-condattr-destroy.c b/sysdeps/generic/pt-condattr-destroy.c index c8fd71b..9fd55b1 100644 --- a/sysdeps/generic/pt-condattr-destroy.c +++ b/sysdeps/generic/pt-condattr-destroy.c @@ -21,7 +21,9 @@ #include <pt-internal.h> int -pthread_condattr_destroy (pthread_condattr_t *cond) +__pthread_condattr_destroy (pthread_condattr_t *cond) { return 0; } + +strong_alias (__pthread_condattr_destroy, pthread_condattr_destroy); diff --git a/sysdeps/generic/pt-condattr-init.c b/sysdeps/generic/pt-condattr-init.c index cf9e198..8570fd1 100644 --- a/sysdeps/generic/pt-condattr-init.c +++ b/sysdeps/generic/pt-condattr-init.c @@ -21,8 +21,10 @@ #include <pt-internal.h> int -pthread_condattr_init (pthread_condattr_t *attr) +__pthread_condattr_init (pthread_condattr_t *attr) { *attr = __pthread_default_condattr; return 0; } + +strong_alias (__pthread_condattr_init, pthread_condattr_init); diff --git a/sysdeps/generic/pt-condattr-setclock.c b/sysdeps/generic/pt-condattr-setclock.c index 984c17e..c5a78ef 100644 --- a/sysdeps/generic/pt-condattr-setclock.c +++ b/sysdeps/generic/pt-condattr-setclock.c @@ -23,11 +23,30 @@ int pthread_condattr_setclock (pthread_condattr_t *attr, clockid_t clock) { - if (__pthread_default_condattr.clock == clock) + /* Only a few clocks are allowed. CLOCK_REALTIME is always allowed. + CLOCK_MONOTONIC only if the kernel has the necessary support. */ + if (clock == CLOCK_MONOTONIC) { - attr->clock = clock; - return 0; + /* Check whether the clock is available. */ + static int avail; + + if (avail == 0) + { + struct timespec ts; + int res; + + res = clock_getres (CLOCK_MONOTONIC, &ts); + avail = res < 0 ? -1 : 1; + } + + if (avail < 0) + /* Not available. */ + return EINVAL; } + else if (clock != CLOCK_REALTIME) + return EINVAL; + + attr->clock = clock; - return EINVAL; + return 0; } diff --git a/sysdeps/generic/pt-equal.c b/sysdeps/generic/pt-equal.c index 8fbc519..72fc7e6 100644 --- a/sysdeps/generic/pt-equal.c +++ b/sysdeps/generic/pt-equal.c @@ -23,7 +23,9 @@ /* Return true if __T1 and __T2 both name the same thread. Otherwise, false. */ int -pthread_equal (pthread_t __t1, pthread_t __t2) +__pthread_equal (pthread_t __t1, pthread_t __t2) { return __t1 == __t2; } + +strong_alias (__pthread_equal, pthread_equal); diff --git a/sysdeps/generic/pt-getschedparam.c b/sysdeps/generic/pt-getschedparam.c index c128d02..6ec45fe 100644 --- a/sysdeps/generic/pt-getschedparam.c +++ b/sysdeps/generic/pt-getschedparam.c @@ -21,8 +21,10 @@ #include <pt-internal.h> int -pthread_getschedparam (pthread_t thread, int *policy, +__pthread_getschedparam (pthread_t thread, int *policy, struct sched_param *param) { return ENOSYS; } + +strong_alias (__pthread_getschedparam, pthread_getschedparam); diff --git a/sysdeps/generic/pt-mutex-timedlock.c b/sysdeps/generic/pt-mutex-timedlock.c index 883e50a..48bffaf 100644 --- a/sysdeps/generic/pt-mutex-timedlock.c +++ b/sysdeps/generic/pt-mutex-timedlock.c @@ -130,7 +130,7 @@ __pthread_mutex_timedlock_internal (struct __pthread_mutex *mutex, { error_t err; - err = __pthread_timedblock (self, abstime); + err = __pthread_timedblock (self, abstime, CLOCK_REALTIME); if (err) /* We timed out. We may need to disconnect ourself from the waiter queue. diff --git a/sysdeps/generic/pt-rwlock-timedrdlock.c b/sysdeps/generic/pt-rwlock-timedrdlock.c index ba610fa..a110213 100644 --- a/sysdeps/generic/pt-rwlock-timedrdlock.c +++ b/sysdeps/generic/pt-rwlock-timedrdlock.c @@ -73,7 +73,7 @@ __pthread_rwlock_timedrdlock_internal (struct __pthread_rwlock *rwlock, { error_t err; - err = __pthread_timedblock (self, abstime); + err = __pthread_timedblock (self, abstime, CLOCK_REALTIME); if (err) /* We timed out. We may need to disconnect ourself from the waiter queue. diff --git a/sysdeps/generic/pt-rwlock-timedwrlock.c b/sysdeps/generic/pt-rwlock-timedwrlock.c index 04eab51..a5cc579 100644 --- a/sysdeps/generic/pt-rwlock-timedwrlock.c +++ b/sysdeps/generic/pt-rwlock-timedwrlock.c @@ -59,7 +59,7 @@ __pthread_rwlock_timedwrlock_internal (struct __pthread_rwlock *rwlock, { error_t err; - err = __pthread_timedblock (self, abstime); + err = __pthread_timedblock (self, abstime, CLOCK_REALTIME); if (err) /* We timed out. We may need to disconnect ourself from the waiter queue. diff --git a/sysdeps/generic/pt-setschedparam.c b/sysdeps/generic/pt-setschedparam.c index a70b079..14aeb0c 100644 --- a/sysdeps/generic/pt-setschedparam.c +++ b/sysdeps/generic/pt-setschedparam.c @@ -21,8 +21,10 @@ #include <pt-internal.h> int -pthread_setschedparam (pthread_t thread, int policy, +__pthread_setschedparam (pthread_t thread, int policy, const struct sched_param *param) { return ENOSYS; } + +strong_alias (__pthread_setschedparam, pthread_setschedparam); diff --git a/sysdeps/generic/sem-timedwait.c b/sysdeps/generic/sem-timedwait.c index e34539a..94e6dee 100644 --- a/sysdeps/generic/sem-timedwait.c +++ b/sysdeps/generic/sem-timedwait.c @@ -55,7 +55,7 @@ __sem_timedwait_internal (sem_t *restrict sem, { error_t err; - err = __pthread_timedblock (self, timeout); + err = __pthread_timedblock (self, timeout, CLOCK_REALTIME); if (err) /* We timed out. We may need to disconnect ourself from the waiter queue. |