1d19d7d58SLionel Sambuc /* This file is automatically generated. DO NOT EDIT! */ 2*0a6a1f1dSLionel Sambuc /* Generated from: NetBSD: mknative-gcc,v 1.70 2013/05/05 07:11:34 skrll Exp */ 3*0a6a1f1dSLionel Sambuc /* Generated from: NetBSD: mknative.common,v 1.8 2006/05/26 19:17:21 mrg Exp */ 4d19d7d58SLionel Sambuc 5d19d7d58SLionel Sambuc /* Threads compatibility routines for libgcc2. */ 6d19d7d58SLionel Sambuc /* Compile this one with gcc. */ 7*0a6a1f1dSLionel Sambuc /* Copyright (C) 1997-2013 Free Software Foundation, Inc. 8d19d7d58SLionel Sambuc 9d19d7d58SLionel Sambuc This file is part of GCC. 10d19d7d58SLionel Sambuc 11d19d7d58SLionel Sambuc GCC is free software; you can redistribute it and/or modify it under 12d19d7d58SLionel Sambuc the terms of the GNU General Public License as published by the Free 13d19d7d58SLionel Sambuc Software Foundation; either version 3, or (at your option) any later 14d19d7d58SLionel Sambuc version. 15d19d7d58SLionel Sambuc 16d19d7d58SLionel Sambuc GCC is distributed in the hope that it will be useful, but WITHOUT ANY 17d19d7d58SLionel Sambuc WARRANTY; without even the implied warranty of MERCHANTABILITY or 18d19d7d58SLionel Sambuc FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 19d19d7d58SLionel Sambuc for more details. 20d19d7d58SLionel Sambuc 21d19d7d58SLionel Sambuc Under Section 7 of GPL version 3, you are granted additional 22d19d7d58SLionel Sambuc permissions described in the GCC Runtime Library Exception, version 23d19d7d58SLionel Sambuc 3.1, as published by the Free Software Foundation. 24d19d7d58SLionel Sambuc 25d19d7d58SLionel Sambuc You should have received a copy of the GNU General Public License and 26d19d7d58SLionel Sambuc a copy of the GCC Runtime Library Exception along with this program; 27d19d7d58SLionel Sambuc see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 28d19d7d58SLionel Sambuc <http://www.gnu.org/licenses/>. */ 29d19d7d58SLionel Sambuc 30d19d7d58SLionel Sambuc #ifndef _GLIBCXX_GCC_GTHR_H 31d19d7d58SLionel Sambuc #define _GLIBCXX_GCC_GTHR_H 32d19d7d58SLionel Sambuc 33d19d7d58SLionel Sambuc #ifndef _GLIBCXX_HIDE_EXPORTS 34d19d7d58SLionel Sambuc #pragma GCC visibility push(default) 35d19d7d58SLionel Sambuc #endif 36d19d7d58SLionel Sambuc 37d19d7d58SLionel Sambuc /* If this file is compiled with threads support, it must 38d19d7d58SLionel Sambuc #define __GTHREADS 1 39d19d7d58SLionel Sambuc to indicate that threads support is present. Also it has define 40d19d7d58SLionel Sambuc function 41d19d7d58SLionel Sambuc int __gthread_active_p () 42d19d7d58SLionel Sambuc that returns 1 if thread system is active, 0 if not. 43d19d7d58SLionel Sambuc 44d19d7d58SLionel Sambuc The threads interface must define the following types: 45d19d7d58SLionel Sambuc __gthread_key_t 46d19d7d58SLionel Sambuc __gthread_once_t 47d19d7d58SLionel Sambuc __gthread_mutex_t 48d19d7d58SLionel Sambuc __gthread_recursive_mutex_t 49d19d7d58SLionel Sambuc 50d19d7d58SLionel Sambuc The threads interface must define the following macros: 51d19d7d58SLionel Sambuc 52d19d7d58SLionel Sambuc __GTHREAD_ONCE_INIT 53d19d7d58SLionel Sambuc to initialize __gthread_once_t 54d19d7d58SLionel Sambuc __GTHREAD_MUTEX_INIT 55d19d7d58SLionel Sambuc to initialize __gthread_mutex_t to get a fast 56d19d7d58SLionel Sambuc non-recursive mutex. 57d19d7d58SLionel Sambuc __GTHREAD_MUTEX_INIT_FUNCTION 58*0a6a1f1dSLionel Sambuc to initialize __gthread_mutex_t to get a fast 59*0a6a1f1dSLionel Sambuc non-recursive mutex. 60*0a6a1f1dSLionel Sambuc Define this to a function which looks like this: 61d19d7d58SLionel Sambuc void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *) 62*0a6a1f1dSLionel Sambuc Some systems can't initialize a mutex without a 63*0a6a1f1dSLionel Sambuc function call. Don't define __GTHREAD_MUTEX_INIT in this case. 64d19d7d58SLionel Sambuc __GTHREAD_RECURSIVE_MUTEX_INIT 65d19d7d58SLionel Sambuc __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION 66d19d7d58SLionel Sambuc as above, but for a recursive mutex. 67d19d7d58SLionel Sambuc 68d19d7d58SLionel Sambuc The threads interface must define the following static functions: 69d19d7d58SLionel Sambuc 70d19d7d58SLionel Sambuc int __gthread_once (__gthread_once_t *once, void (*func) ()) 71d19d7d58SLionel Sambuc 72d19d7d58SLionel Sambuc int __gthread_key_create (__gthread_key_t *keyp, void (*dtor) (void *)) 73d19d7d58SLionel Sambuc int __gthread_key_delete (__gthread_key_t key) 74d19d7d58SLionel Sambuc 75d19d7d58SLionel Sambuc void *__gthread_getspecific (__gthread_key_t key) 76d19d7d58SLionel Sambuc int __gthread_setspecific (__gthread_key_t key, const void *ptr) 77d19d7d58SLionel Sambuc 78d19d7d58SLionel Sambuc int __gthread_mutex_destroy (__gthread_mutex_t *mutex); 79*0a6a1f1dSLionel Sambuc int __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex); 80d19d7d58SLionel Sambuc 81d19d7d58SLionel Sambuc int __gthread_mutex_lock (__gthread_mutex_t *mutex); 82d19d7d58SLionel Sambuc int __gthread_mutex_trylock (__gthread_mutex_t *mutex); 83d19d7d58SLionel Sambuc int __gthread_mutex_unlock (__gthread_mutex_t *mutex); 84d19d7d58SLionel Sambuc 85d19d7d58SLionel Sambuc int __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex); 86d19d7d58SLionel Sambuc int __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex); 87d19d7d58SLionel Sambuc int __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex); 88d19d7d58SLionel Sambuc 89d19d7d58SLionel Sambuc The following are supported in POSIX threads only. They are required to 90d19d7d58SLionel Sambuc fix a deadlock in static initialization inside libsupc++. The header file 91d19d7d58SLionel Sambuc gthr-posix.h defines a symbol __GTHREAD_HAS_COND to signify that these extra 92d19d7d58SLionel Sambuc features are supported. 93d19d7d58SLionel Sambuc 94d19d7d58SLionel Sambuc Types: 95d19d7d58SLionel Sambuc __gthread_cond_t 96d19d7d58SLionel Sambuc 97d19d7d58SLionel Sambuc Macros: 98d19d7d58SLionel Sambuc __GTHREAD_COND_INIT 99d19d7d58SLionel Sambuc __GTHREAD_COND_INIT_FUNCTION 100d19d7d58SLionel Sambuc 101d19d7d58SLionel Sambuc Interface: 102d19d7d58SLionel Sambuc int __gthread_cond_broadcast (__gthread_cond_t *cond); 103d19d7d58SLionel Sambuc int __gthread_cond_wait (__gthread_cond_t *cond, __gthread_mutex_t *mutex); 104d19d7d58SLionel Sambuc int __gthread_cond_wait_recursive (__gthread_cond_t *cond, 105d19d7d58SLionel Sambuc __gthread_recursive_mutex_t *mutex); 106d19d7d58SLionel Sambuc 107d19d7d58SLionel Sambuc All functions returning int should return zero on success or the error 108d19d7d58SLionel Sambuc number. If the operation is not supported, -1 is returned. 109d19d7d58SLionel Sambuc 110d19d7d58SLionel Sambuc If the following are also defined, you should 111d19d7d58SLionel Sambuc #define __GTHREADS_CXX0X 1 112d19d7d58SLionel Sambuc to enable the c++0x thread library. 113d19d7d58SLionel Sambuc 114d19d7d58SLionel Sambuc Types: 115d19d7d58SLionel Sambuc __gthread_t 116d19d7d58SLionel Sambuc __gthread_time_t 117d19d7d58SLionel Sambuc 118d19d7d58SLionel Sambuc Interface: 119d19d7d58SLionel Sambuc int __gthread_create (__gthread_t *thread, void *(*func) (void*), 120d19d7d58SLionel Sambuc void *args); 121d19d7d58SLionel Sambuc int __gthread_join (__gthread_t thread, void **value_ptr); 122d19d7d58SLionel Sambuc int __gthread_detach (__gthread_t thread); 123d19d7d58SLionel Sambuc int __gthread_equal (__gthread_t t1, __gthread_t t2); 124d19d7d58SLionel Sambuc __gthread_t __gthread_self (void); 125d19d7d58SLionel Sambuc int __gthread_yield (void); 126d19d7d58SLionel Sambuc 127d19d7d58SLionel Sambuc int __gthread_mutex_timedlock (__gthread_mutex_t *m, 128d19d7d58SLionel Sambuc const __gthread_time_t *abs_timeout); 129d19d7d58SLionel Sambuc int __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *m, 130d19d7d58SLionel Sambuc const __gthread_time_t *abs_time); 131d19d7d58SLionel Sambuc 132d19d7d58SLionel Sambuc int __gthread_cond_signal (__gthread_cond_t *cond); 133d19d7d58SLionel Sambuc int __gthread_cond_timedwait (__gthread_cond_t *cond, 134d19d7d58SLionel Sambuc __gthread_mutex_t *mutex, 135d19d7d58SLionel Sambuc const __gthread_time_t *abs_timeout); 136d19d7d58SLionel Sambuc 137d19d7d58SLionel Sambuc */ 138d19d7d58SLionel Sambuc 139d19d7d58SLionel Sambuc #if __GXX_WEAK__ 140*0a6a1f1dSLionel Sambuc /* The pe-coff weak support isn't fully compatible to ELF's weak. 141*0a6a1f1dSLionel Sambuc For static libraries it might would work, but as we need to deal 142*0a6a1f1dSLionel Sambuc with shared versions too, we disable it for mingw-targets. */ 143*0a6a1f1dSLionel Sambuc #ifdef __MINGW32__ 144*0a6a1f1dSLionel Sambuc #undef _GLIBCXX_GTHREAD_USE_WEAK 145*0a6a1f1dSLionel Sambuc #define _GLIBCXX_GTHREAD_USE_WEAK 0 146*0a6a1f1dSLionel Sambuc #endif 147*0a6a1f1dSLionel Sambuc 148d19d7d58SLionel Sambuc #ifndef _GLIBCXX_GTHREAD_USE_WEAK 149d19d7d58SLionel Sambuc #define _GLIBCXX_GTHREAD_USE_WEAK 1 150d19d7d58SLionel Sambuc #endif 151d19d7d58SLionel Sambuc #endif 152d19d7d58SLionel Sambuc #include <bits/gthr-default.h> 153d19d7d58SLionel Sambuc 154d19d7d58SLionel Sambuc #ifndef _GLIBCXX_HIDE_EXPORTS 155d19d7d58SLionel Sambuc #pragma GCC visibility pop 156d19d7d58SLionel Sambuc #endif 157d19d7d58SLionel Sambuc 158d19d7d58SLionel Sambuc #endif /* ! _GLIBCXX_GCC_GTHR_H */ 159