xref: /minix3/external/gpl3/gcc/lib/libstdc++-v3/arch/powerpc64/gthr-tpf.h (revision 18a5822eff3a5bdeb6301a60d7d6269594c7ce35)
1*18a5822eSThomas Veerman /* This file is automatically generated.  DO NOT EDIT! */
2*18a5822eSThomas Veerman /* Generated from: 	NetBSD: mknative-gcc,v 1.65 2011/10/13 19:52:33 matt Exp  */
3*18a5822eSThomas Veerman /* Generated from: NetBSD: mknative.common,v 1.9 2007/02/05 18:26:01 apb Exp  */
4*18a5822eSThomas Veerman 
5*18a5822eSThomas Veerman /* Threads compatibility routines for libgcc2 and libobjc.
6*18a5822eSThomas Veerman    Compile this one with gcc.
7*18a5822eSThomas Veerman    Copyright (C) 2004, 2005, 2008, 2009 Free Software Foundation, Inc.
8*18a5822eSThomas Veerman 
9*18a5822eSThomas Veerman This file is part of GCC.
10*18a5822eSThomas Veerman 
11*18a5822eSThomas Veerman GCC is free software; you can redistribute it and/or modify it under
12*18a5822eSThomas Veerman the terms of the GNU General Public License as published by the Free
13*18a5822eSThomas Veerman Software Foundation; either version 3, or (at your option) any later
14*18a5822eSThomas Veerman version.
15*18a5822eSThomas Veerman 
16*18a5822eSThomas Veerman GCC is distributed in the hope that it will be useful, but WITHOUT ANY
17*18a5822eSThomas Veerman WARRANTY; without even the implied warranty of MERCHANTABILITY or
18*18a5822eSThomas Veerman FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19*18a5822eSThomas Veerman for more details.
20*18a5822eSThomas Veerman 
21*18a5822eSThomas Veerman Under Section 7 of GPL version 3, you are granted additional
22*18a5822eSThomas Veerman permissions described in the GCC Runtime Library Exception, version
23*18a5822eSThomas Veerman 3.1, as published by the Free Software Foundation.
24*18a5822eSThomas Veerman 
25*18a5822eSThomas Veerman You should have received a copy of the GNU General Public License and
26*18a5822eSThomas Veerman a copy of the GCC Runtime Library Exception along with this program;
27*18a5822eSThomas Veerman see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
28*18a5822eSThomas Veerman <http://www.gnu.org/licenses/>.  */
29*18a5822eSThomas Veerman 
30*18a5822eSThomas Veerman /* TPF needs its own version of gthr-*.h because TPF always links to
31*18a5822eSThomas Veerman    the thread library.  However, for performance reasons we still do not
32*18a5822eSThomas Veerman    want to issue thread api calls unless a check is made to see that we
33*18a5822eSThomas Veerman    are running as a thread.  */
34*18a5822eSThomas Veerman 
35*18a5822eSThomas Veerman #ifndef _GLIBCXX_GCC_GTHR_TPF_H
36*18a5822eSThomas Veerman #define _GLIBCXX_GCC_GTHR_TPF_H
37*18a5822eSThomas Veerman 
38*18a5822eSThomas Veerman /* POSIX threads specific definitions.
39*18a5822eSThomas Veerman    Easy, since the interface is just one-to-one mapping.  */
40*18a5822eSThomas Veerman 
41*18a5822eSThomas Veerman #define __GTHREADS 1
42*18a5822eSThomas Veerman 
43*18a5822eSThomas Veerman /* Some implementations of <pthread.h> require this to be defined.  */
44*18a5822eSThomas Veerman #ifndef _REENTRANT
45*18a5822eSThomas Veerman #define _REENTRANT 1
46*18a5822eSThomas Veerman #endif
47*18a5822eSThomas Veerman 
48*18a5822eSThomas Veerman #include <pthread.h>
49*18a5822eSThomas Veerman #include <unistd.h>
50*18a5822eSThomas Veerman 
51*18a5822eSThomas Veerman typedef pthread_key_t __gthread_key_t;
52*18a5822eSThomas Veerman typedef pthread_once_t __gthread_once_t;
53*18a5822eSThomas Veerman typedef pthread_mutex_t __gthread_mutex_t;
54*18a5822eSThomas Veerman typedef pthread_mutex_t __gthread_recursive_mutex_t;
55*18a5822eSThomas Veerman 
56*18a5822eSThomas Veerman #if defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER)
57*18a5822eSThomas Veerman #define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER
58*18a5822eSThomas Veerman #elif defined(PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
59*18a5822eSThomas Veerman #define __GTHREAD_RECURSIVE_MUTEX_INIT PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
60*18a5822eSThomas Veerman #endif
61*18a5822eSThomas Veerman 
62*18a5822eSThomas Veerman #define __GTHREAD_MUTEX_INIT PTHREAD_MUTEX_INITIALIZER
63*18a5822eSThomas Veerman #define __GTHREAD_ONCE_INIT PTHREAD_ONCE_INIT
64*18a5822eSThomas Veerman #define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION __gthread_recursive_mutex_init_function
65*18a5822eSThomas Veerman 
66*18a5822eSThomas Veerman #define NOTATHREAD   00
67*18a5822eSThomas Veerman #define ECBBASEPTR (unsigned long int) *(unsigned int *)0x00000514u
68*18a5822eSThomas Veerman #define ECBPG2PTR  ECBBASEPTR + 0x1000
69*18a5822eSThomas Veerman #define CE2THRCPTR *((unsigned char *)(ECBPG2PTR + 16))
70*18a5822eSThomas Veerman #define __tpf_pthread_active() (CE2THRCPTR != NOTATHREAD)
71*18a5822eSThomas Veerman 
72*18a5822eSThomas Veerman #if __GXX_WEAK__ && _GLIBCXX_GTHREAD_USE_WEAK
73*18a5822eSThomas Veerman # define __gthrw(name) \
74*18a5822eSThomas Veerman   static __typeof(name) __gthrw_ ## name __attribute__ ((__weakref__(#name)));
75*18a5822eSThomas Veerman # define __gthrw_(name) __gthrw_ ## name
76*18a5822eSThomas Veerman #else
77*18a5822eSThomas Veerman # define __gthrw(name)
78*18a5822eSThomas Veerman # define __gthrw_(name) name
79*18a5822eSThomas Veerman #endif
80*18a5822eSThomas Veerman 
81*18a5822eSThomas Veerman __gthrw(pthread_once)
__gthrw(pthread_key_create)82*18a5822eSThomas Veerman __gthrw(pthread_key_create)
83*18a5822eSThomas Veerman __gthrw(pthread_key_delete)
84*18a5822eSThomas Veerman __gthrw(pthread_getspecific)
85*18a5822eSThomas Veerman __gthrw(pthread_setspecific)
86*18a5822eSThomas Veerman __gthrw(pthread_create)
87*18a5822eSThomas Veerman 
88*18a5822eSThomas Veerman __gthrw(pthread_mutex_lock)
89*18a5822eSThomas Veerman __gthrw(pthread_mutex_trylock)
90*18a5822eSThomas Veerman __gthrw(pthread_mutex_unlock)
91*18a5822eSThomas Veerman __gthrw(pthread_mutexattr_init)
92*18a5822eSThomas Veerman __gthrw(pthread_mutexattr_settype)
93*18a5822eSThomas Veerman __gthrw(pthread_mutexattr_destroy)
94*18a5822eSThomas Veerman __gthrw(pthread_mutex_init)
95*18a5822eSThomas Veerman __gthrw(pthread_mutex_destroy)
96*18a5822eSThomas Veerman 
97*18a5822eSThomas Veerman static inline int
98*18a5822eSThomas Veerman __gthread_active_p (void)
99*18a5822eSThomas Veerman {
100*18a5822eSThomas Veerman   return 1;
101*18a5822eSThomas Veerman }
102*18a5822eSThomas Veerman 
103*18a5822eSThomas Veerman static inline int
__gthread_once(__gthread_once_t * __once,void (* __func)(void))104*18a5822eSThomas Veerman __gthread_once (__gthread_once_t *__once, void (*__func) (void))
105*18a5822eSThomas Veerman {
106*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
107*18a5822eSThomas Veerman     return __gthrw_(pthread_once) (__once, __func);
108*18a5822eSThomas Veerman   else
109*18a5822eSThomas Veerman     return -1;
110*18a5822eSThomas Veerman }
111*18a5822eSThomas Veerman 
112*18a5822eSThomas Veerman static inline int
__gthread_key_create(__gthread_key_t * __key,void (* __dtor)(void *))113*18a5822eSThomas Veerman __gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
114*18a5822eSThomas Veerman {
115*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
116*18a5822eSThomas Veerman     return __gthrw_(pthread_key_create) (__key, __dtor);
117*18a5822eSThomas Veerman   else
118*18a5822eSThomas Veerman     return -1;
119*18a5822eSThomas Veerman }
120*18a5822eSThomas Veerman 
121*18a5822eSThomas Veerman static inline int
__gthread_key_delete(__gthread_key_t __key)122*18a5822eSThomas Veerman __gthread_key_delete (__gthread_key_t __key)
123*18a5822eSThomas Veerman {
124*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
125*18a5822eSThomas Veerman     return __gthrw_(pthread_key_delete) (__key);
126*18a5822eSThomas Veerman   else
127*18a5822eSThomas Veerman     return -1;
128*18a5822eSThomas Veerman }
129*18a5822eSThomas Veerman 
130*18a5822eSThomas Veerman static inline void *
__gthread_getspecific(__gthread_key_t __key)131*18a5822eSThomas Veerman __gthread_getspecific (__gthread_key_t __key)
132*18a5822eSThomas Veerman {
133*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
134*18a5822eSThomas Veerman     return __gthrw_(pthread_getspecific) (__key);
135*18a5822eSThomas Veerman   else
136*18a5822eSThomas Veerman     return NULL;
137*18a5822eSThomas Veerman }
138*18a5822eSThomas Veerman 
139*18a5822eSThomas Veerman static inline int
__gthread_setspecific(__gthread_key_t __key,const void * __ptr)140*18a5822eSThomas Veerman __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
141*18a5822eSThomas Veerman {
142*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
143*18a5822eSThomas Veerman     return __gthrw_(pthread_setspecific) (__key, __ptr);
144*18a5822eSThomas Veerman   else
145*18a5822eSThomas Veerman     return -1;
146*18a5822eSThomas Veerman }
147*18a5822eSThomas Veerman 
148*18a5822eSThomas Veerman static inline int
__gthread_mutex_destroy(__gthread_mutex_t * __mutex)149*18a5822eSThomas Veerman __gthread_mutex_destroy (__gthread_mutex_t *__mutex)
150*18a5822eSThomas Veerman {
151*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
152*18a5822eSThomas Veerman     return __gthrw_(pthread_mutex_destroy) (__mutex);
153*18a5822eSThomas Veerman   else
154*18a5822eSThomas Veerman     return 0;
155*18a5822eSThomas Veerman }
156*18a5822eSThomas Veerman 
157*18a5822eSThomas Veerman static inline int
__gthread_mutex_lock(__gthread_mutex_t * __mutex)158*18a5822eSThomas Veerman __gthread_mutex_lock (__gthread_mutex_t *__mutex)
159*18a5822eSThomas Veerman {
160*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
161*18a5822eSThomas Veerman     return __gthrw_(pthread_mutex_lock) (__mutex);
162*18a5822eSThomas Veerman   else
163*18a5822eSThomas Veerman     return 0;
164*18a5822eSThomas Veerman }
165*18a5822eSThomas Veerman 
166*18a5822eSThomas Veerman static inline int
__gthread_mutex_trylock(__gthread_mutex_t * __mutex)167*18a5822eSThomas Veerman __gthread_mutex_trylock (__gthread_mutex_t *__mutex)
168*18a5822eSThomas Veerman {
169*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
170*18a5822eSThomas Veerman     return __gthrw_(pthread_mutex_trylock) (__mutex);
171*18a5822eSThomas Veerman   else
172*18a5822eSThomas Veerman     return 0;
173*18a5822eSThomas Veerman }
174*18a5822eSThomas Veerman 
175*18a5822eSThomas Veerman static inline int
__gthread_mutex_unlock(__gthread_mutex_t * __mutex)176*18a5822eSThomas Veerman __gthread_mutex_unlock (__gthread_mutex_t *__mutex)
177*18a5822eSThomas Veerman {
178*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
179*18a5822eSThomas Veerman     return __gthrw_(pthread_mutex_unlock) (__mutex);
180*18a5822eSThomas Veerman   else
181*18a5822eSThomas Veerman     return 0;
182*18a5822eSThomas Veerman }
183*18a5822eSThomas Veerman 
184*18a5822eSThomas Veerman static inline int
__gthread_recursive_mutex_lock(__gthread_recursive_mutex_t * __mutex)185*18a5822eSThomas Veerman __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
186*18a5822eSThomas Veerman {
187*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
188*18a5822eSThomas Veerman     return __gthread_mutex_lock (__mutex);
189*18a5822eSThomas Veerman   else
190*18a5822eSThomas Veerman     return 0;
191*18a5822eSThomas Veerman }
192*18a5822eSThomas Veerman 
193*18a5822eSThomas Veerman static inline int
__gthread_recursive_mutex_trylock(__gthread_recursive_mutex_t * __mutex)194*18a5822eSThomas Veerman __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
195*18a5822eSThomas Veerman {
196*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
197*18a5822eSThomas Veerman     return __gthread_mutex_trylock (__mutex);
198*18a5822eSThomas Veerman   else
199*18a5822eSThomas Veerman     return 0;
200*18a5822eSThomas Veerman }
201*18a5822eSThomas Veerman 
202*18a5822eSThomas Veerman static inline int
__gthread_recursive_mutex_unlock(__gthread_recursive_mutex_t * __mutex)203*18a5822eSThomas Veerman __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
204*18a5822eSThomas Veerman {
205*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
206*18a5822eSThomas Veerman     return __gthread_mutex_unlock (__mutex);
207*18a5822eSThomas Veerman   else
208*18a5822eSThomas Veerman     return 0;
209*18a5822eSThomas Veerman }
210*18a5822eSThomas Veerman 
211*18a5822eSThomas Veerman static inline int
__gthread_recursive_mutex_init_function(__gthread_recursive_mutex_t * __mutex)212*18a5822eSThomas Veerman __gthread_recursive_mutex_init_function (__gthread_recursive_mutex_t *__mutex)
213*18a5822eSThomas Veerman {
214*18a5822eSThomas Veerman   if (__tpf_pthread_active ())
215*18a5822eSThomas Veerman     {
216*18a5822eSThomas Veerman       pthread_mutexattr_t __attr;
217*18a5822eSThomas Veerman       int __r;
218*18a5822eSThomas Veerman 
219*18a5822eSThomas Veerman       __r = __gthrw_(pthread_mutexattr_init) (&__attr);
220*18a5822eSThomas Veerman       if (!__r)
221*18a5822eSThomas Veerman 	__r = __gthrw_(pthread_mutexattr_settype) (&__attr,
222*18a5822eSThomas Veerman 						   PTHREAD_MUTEX_RECURSIVE);
223*18a5822eSThomas Veerman       if (!__r)
224*18a5822eSThomas Veerman 	__r = __gthrw_(pthread_mutex_init) (__mutex, &__attr);
225*18a5822eSThomas Veerman       if (!__r)
226*18a5822eSThomas Veerman 	__r = __gthrw_(pthread_mutexattr_destroy) (&__attr);
227*18a5822eSThomas Veerman       return __r;
228*18a5822eSThomas Veerman     }
229*18a5822eSThomas Veerman   return 0;
230*18a5822eSThomas Veerman }
231*18a5822eSThomas Veerman 
232*18a5822eSThomas Veerman 
233*18a5822eSThomas Veerman #endif /* ! _GLIBCXX_GCC_GTHR_TPF_H */
234