diff --git a/libgcc/config/gthr-vxworks-cond.c b/libgcc/config/gthr-vxworks-cond.c index 65f0a6af183a..ba384b433c43 100644 --- a/libgcc/config/gthr-vxworks-cond.c +++ b/libgcc/config/gthr-vxworks-cond.c @@ -26,6 +26,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see This file implements the GTHREAD_HAS_COND part of the interface exposed by gthr-vxworks.h. */ +#if __GTHREAD_HAS_COND + #include "gthr.h" #include @@ -79,3 +81,5 @@ __gthread_cond_wait_recursive (__gthread_cond_t *cond, { return __gthread_cond_wait (cond, mutex); } + +#endif diff --git a/libgcc/config/gthr-vxworks.h b/libgcc/config/gthr-vxworks.h index e38174730bf0..d49809a9c2cb 100644 --- a/libgcc/config/gthr-vxworks.h +++ b/libgcc/config/gthr-vxworks.h @@ -234,6 +234,12 @@ extern int __gthread_setspecific (__gthread_key_t __key, void *__ptr); /* ------------------ Base condition variables support ------------------- */ +/* VxWorks prio to 6 misses a few services key to a correct + implementation of condition variables with reasonable complexity. + semExchange in particular. */ + +#if _VXWORKS_MAJOR_GE(6) + #define __GTHREAD_HAS_COND 1 typedef SEM_ID __gthread_cond_t; @@ -254,6 +260,8 @@ extern int __gthread_cond_wait (__gthread_cond_t *cond, extern int __gthread_cond_wait_recursive (__gthread_cond_t *cond, __gthread_recursive_mutex_t *mutex); +#endif + /* ----------------------- C++0x thread support ------------------------- */ /* We do not support C++0x threads on that VxWorks 653, which we can