diff options
-rw-r--r-- | boehm-gc/ChangeLog | 5 | ||||
-rwxr-xr-x | boehm-gc/configure | 2 | ||||
-rw-r--r-- | boehm-gc/configure.ac | 2 | ||||
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rwxr-xr-x | gcc/configure | 2 | ||||
-rw-r--r-- | gcc/configure.ac | 2 | ||||
-rw-r--r-- | gcc/doc/install.texi | 2 | ||||
-rw-r--r-- | gcc/gthr-posix95.h | 733 | ||||
-rw-r--r-- | gcc/gthr.h | 3 | ||||
-rw-r--r-- | libgomp/ChangeLog | 4 | ||||
-rw-r--r-- | libgomp/config/posix95/lock.c | 316 | ||||
-rw-r--r-- | libgomp/config/posix95/omp-lock.h | 21 | ||||
-rw-r--r-- | libjava/ChangeLog | 5 | ||||
-rwxr-xr-x | libjava/configure | 2 | ||||
-rw-r--r-- | libjava/configure.ac | 2 |
15 files changed, 29 insertions, 1081 deletions
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 34e3882e506..15f079dd3a2 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,8 @@ +2011-08-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * configure.ac (THREADS): Remove posix95. + * configure: Regenerate. + 2011-07-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> PR target/39150 diff --git a/boehm-gc/configure b/boehm-gc/configure index 66bb3e7f06a..632a229cdf2 100755 --- a/boehm-gc/configure +++ b/boehm-gc/configure @@ -14712,7 +14712,7 @@ case "$THREADS" in no | none | single) THREADS=none ;; - posix | posix95 | pthreads) + posix | pthreads) THREADS=posix THREADLIBS=-lpthread case "$host" in diff --git a/boehm-gc/configure.ac b/boehm-gc/configure.ac index 799959a0e0f..a741ca6d27a 100644 --- a/boehm-gc/configure.ac +++ b/boehm-gc/configure.ac @@ -129,7 +129,7 @@ case "$THREADS" in no | none | single) THREADS=none ;; - posix | posix95 | pthreads) + posix | pthreads) THREADS=posix THREADLIBS=-lpthread case "$host" in diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 79d104eba8d..f98765f5c7a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-08-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gthr-posix95.h: Remove. + * gthr.h [_PTHREADS95]: Remove. + * configure.ac (enable_threads): Remove posix95. + * configure: Regenerate. + * doc/install.texi (Configuration, --enable-threads): Remove + posix95. + 2011-08-07 Uros Bizjak <ubizjak@gmail.com> PR target/49781 diff --git a/gcc/configure b/gcc/configure index 8ffe93ac79e..94daddcd40c 100755 --- a/gcc/configure +++ b/gcc/configure @@ -11098,7 +11098,7 @@ case ${enable_threads} in # default target_thread_file='single' ;; - aix | dce | lynx | mipssde | posix | posix95 | rtems | \ + aix | dce | lynx | mipssde | posix | rtems | \ single | tpf | vxworks | win32) target_thread_file=${enable_threads} ;; diff --git a/gcc/configure.ac b/gcc/configure.ac index a897b81943c..ed019046358 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1354,7 +1354,7 @@ case ${enable_threads} in # default target_thread_file='single' ;; - aix | dce | lynx | mipssde | posix | posix95 | rtems | \ + aix | dce | lynx | mipssde | posix | rtems | \ single | tpf | vxworks | win32) target_thread_file=${enable_threads} ;; diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 9b1b037c02a..83a7361386f 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1145,8 +1145,6 @@ MIPS SDE thread support. This is an alias for @samp{single}. @item posix Generic POSIX/Unix98 thread support. -@item posix95 -Generic POSIX/Unix95 thread support. @item rtems RTEMS thread support. @item single diff --git a/gcc/gthr-posix95.h b/gcc/gthr-posix95.h deleted file mode 100644 index 31f6421577b..00000000000 --- a/gcc/gthr-posix95.h +++ /dev/null @@ -1,733 +0,0 @@ -/* Threads compatibility routines for libgcc2 and libobjc. */ -/* Compile this one with gcc. */ -/* Copyright (C) 2004, 2005, 2007, 2008, 2009, 2010 - Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 3, or (at your option) any later -version. - -GCC is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -Under Section 7 of GPL version 3, you are granted additional -permissions described in the GCC Runtime Library Exception, version -3.1, as published by the Free Software Foundation. - -You should have received a copy of the GNU General Public License and -a copy of the GCC Runtime Library Exception along with this program; -see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -<http://www.gnu.org/licenses/>. */ - -#ifndef GCC_GTHR_POSIX_H -#define GCC_GTHR_POSIX_H - -/* POSIX threads specific definitions. - Easy, since the interface is just one-to-one mapping. */ - -#define __GTHREADS 1 - -/* Some implementations of <pthread.h> require this to be defined. */ -#ifndef _REENTRANT -#define _REENTRANT 1 -#endif - -#include <pthread.h> -#include <unistd.h> - -typedef pthread_key_t __gthread_key_t; -typedef pthread_once_t __gthread_once_t; -typedef pthread_mutex_t __gthread_mutex_t; -typedef pthread_cond_t __gthread_cond_t; - -/* POSIX like conditional variables are supported. Please look at comments - in gthr.h for details. */ -#define __GTHREAD_HAS_COND 1 - -typedef struct { - long depth; - pthread_t owner; - pthread_mutex_t actual; -} __gthread_recursive_mutex_t; - -#define __GTHREAD_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER -#define __GTHREAD_ONCE_INIT PTHREAD_ONCE_INIT -#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function -#define __GTHREAD_COND_INIT PTHREAD_COND_INITIALIZER - -#if SUPPORTS_WEAK && GTHREAD_USE_WEAK -# define __gthrw(name) \ - static __typeof(name) __gthrw_ ## name __attribute__ ((__weakref__(#name))); -# define __gthrw_(name) __gthrw_ ## name -#else -# define __gthrw(name) -# define __gthrw_(name) name -#endif - -__gthrw(pthread_once) -__gthrw(pthread_key_create) -__gthrw(pthread_key_delete) -__gthrw(pthread_getspecific) -__gthrw(pthread_setspecific) -__gthrw(pthread_create) -__gthrw(pthread_cancel) -__gthrw(pthread_self) - -__gthrw(pthread_mutex_init) -__gthrw(pthread_mutex_destroy) -__gthrw(pthread_mutex_lock) -__gthrw(pthread_mutex_trylock) -__gthrw(pthread_mutex_unlock) -__gthrw(pthread_mutexattr_init) -__gthrw(pthread_mutexattr_destroy) - -__gthrw(pthread_cond_broadcast) -__gthrw(pthread_cond_wait) - -#if defined(_LIBOBJC) || defined(_LIBOBJC_WEAK) -/* Objective-C. */ -__gthrw(pthread_cond_destroy) -__gthrw(pthread_cond_init) -__gthrw(pthread_cond_signal) -__gthrw(pthread_exit) -#ifdef _POSIX_PRIORITY_SCHEDULING -#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING -__gthrw(sched_get_priority_max) -__gthrw(sched_get_priority_min) -#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ -#endif /* _POSIX_PRIORITY_SCHEDULING */ -__gthrw(sched_yield) -__gthrw(pthread_attr_destroy) -__gthrw(pthread_attr_init) -__gthrw(pthread_attr_setdetachstate) -#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING -__gthrw(pthread_getschedparam) -__gthrw(pthread_setschedparam) -#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ -#endif /* _LIBOBJC || _LIBOBJC_WEAK */ - -#if SUPPORTS_WEAK && GTHREAD_USE_WEAK - -/* On Solaris 2.6 up to 9, the libc exposes a POSIX threads interface even if - -pthreads is not specified. The functions are dummies and most return an - error value. However pthread_once returns 0 without invoking the routine - it is passed so we cannot pretend that the interface is active if -pthreads - is not specified. On Solaris 2.5.1, the interface is not exposed at all so - we need to play the usual game with weak symbols. On Solaris 10 and up, a - working interface is always exposed. On FreeBSD 6 and later, libc also - exposes a dummy POSIX threads interface, similar to what Solaris 2.6 up - to 9 does. FreeBSD >= 700014 even provides a pthread_cancel stub in libc, - which means the alternate __gthread_active_p below cannot be used there. */ - -#if defined(__FreeBSD__) || (defined(__sun) && defined(__svr4__)) - -static volatile int __gthread_active = -1; - -static void -__gthread_trigger (void) -{ - __gthread_active = 1; -} - -static inline int -__gthread_active_p (void) -{ - static pthread_mutex_t __gthread_active_mutex = PTHREAD_MUTEX_INITIALIZER; - static pthread_once_t __gthread_active_once = PTHREAD_ONCE_INIT; - - /* Avoid reading __gthread_active twice on the main code path. */ - int __gthread_active_latest_value = __gthread_active; - - /* This test is not protected to avoid taking a lock on the main code - path so every update of __gthread_active in a threaded program must - be atomic with regard to the result of the test. */ - if (__builtin_expect (__gthread_active_latest_value < 0, 0)) - { - if (__gthrw_(pthread_once)) - { - /* If this really is a threaded program, then we must ensure that - __gthread_active has been set to 1 before exiting this block. */ - __gthrw_(pthread_mutex_lock) (&__gthread_active_mutex); - __gthrw_(pthread_once) (&__gthread_active_once, __gthread_trigger); - __gthrw_(pthread_mutex_unlock) (&__gthread_active_mutex); - } - - /* Make sure we'll never enter this block again. */ - if (__gthread_active < 0) - __gthread_active = 0; - - __gthread_active_latest_value = __gthread_active; - } - - return __gthread_active_latest_value != 0; -} - -#else /* neither FreeBSD nor Solaris */ - -static inline int -__gthread_active_p (void) -{ - static void *const __gthread_active_ptr - = __extension__ (void *) &__gthrw_(pthread_cancel); - return __gthread_active_ptr != 0; -} - -#endif /* FreeBSD or Solaris */ - -#else /* not SUPPORTS_WEAK */ - -/* Similar to Solaris, HP-UX 11 for PA-RISC provides stubs for pthread - calls in shared flavors of the HP-UX C library. Most of the stubs - have no functionality. The details are described in the "libc cumulative - patch" for each subversion of HP-UX 11. There are two special interfaces - provided for checking whether an application is linked to a shared pthread - library or not. However, these interfaces aren't available in early - pthread libraries. We also need a test that works for archive - libraries. We can't use pthread_once as some libc versions call the - init function. We also can't use pthread_create or pthread_attr_init - as these create a thread and thereby prevent changing the default stack - size. The function pthread_default_stacksize_np is available in both - the archive and shared versions of libpthread. It can be used to - determine the default pthread stack size. There is a stub in some - shared libc versions which returns a zero size if pthreads are not - active. We provide an equivalent stub to handle cases where libc - doesn't provide one. */ - -#if defined(__hppa__) && defined(__hpux__) - -static volatile int __gthread_active = -1; - -static inline int -__gthread_active_p (void) -{ - /* Avoid reading __gthread_active twice on the main code path. */ - int __gthread_active_latest_value = __gthread_active; - size_t __s; - - if (__builtin_expect (__gthread_active_latest_value < 0, 0)) - { - pthread_default_stacksize_np (0, &__s); - __gthread_active = __s ? 1 : 0; - __gthread_active_latest_value = __gthread_active; - } - - return __gthread_active_latest_value != 0; -} - -#else /* not hppa-hpux */ - -static inline int -__gthread_active_p (void) -{ - return 1; -} - -#endif /* hppa-hpux */ - -#endif /* SUPPORTS_WEAK */ - -#ifdef _LIBOBJC - -/* This is the config.h file in libobjc/ */ -#include <config.h> - -#ifdef HAVE_SCHED_H -# include <sched.h> -#endif - -/* Key structure for maintaining thread specific storage */ -static pthread_key_t _objc_thread_storage; -static pthread_attr_t _objc_thread_attribs; - -/* Thread local storage for a single thread */ -static void *thread_local_storage = NULL; - -/* Backend initialization functions */ - -/* Initialize the threads subsystem. */ -static inline int -__gthread_objc_init_thread_system (void) -{ - if (__gthread_active_p ()) - { - /* Initialize the thread storage key. */ - if (__gthrw_(pthread_key_create) (&_objc_thread_storage, NULL) == 0) - { - /* The normal default detach state for threads is - * PTHREAD_CREATE_JOINABLE which causes threads to not die - * when you think they should. */ - if (__gthrw_(pthread_attr_init) (&_objc_thread_attribs) == 0 - && __gthrw_(pthread_attr_setdetachstate) (&_objc_thread_attribs, - PTHREAD_CREATE_DETACHED) == 0) - return 0; - } - } - - return -1; -} - -/* Close the threads subsystem. */ -static inline int -__gthread_objc_close_thread_system (void) -{ - if (__gthread_active_p () - && __gthrw_(pthread_key_delete) (_objc_thread_storage) == 0 - && __gthrw_(pthread_attr_destroy) (&_objc_thread_attribs) == 0) - return 0; - - return -1; -} - -/* Backend thread functions */ - -/* Create a new thread of execution. */ -static inline objc_thread_t -__gthread_objc_thread_detach (void (*func)(void *), void *arg) -{ - objc_thread_t thread_id; - pthread_t new_thread_handle; - - if (!__gthread_active_p ()) - return NULL; - - if (!(__gthrw_(pthread_create) (&new_thread_handle, &_objc_thread_attribs, - (void *) func, arg))) - thread_id = (objc_thread_t) new_thread_handle; - else - thread_id = NULL; - - return thread_id; -} - -/* Set the current thread's priority. */ -static inline int -__gthread_objc_thread_set_priority (int priority) -{ - if (!__gthread_active_p ()) - return -1; - else - { -#ifdef _POSIX_PRIORITY_SCHEDULING -#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING - pthread_t thread_id = __gthrw_(pthread_self) (); - int policy; - struct sched_param params; - int priority_min, priority_max; - - if (__gthrw_(pthread_getschedparam) (thread_id, &policy, ¶ms) == 0) - { - if ((priority_max = __gthrw_(sched_get_priority_max) (policy)) == -1) - return -1; - - if ((priority_min = __gthrw_(sched_get_priority_min) (policy)) == -1) - return -1; - - if (priority > priority_max) - priority = priority_max; - else if (priority < priority_min) - priority = priority_min; - params.sched_priority = priority; - - /* - * The solaris 7 and several other man pages incorrectly state that - * this should be a pointer to policy but pthread.h is universally - * at odds with this. - */ - if (__gthrw_(pthread_setschedparam) (thread_id, policy, ¶ms) == 0) - return 0; - } -#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ -#endif /* _POSIX_PRIORITY_SCHEDULING */ - return -1; - } -} - -/* Return the current thread's priority. */ -static inline int -__gthread_objc_thread_get_priority (void) -{ -#ifdef _POSIX_PRIORITY_SCHEDULING -#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING - if (__gthread_active_p ()) - { - int policy; - struct sched_param params; - - if (__gthrw_(pthread_getschedparam) (__gthrw_(pthread_self) (), &policy, ¶ms) == 0) - return params.sched_priority; - else - return -1; - } - else -#endif /* _POSIX_THREAD_PRIORITY_SCHEDULING */ -#endif /* _POSIX_PRIORITY_SCHEDULING */ - return OBJC_THREAD_INTERACTIVE_PRIORITY; -} - -/* Yield our process time to another thread. */ -static inline void -__gthread_objc_thread_yield (void) -{ - if (__gthread_active_p ()) - __gthrw_(sched_yield) (); -} - -/* Terminate the current thread. */ -static inline int -__gthread_objc_thread_exit (void) -{ - if (__gthread_active_p ()) - /* exit the thread */ - __gthrw_(pthread_exit) (&__objc_thread_exit_status); - - /* Failed if we reached here */ - return -1; -} - -/* Returns an integer value which uniquely describes a thread. */ -static inline objc_thread_t -__gthread_objc_thread_id (void) -{ - if (__gthread_active_p ()) - return (objc_thread_t) __gthrw_(pthread_self) (); - else - return (objc_thread_t) 1; -} - -/* Sets the thread's local storage pointer. */ -static inline int -__gthread_objc_thread_set_data (void *value) -{ - if (__gthread_active_p ()) - return __gthrw_(pthread_setspecific) (_objc_thread_storage, value); - else - { - thread_local_storage = value; - return 0; - } -} - -/* Returns the thread's local storage pointer. */ -static inline void * -__gthread_objc_thread_get_data (void) -{ - if (__gthread_active_p ()) - return __gthrw_(pthread_getspecific) (_objc_thread_storage); - else - return thread_local_storage; -} - -/* Backend mutex functions */ - -/* Allocate a mutex. */ -static inline int -__gthread_objc_mutex_allocate (objc_mutex_t mutex) -{ - if (__gthread_active_p ()) - { - mutex->backend = objc_malloc (sizeof (pthread_mutex_t)); - - if (__gthrw_(pthread_mutex_init) ((pthread_mutex_t *) mutex->backend, NULL)) - { - objc_free (mutex->backend); - mutex->backend = NULL; - return -1; - } - } - - return 0; -} - -/* Deallocate a mutex. */ -static inline int -__gthread_objc_mutex_deallocate (objc_mutex_t mutex) -{ - if (__gthread_active_p ()) - { - int count; - - /* - * Posix Threads specifically require that the thread be unlocked - * for __gthrw_(pthread_mutex_destroy) to work. - */ - - do - { - count = __gthrw_(pthread_mutex_unlock) ((pthread_mutex_t *) mutex->backend); - if (count < 0) - return -1; - } - while (count); - - if (__gthrw_(pthread_mutex_destroy) ((pthread_mutex_t *) mutex->backend)) - return -1; - - objc_free (mutex->backend); - mutex->backend = NULL; - } - return 0; -} - -/* Grab a lock on a mutex. */ -static inline int -__gthread_objc_mutex_lock (objc_mutex_t mutex) -{ - if (__gthread_active_p () - && __gthrw_(pthread_mutex_lock) ((pthread_mutex_t *) mutex->backend) != 0) - { - return -1; - } - - return 0; -} - -/* Try to grab a lock on a mutex. */ -static inline int -__gthread_objc_mutex_trylock (objc_mutex_t mutex) -{ - if (__gthread_active_p () - && __gthrw_(pthread_mutex_trylock) ((pthread_mutex_t *) mutex->backend) != 0) - { - return -1; - } - - return 0; -} - -/* Unlock the mutex */ -static inline int -__gthread_objc_mutex_unlock (objc_mutex_t mutex) -{ - if (__gthread_active_p () - && __gthrw_(pthread_mutex_unlock) ((pthread_mutex_t *) mutex->backend) != 0) - { - return -1; - } - - return 0; -} - -/* Backend condition mutex functions */ - -/* Allocate a condition. */ -static inline int -__gthread_objc_condition_allocate (objc_condition_t condition) -{ - if (__gthread_active_p ()) - { - condition->backend = objc_malloc (sizeof (pthread_cond_t)); - - if (__gthrw_(pthread_cond_init) ((pthread_cond_t *) condition->backend, NULL)) - { - objc_free (condition->backend); - condition->backend = NULL; - return -1; - } - } - - return 0; -} - -/* Deallocate a condition. */ -static inline int -__gthread_objc_condition_deallocate (objc_condition_t condition) -{ - if (__gthread_active_p ()) - { - if (__gthrw_(pthread_cond_destroy) ((pthread_cond_t *) condition->backend)) - return -1; - - objc_free (condition->backend); - condition->backend = NULL; - } - return 0; -} - -/* Wait on the condition */ -static inline int -__gthread_objc_condition_wait (objc_condition_t condition, objc_mutex_t mutex) -{ - if (__gthread_active_p ()) - return __gthrw_(pthread_cond_wait) ((pthread_cond_t *) condition->backend, - (pthread_mutex_t *) mutex->backend); - else - return 0; -} - -/* Wake up all threads waiting on this condition. */ -static inline int -__gthread_objc_condition_broadcast (objc_condition_t condition) -{ - if (__gthread_active_p ()) - return __gthrw_(pthread_cond_broadcast) ((pthread_cond_t *) condition->backend); - else - return 0; -} - -/* Wake up one thread waiting on this condition. */ -static inline int -__gthread_objc_condition_signal (objc_condition_t condition) -{ - if (__gthread_active_p ()) - return __gthrw_(pthread_cond_signal) ((pthread_cond_t *) condition->backend); - else - return 0; -} - -#else /* _LIBOBJC */ - -static inline int -__gthread_once (__gthread_once_t *__once, void (*__func) (void)) -{ - if (__gthread_active_p ()) - return __gthrw_(pthread_once) (__once, __func); - else - return -1; -} - -static inline int -__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) -{ - return __gthrw_(pthread_key_create) (__key, __dtor); -} - -static inline int -__gthread_key_delete (__gthread_key_t __key) -{ - return __gthrw_(pthread_key_delete) (__key); -} - -static inline void * -__gthread_getspecific (__gthread_key_t __key) -{ - return __gthrw_(pthread_getspecific) (__key); -} - -static inline int -__gthread_setspecific (__gthread_key_t __key, const void *__ptr) -{ - return __gthrw_(pthread_setspecific) (__key, __ptr); -} - -static inline int -__gthread_mutex_destroy (__gthread_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - return __gthrw_(pthread_mutex_destroy) (__mutex); - else - return 0; -} - -static inline int -__gthread_mutex_lock (__gthread_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - return __gthrw_(pthread_mutex_lock) (__mutex); - else - return 0; -} - -static inline int -__gthread_mutex_trylock (__gthread_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - return __gthrw_(pthread_mutex_trylock) (__mutex); - else - return 0; -} - -static inline int -__gthread_mutex_unlock (__gthread_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - return __gthrw_(pthread_mutex_unlock) (__mutex); - else - return 0; -} - -static inline int -__gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex) -{ - __mutex->depth = 0; - __mutex->owner = (pthread_t) 0; - return __gthrw_(pthread_mutex_init) (&__mutex->actual, NULL); -} - -static inline int -__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - { - pthread_t __me = __gthrw_(pthread_self) (); - - if (__mutex->owner != __me) - { - __gthrw_(pthread_mutex_lock) (&__mutex->actual); - __mutex->owner = __me; - } - - __mutex->depth++; - } - return 0; -} - -static inline int -__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - { - pthread_t __me = __gthrw_(pthread_self) (); - - if (__mutex->owner != __me) - { - if (__gthrw_(pthread_mutex_trylock) (&__mutex->actual)) - return 1; - __mutex->owner = __me; - } - - __mutex->depth++; - } - return 0; -} - -static inline int -__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - { - if (--__mutex->depth == 0) - { - __mutex->owner = (pthread_t) 0; - __gthrw_(pthread_mutex_unlock) (&__mutex->actual); - } - } - return 0; -} - -static inline int -__gthread_cond_broadcast (__gthread_cond_t *__cond) -{ - return __gthrw_(pthread_cond_broadcast) (__cond); -} - -static inline int -__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) -{ - return __gthrw_(pthread_cond_wait) (__cond, __mutex); -} - -static inline int -__gthread_cond_wait_recursive (__gthread_cond_t *__cond, - __gthread_recursive_mutex_t *__mutex) -{ - return __gthrw_(pthread_cond_wait) (__cond, &__mutex->actual); -} - -#endif /* _LIBOBJC */ - -#endif /* ! GCC_GTHR_POSIX_H */ diff --git a/gcc/gthr.h b/gcc/gthr.h index 0752f893c4f..0c7bfb17aa3 100644 --- a/gcc/gthr.h +++ b/gcc/gthr.h @@ -135,7 +135,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see Currently supported threads packages are TPF threads with -D__tpf__ POSIX/Unix98 threads with -D_PTHREADS - POSIX/Unix95 threads with -D_PTHREADS95 DCE threads with -D_DCE_THREADS */ @@ -145,8 +144,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "gthr-tpf.h" #elif _PTHREADS #include "gthr-posix.h" -#elif _PTHREADS95 -#include "gthr-posix95.h" #elif _DCE_THREADS #include "gthr-dce.h" diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index ea5951a6bdd..63a8fe1d0ea 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,7 @@ +2011-08-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * config/posix95/lock.c, posix95/omp-lock.h: Remove. + 2011-08-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> PR libgomp/49965 diff --git a/libgomp/config/posix95/lock.c b/libgomp/config/posix95/lock.c deleted file mode 100644 index 22420417c68..00000000000 --- a/libgomp/config/posix95/lock.c +++ /dev/null @@ -1,316 +0,0 @@ -/* Copyright (C) 2006, 2008, 2009 Free Software Foundation, Inc. - - This file is part of the GNU OpenMP Library (libgomp). - - Libgomp is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU General Public License for - more details. - - Under Section 7 of GPL version 3, you are granted additional - permissions described in the GCC Runtime Library Exception, version - 3.1, as published by the Free Software Foundation. - - You should have received a copy of the GNU General Public License and - a copy of the GCC Runtime Library Exception along with this program; - see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - <http://www.gnu.org/licenses/>. */ - -/* This is the POSIX95 implementation of the public OpenMP locking primitives. - - Because OpenMP uses different entry points for normal and recursive - locks, and pthreads uses only one entry point, a system may be able - to do better and streamline the locking as well as reduce the size - of the types exported. */ - -#include "libgomp.h" - -#ifdef HAVE_BROKEN_POSIX_SEMAPHORES -void -gomp_init_lock_30 (omp_lock_t *lock) -{ - pthread_mutex_init (lock, NULL); -} - -void -gomp_destroy_lock_30 (omp_lock_t *lock) -{ - pthread_mutex_destroy (lock); -} - -void -gomp_set_lock_30 (omp_lock_t *lock) -{ - pthread_mutex_lock (lock); -} - -void -gomp_unset_lock_30 (omp_lock_t *lock) -{ - pthread_mutex_unlock (lock); -} - -int -gomp_test_lock_30 (omp_lock_t *lock) -{ - return pthread_mutex_trylock (lock) == 0; -} - -void -gomp_init_nest_lock_30 (omp_nest_lock_t *lock) -{ - pthread_mutex_init (&lock->lock, NULL); - lock->owner = NULL; - lock->count = 0; -} - -void -gomp_destroy_nest_lock_30 (omp_nest_lock_t *lock) -{ - pthread_mutex_destroy (&lock->lock); -} - -void -gomp_set_nest_lock_30 (omp_nest_lock_t *lock) -{ - void *me = gomp_icv (true); - - if (lock->owner != me) - { - pthread_mutex_lock (&lock->lock); - lock->owner = me; - } - - lock->count++; -} - -void -gomp_unset_nest_lock_30 (omp_nest_lock_t *lock) -{ - lock->count--; - - if (lock->count == 0) - { - lock->owner = NULL; - pthread_mutex_unlock (&lock->lock); - } -} - -int -gomp_test_nest_lock_30 (omp_nest_lock_t *lock) -{ - void *me = gomp_icv (true); - - if (lock->owner != me) - { - if (pthread_mutex_trylock (&lock->lock) != 0) - return 0; - lock->owner = me; - } - - return ++lock->count; -} - -#else - -void -gomp_init_lock_30 (omp_lock_t *lock) -{ - sem_init (lock, 0, 1); -} - -void -gomp_destroy_lock_30 (omp_lock_t *lock) -{ - sem_destroy (lock); -} - -void -gomp_set_lock_30 (omp_lock_t *lock) -{ - while (sem_wait (lock) != 0) - ; -} - -void -gomp_unset_lock_30 (omp_lock_t *lock) -{ - sem_post (lock); -} - -int -gomp_test_lock_30 (omp_lock_t *lock) -{ - return sem_trywait (lock) == 0; -} - -void -gomp_init_nest_lock_30 (omp_nest_lock_t *lock) -{ - sem_init (&lock->lock, 0, 1); - lock->count = 0; - lock->owner = NULL; -} - -void -gomp_destroy_nest_lock_30 (omp_nest_lock_t *lock) -{ - sem_destroy (&lock->lock); -} - -void -gomp_set_nest_lock_30 (omp_nest_lock_t *lock) -{ - void *me = gomp_icv (true); - - if (lock->owner != me) - { - while (sem_wait (&lock->lock) != 0) - ; - lock->owner = me; - } - lock->count++; -} - -void -gomp_unset_nest_lock_30 (omp_nest_lock_t *lock) -{ - if (--lock->count == 0) - { - lock->owner = NULL; - sem_post (&lock->lock); - } -} - -int -gomp_test_nest_lock_30 (omp_nest_lock_t *lock) -{ - void *me = gomp_icv (true); - - if (lock->owner != me) - { - if (sem_trywait (&lock->lock) != 0) - return 0; - lock->owner = me; - } - - return ++lock->count; -} -#endif - -#ifdef LIBGOMP_GNU_SYMBOL_VERSIONING -void -gomp_init_lock_25 (omp_lock_25_t *lock) -{ - pthread_mutex_init (lock, NULL); -} - -void -gomp_destroy_lock_25 (omp_lock_25_t *lock) -{ - pthread_mutex_destroy (lock); -} - -void -gomp_set_lock_25 (omp_lock_25_t *lock) -{ - pthread_mutex_lock (lock); -} - -void -gomp_unset_lock_25 (omp_lock_25_t *lock) -{ - pthread_mutex_unlock (lock); -} - -int -gomp_test_lock_25 (omp_lock_25_t *lock) -{ - return pthread_mutex_trylock (lock) == 0; -} - -void -gomp_init_nest_lock_25 (omp_nest_lock_25_t *lock) -{ - pthread_mutex_init (&lock->lock, NULL); - lock->owner = (pthread_t) 0; - lock->count = 0; -} - -void -gomp_destroy_nest_lock_25 (omp_nest_lock_25_t *lock) -{ - pthread_mutex_destroy (&lock->lock); -} - -void -gomp_set_nest_lock_25 (omp_nest_lock_25_t *lock) -{ - pthread_t me = pthread_self (); - - if (lock->owner != me) - { - pthread_mutex_lock (&lock->lock); - lock->owner = me; - } - - lock->count++; -} - -void -gomp_unset_nest_lock_25 (omp_nest_lock_25_t *lock) -{ - lock->count--; - - if (lock->count == 0) - { - lock->owner = (pthread_t) 0; - pthread_mutex_unlock (&lock->lock); - } -} - -int -gomp_test_nest_lock_25 (omp_nest_lock_25_t *lock) -{ - pthread_t me = pthread_self (); - - if (lock->owner != me) - { - if (pthread_mutex_trylock (&lock->lock) != 0) - return 0; - lock->owner = me; - } - - return ++lock->count; -} - -omp_lock_symver (omp_init_lock) -omp_lock_symver (omp_destroy_lock) -omp_lock_symver (omp_set_lock) -omp_lock_symver (omp_unset_lock) -omp_lock_symver (omp_test_lock) -omp_lock_symver (omp_init_nest_lock) -omp_lock_symver (omp_destroy_nest_lock) -omp_lock_symver (omp_set_nest_lock) -omp_lock_symver (omp_unset_nest_lock) -omp_lock_symver (omp_test_nest_lock) - -#else - -ialias (omp_init_lock) -ialias (omp_init_nest_lock) -ialias (omp_destroy_lock) -ialias (omp_destroy_nest_lock) -ialias (omp_set_lock) -ialias (omp_set_nest_lock) -ialias (omp_unset_lock) -ialias (omp_unset_nest_lock) -ialias (omp_test_lock) -ialias (omp_test_nest_lock) - -#endif diff --git a/libgomp/config/posix95/omp-lock.h b/libgomp/config/posix95/omp-lock.h deleted file mode 100644 index b542ba13192..00000000000 --- a/libgomp/config/posix95/omp-lock.h +++ /dev/null @@ -1,21 +0,0 @@ -/* This header is used during the build process to find the size and - alignment of the public OpenMP locks, so that we can export data - structures without polluting the namespace. - - In this POSIX95 implementation, we map the two locks to the - same PTHREADS primitive. */ - -#include <pthread.h> -#include <semaphore.h> - -typedef pthread_mutex_t omp_lock_25_t; -typedef struct { pthread_mutex_t lock; pthread_t owner; int count; } omp_nest_lock_25_t; -#ifdef HAVE_BROKEN_POSIX_SEMAPHORES -/* If we don't have working semaphores, we'll make all explicit tasks - tied to the creating thread. */ -typedef pthread_mutex_t omp_lock_t; -typedef struct { pthread_mutex_t lock; int count; void *owner; } omp_nest_lock_t; -#else -typedef sem_t omp_lock_t; -typedef struct { sem_t lock; int count; void *owner; } omp_nest_lock_t; -#endif diff --git a/libjava/ChangeLog b/libjava/ChangeLog index f6bb404978e..8af4a5faea7 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2011-08-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * configure.ac (THREADS): Remove posix95. + * configure: Regenerate. + 2011-08-05 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * configure.ac (GCC_UNWIND_INCLUDE): Rename to diff --git a/libjava/configure b/libjava/configure index c2779c07c91..b38728e1957 100755 --- a/libjava/configure +++ b/libjava/configure @@ -20697,7 +20697,7 @@ case "$THREADS" in no | none | single) THREADS=none ;; - aix | posix | posix95 | pthreads) + aix | posix | pthreads) THREADS=posix case "$host" in *-*-linux*) diff --git a/libjava/configure.ac b/libjava/configure.ac index 92546f72b99..f0ed99ca248 100644 --- a/libjava/configure.ac +++ b/libjava/configure.ac @@ -1043,7 +1043,7 @@ case "$THREADS" in no | none | single) THREADS=none ;; - aix | posix | posix95 | pthreads) + aix | posix | pthreads) THREADS=posix case "$host" in *-*-linux*) |