mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			155 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
| /* Threads compatibility routines for libgcc2.  */
 | |
| /* Compile this one with gcc.  */
 | |
| /* Copyright (C) 1997-2015 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_H
 | |
| #define GCC_GTHR_H
 | |
| 
 | |
| #ifndef HIDE_EXPORTS
 | |
| #pragma GCC visibility push(default)
 | |
| #endif
 | |
| 
 | |
| /* If this file is compiled with threads support, it must
 | |
|        #define __GTHREADS 1
 | |
|    to indicate that threads support is present.  Also it has define
 | |
|    function
 | |
|      int __gthread_active_p ()
 | |
|    that returns 1 if thread system is active, 0 if not.
 | |
| 
 | |
|    The threads interface must define the following types:
 | |
|      __gthread_key_t
 | |
|      __gthread_once_t
 | |
|      __gthread_mutex_t
 | |
|      __gthread_recursive_mutex_t
 | |
| 
 | |
|    The threads interface must define the following macros:
 | |
| 
 | |
|      __GTHREAD_ONCE_INIT
 | |
|      		to initialize __gthread_once_t
 | |
|      __GTHREAD_MUTEX_INIT
 | |
|      		to initialize __gthread_mutex_t to get a fast
 | |
| 		non-recursive mutex.
 | |
|      __GTHREAD_MUTEX_INIT_FUNCTION
 | |
| 		to initialize __gthread_mutex_t to get a fast
 | |
| 		non-recursive mutex.
 | |
| 		Define this to a function which looks like this:
 | |
| 		  void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *)
 | |
|      		Some systems can't initialize a mutex without a
 | |
| 		function call.  Don't define __GTHREAD_MUTEX_INIT in this case.
 | |
|      __GTHREAD_RECURSIVE_MUTEX_INIT
 | |
|      __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION
 | |
|      		as above, but for a recursive mutex.
 | |
| 
 | |
|    The threads interface must define the following static functions:
 | |
| 
 | |
|      int __gthread_once (__gthread_once_t *once, void (*func) ())
 | |
| 
 | |
|      int __gthread_key_create (__gthread_key_t *keyp, void (*dtor) (void *))
 | |
|      int __gthread_key_delete (__gthread_key_t key)
 | |
| 
 | |
|      void *__gthread_getspecific (__gthread_key_t key)
 | |
|      int __gthread_setspecific (__gthread_key_t key, const void *ptr)
 | |
| 
 | |
|      int __gthread_mutex_destroy (__gthread_mutex_t *mutex);
 | |
|      int __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex);
 | |
| 
 | |
|      int __gthread_mutex_lock (__gthread_mutex_t *mutex);
 | |
|      int __gthread_mutex_trylock (__gthread_mutex_t *mutex);
 | |
|      int __gthread_mutex_unlock (__gthread_mutex_t *mutex);
 | |
| 
 | |
|      int __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex);
 | |
|      int __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex);
 | |
|      int __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex);
 | |
| 
 | |
|    The following are supported in POSIX threads only. They are required to
 | |
|    fix a deadlock in static initialization inside libsupc++. The header file
 | |
|    gthr-posix.h defines a symbol __GTHREAD_HAS_COND to signify that these extra
 | |
|    features are supported.
 | |
| 
 | |
|    Types:
 | |
|      __gthread_cond_t
 | |
| 
 | |
|    Macros:
 | |
|      __GTHREAD_COND_INIT
 | |
|      __GTHREAD_COND_INIT_FUNCTION
 | |
| 
 | |
|    Interface:
 | |
|      int __gthread_cond_broadcast (__gthread_cond_t *cond);
 | |
|      int __gthread_cond_wait (__gthread_cond_t *cond, __gthread_mutex_t *mutex);
 | |
|      int __gthread_cond_wait_recursive (__gthread_cond_t *cond,
 | |
| 					__gthread_recursive_mutex_t *mutex);
 | |
| 
 | |
|    All functions returning int should return zero on success or the error
 | |
|    number.  If the operation is not supported, -1 is returned.
 | |
| 
 | |
|    If the following are also defined, you should
 | |
|      #define __GTHREADS_CXX0X 1
 | |
|    to enable the c++0x thread library.
 | |
| 
 | |
|    Types:
 | |
|      __gthread_t
 | |
|      __gthread_time_t
 | |
| 
 | |
|    Interface:
 | |
|      int __gthread_create (__gthread_t *thread, void *(*func) (void*),
 | |
|                            void *args);
 | |
|      int __gthread_join (__gthread_t thread, void **value_ptr);
 | |
|      int __gthread_detach (__gthread_t thread);
 | |
|      int __gthread_equal (__gthread_t t1, __gthread_t t2);
 | |
|      __gthread_t __gthread_self (void);
 | |
|      int __gthread_yield (void);
 | |
| 
 | |
|      int __gthread_mutex_timedlock (__gthread_mutex_t *m,
 | |
|                                     const __gthread_time_t *abs_timeout);
 | |
|      int __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *m,
 | |
|                                           const __gthread_time_t *abs_time);
 | |
| 
 | |
|      int __gthread_cond_signal (__gthread_cond_t *cond);
 | |
|      int __gthread_cond_timedwait (__gthread_cond_t *cond,
 | |
|                                    __gthread_mutex_t *mutex,
 | |
|                                    const __gthread_time_t *abs_timeout);
 | |
| 
 | |
| */
 | |
| 
 | |
| #if SUPPORTS_WEAK
 | |
| /* The pe-coff weak support isn't fully compatible to ELF's weak.
 | |
|    For static libraries it might would work, but as we need to deal
 | |
|    with shared versions too, we disable it for mingw-targets.  */
 | |
| #ifdef __MINGW32__
 | |
| #undef GTHREAD_USE_WEAK
 | |
| #define GTHREAD_USE_WEAK 0
 | |
| #endif
 | |
| 
 | |
| #ifndef GTHREAD_USE_WEAK
 | |
| #define GTHREAD_USE_WEAK 1
 | |
| #endif
 | |
| #endif
 | |
| #include "gthr-default.h"
 | |
| 
 | |
| #ifndef HIDE_EXPORTS
 | |
| #pragma GCC visibility pop
 | |
| #endif
 | |
| 
 | |
| #endif /* ! GCC_GTHR_H */
 |