X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fgthr.h;h=6edfbcd69c38c99689b7e287d86045ddb0e8600e;hb=1e6c5f6367b032480c0975f8788388d467781a1b;hp=b436bb6bb91791834fe31a67f9f1e0597955601c;hpb=3cfec666406d71f8b7d7abcf9883c64117453c15;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/gthr.h b/gcc/gthr.h index b436bb6bb91..6edfbcd69c3 100644 --- a/gcc/gthr.h +++ b/gcc/gthr.h @@ -1,12 +1,12 @@ /* Threads compatibility routines for libgcc2. */ /* Compile this one with gcc. */ -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2004, 2008, 2009 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 2, or (at your option) any later +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 @@ -14,21 +14,22 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. */ +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. -/* As a special exception, if you link this library with other files, - some of which are compiled with GCC, to produce an executable, - this library does not by itself cause the resulting executable - to be covered by the GNU General Public License. - This exception does not however invalidate any other reasons why - the executable file might be covered by the GNU General Public License. */ +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 +. */ #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 @@ -40,6 +41,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA __gthread_key_t __gthread_once_t __gthread_mutex_t + __gthread_recursive_mutex_t The threads interface must define the following macros: @@ -54,6 +56,9 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA function which looks like this: void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *) 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: @@ -62,27 +67,86 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA int __gthread_key_create (__gthread_key_t *keyp, void (*dtor) (void *)) int __gthread_key_delete (__gthread_key_t key) - int __gthread_key_dtor (__gthread_key_t key, void *ptr) - 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_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); + int __gthread_cond_timedwait_recursive (__gthread_cond_t *cond, + __gthread_recursive_mutex_t *mutex, + const __gthread_time_t *abs_time) + Currently supported threads packages are - POSIX threads with -D_PTHREADS + TPF threads with -D__tpf__ + POSIX/Unix98 threads with -D_PTHREADS + POSIX/Unix95 threads with -D_PTHREADS95 DCE threads with -D_DCE_THREADS Solaris/UI threads with -D_SOLARIS_THREADS + */ /* Check first for thread specific defines. */ -#if _PTHREADS +#if defined (__tpf__) +#include "gthr-tpf.h" +#elif _PTHREADS #include "gthr-posix.h" +#elif _PTHREADS95 +#include "gthr-posix95.h" #elif _DCE_THREADS #include "gthr-dce.h" #elif _SOLARIS_THREADS @@ -102,4 +166,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "gthr-single.h" #endif +#ifndef HIDE_EXPORTS +#pragma GCC visibility pop +#endif + #endif /* ! GCC_GTHR_H */