1*0a6a1f1dSLionel Sambuc /* This file is automatically generated. DO NOT EDIT! */
2*0a6a1f1dSLionel Sambuc /* Generated from: NetBSD: mknative-gcc,v 1.79 2014/05/29 16:27:50 skrll Exp */
3*0a6a1f1dSLionel Sambuc /* Generated from: NetBSD: mknative.common,v 1.11 2014/02/17 21:39:43 christos Exp */
4*0a6a1f1dSLionel Sambuc
5*0a6a1f1dSLionel Sambuc /* Threads compatibility routines for libgcc2 and libobjc. */
6*0a6a1f1dSLionel Sambuc /* Compile this one with gcc. */
7*0a6a1f1dSLionel Sambuc /* Copyright (C) 1997-2013 Free Software Foundation, Inc.
8*0a6a1f1dSLionel Sambuc
9*0a6a1f1dSLionel Sambuc This file is part of GCC.
10*0a6a1f1dSLionel Sambuc
11*0a6a1f1dSLionel Sambuc GCC is free software; you can redistribute it and/or modify it under
12*0a6a1f1dSLionel Sambuc the terms of the GNU General Public License as published by the Free
13*0a6a1f1dSLionel Sambuc Software Foundation; either version 3, or (at your option) any later
14*0a6a1f1dSLionel Sambuc version.
15*0a6a1f1dSLionel Sambuc
16*0a6a1f1dSLionel Sambuc GCC is distributed in the hope that it will be useful, but WITHOUT ANY
17*0a6a1f1dSLionel Sambuc WARRANTY; without even the implied warranty of MERCHANTABILITY or
18*0a6a1f1dSLionel Sambuc FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19*0a6a1f1dSLionel Sambuc for more details.
20*0a6a1f1dSLionel Sambuc
21*0a6a1f1dSLionel Sambuc Under Section 7 of GPL version 3, you are granted additional
22*0a6a1f1dSLionel Sambuc permissions described in the GCC Runtime Library Exception, version
23*0a6a1f1dSLionel Sambuc 3.1, as published by the Free Software Foundation.
24*0a6a1f1dSLionel Sambuc
25*0a6a1f1dSLionel Sambuc You should have received a copy of the GNU General Public License and
26*0a6a1f1dSLionel Sambuc a copy of the GCC Runtime Library Exception along with this program;
27*0a6a1f1dSLionel Sambuc see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
28*0a6a1f1dSLionel Sambuc <http://www.gnu.org/licenses/>. */
29*0a6a1f1dSLionel Sambuc
30*0a6a1f1dSLionel Sambuc #ifndef _GLIBCXX_GCC_GTHR_SINGLE_H
31*0a6a1f1dSLionel Sambuc #define _GLIBCXX_GCC_GTHR_SINGLE_H
32*0a6a1f1dSLionel Sambuc
33*0a6a1f1dSLionel Sambuc /* Just provide compatibility for mutex handling. */
34*0a6a1f1dSLionel Sambuc
35*0a6a1f1dSLionel Sambuc typedef int __gthread_key_t;
36*0a6a1f1dSLionel Sambuc typedef int __gthread_once_t;
37*0a6a1f1dSLionel Sambuc typedef int __gthread_mutex_t;
38*0a6a1f1dSLionel Sambuc typedef int __gthread_recursive_mutex_t;
39*0a6a1f1dSLionel Sambuc
40*0a6a1f1dSLionel Sambuc #define __GTHREAD_ONCE_INIT 0
41*0a6a1f1dSLionel Sambuc #define __GTHREAD_MUTEX_INIT 0
42*0a6a1f1dSLionel Sambuc #define __GTHREAD_MUTEX_INIT_FUNCTION(mx)
43*0a6a1f1dSLionel Sambuc #define __GTHREAD_RECURSIVE_MUTEX_INIT 0
44*0a6a1f1dSLionel Sambuc
45*0a6a1f1dSLionel Sambuc #define _GLIBCXX_UNUSED __attribute__((unused))
46*0a6a1f1dSLionel Sambuc
47*0a6a1f1dSLionel Sambuc #ifdef _LIBOBJC
48*0a6a1f1dSLionel Sambuc
49*0a6a1f1dSLionel Sambuc /* Thread local storage for a single thread */
50*0a6a1f1dSLionel Sambuc static void *thread_local_storage = NULL;
51*0a6a1f1dSLionel Sambuc
52*0a6a1f1dSLionel Sambuc /* Backend initialization functions */
53*0a6a1f1dSLionel Sambuc
54*0a6a1f1dSLionel Sambuc /* Initialize the threads subsystem. */
55*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_init_thread_system(void)56*0a6a1f1dSLionel Sambuc __gthread_objc_init_thread_system (void)
57*0a6a1f1dSLionel Sambuc {
58*0a6a1f1dSLionel Sambuc /* No thread support available */
59*0a6a1f1dSLionel Sambuc return -1;
60*0a6a1f1dSLionel Sambuc }
61*0a6a1f1dSLionel Sambuc
62*0a6a1f1dSLionel Sambuc /* Close the threads subsystem. */
63*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_close_thread_system(void)64*0a6a1f1dSLionel Sambuc __gthread_objc_close_thread_system (void)
65*0a6a1f1dSLionel Sambuc {
66*0a6a1f1dSLionel Sambuc /* No thread support available */
67*0a6a1f1dSLionel Sambuc return -1;
68*0a6a1f1dSLionel Sambuc }
69*0a6a1f1dSLionel Sambuc
70*0a6a1f1dSLionel Sambuc /* Backend thread functions */
71*0a6a1f1dSLionel Sambuc
72*0a6a1f1dSLionel Sambuc /* Create a new thread of execution. */
73*0a6a1f1dSLionel Sambuc static inline objc_thread_t
__gthread_objc_thread_detach(void (* func)(void *),void * arg _GLIBCXX_UNUSED)74*0a6a1f1dSLionel Sambuc __gthread_objc_thread_detach (void (* func)(void *), void * arg _GLIBCXX_UNUSED)
75*0a6a1f1dSLionel Sambuc {
76*0a6a1f1dSLionel Sambuc /* No thread support available */
77*0a6a1f1dSLionel Sambuc return NULL;
78*0a6a1f1dSLionel Sambuc }
79*0a6a1f1dSLionel Sambuc
80*0a6a1f1dSLionel Sambuc /* Set the current thread's priority. */
81*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_thread_set_priority(int priority _GLIBCXX_UNUSED)82*0a6a1f1dSLionel Sambuc __gthread_objc_thread_set_priority (int priority _GLIBCXX_UNUSED)
83*0a6a1f1dSLionel Sambuc {
84*0a6a1f1dSLionel Sambuc /* No thread support available */
85*0a6a1f1dSLionel Sambuc return -1;
86*0a6a1f1dSLionel Sambuc }
87*0a6a1f1dSLionel Sambuc
88*0a6a1f1dSLionel Sambuc /* Return the current thread's priority. */
89*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_thread_get_priority(void)90*0a6a1f1dSLionel Sambuc __gthread_objc_thread_get_priority (void)
91*0a6a1f1dSLionel Sambuc {
92*0a6a1f1dSLionel Sambuc return OBJC_THREAD_INTERACTIVE_PRIORITY;
93*0a6a1f1dSLionel Sambuc }
94*0a6a1f1dSLionel Sambuc
95*0a6a1f1dSLionel Sambuc /* Yield our process time to another thread. */
96*0a6a1f1dSLionel Sambuc static inline void
__gthread_objc_thread_yield(void)97*0a6a1f1dSLionel Sambuc __gthread_objc_thread_yield (void)
98*0a6a1f1dSLionel Sambuc {
99*0a6a1f1dSLionel Sambuc return;
100*0a6a1f1dSLionel Sambuc }
101*0a6a1f1dSLionel Sambuc
102*0a6a1f1dSLionel Sambuc /* Terminate the current thread. */
103*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_thread_exit(void)104*0a6a1f1dSLionel Sambuc __gthread_objc_thread_exit (void)
105*0a6a1f1dSLionel Sambuc {
106*0a6a1f1dSLionel Sambuc /* No thread support available */
107*0a6a1f1dSLionel Sambuc /* Should we really exit the program */
108*0a6a1f1dSLionel Sambuc /* exit (&__objc_thread_exit_status); */
109*0a6a1f1dSLionel Sambuc return -1;
110*0a6a1f1dSLionel Sambuc }
111*0a6a1f1dSLionel Sambuc
112*0a6a1f1dSLionel Sambuc /* Returns an integer value which uniquely describes a thread. */
113*0a6a1f1dSLionel Sambuc static inline objc_thread_t
__gthread_objc_thread_id(void)114*0a6a1f1dSLionel Sambuc __gthread_objc_thread_id (void)
115*0a6a1f1dSLionel Sambuc {
116*0a6a1f1dSLionel Sambuc /* No thread support, use 1. */
117*0a6a1f1dSLionel Sambuc return (objc_thread_t) 1;
118*0a6a1f1dSLionel Sambuc }
119*0a6a1f1dSLionel Sambuc
120*0a6a1f1dSLionel Sambuc /* Sets the thread's local storage pointer. */
121*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_thread_set_data(void * value)122*0a6a1f1dSLionel Sambuc __gthread_objc_thread_set_data (void *value)
123*0a6a1f1dSLionel Sambuc {
124*0a6a1f1dSLionel Sambuc thread_local_storage = value;
125*0a6a1f1dSLionel Sambuc return 0;
126*0a6a1f1dSLionel Sambuc }
127*0a6a1f1dSLionel Sambuc
128*0a6a1f1dSLionel Sambuc /* Returns the thread's local storage pointer. */
129*0a6a1f1dSLionel Sambuc static inline void *
__gthread_objc_thread_get_data(void)130*0a6a1f1dSLionel Sambuc __gthread_objc_thread_get_data (void)
131*0a6a1f1dSLionel Sambuc {
132*0a6a1f1dSLionel Sambuc return thread_local_storage;
133*0a6a1f1dSLionel Sambuc }
134*0a6a1f1dSLionel Sambuc
135*0a6a1f1dSLionel Sambuc /* Backend mutex functions */
136*0a6a1f1dSLionel Sambuc
137*0a6a1f1dSLionel Sambuc /* Allocate a mutex. */
138*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_mutex_allocate(objc_mutex_t mutex _GLIBCXX_UNUSED)139*0a6a1f1dSLionel Sambuc __gthread_objc_mutex_allocate (objc_mutex_t mutex _GLIBCXX_UNUSED)
140*0a6a1f1dSLionel Sambuc {
141*0a6a1f1dSLionel Sambuc return 0;
142*0a6a1f1dSLionel Sambuc }
143*0a6a1f1dSLionel Sambuc
144*0a6a1f1dSLionel Sambuc /* Deallocate a mutex. */
145*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_mutex_deallocate(objc_mutex_t mutex _GLIBCXX_UNUSED)146*0a6a1f1dSLionel Sambuc __gthread_objc_mutex_deallocate (objc_mutex_t mutex _GLIBCXX_UNUSED)
147*0a6a1f1dSLionel Sambuc {
148*0a6a1f1dSLionel Sambuc return 0;
149*0a6a1f1dSLionel Sambuc }
150*0a6a1f1dSLionel Sambuc
151*0a6a1f1dSLionel Sambuc /* Grab a lock on a mutex. */
152*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_mutex_lock(objc_mutex_t mutex _GLIBCXX_UNUSED)153*0a6a1f1dSLionel Sambuc __gthread_objc_mutex_lock (objc_mutex_t mutex _GLIBCXX_UNUSED)
154*0a6a1f1dSLionel Sambuc {
155*0a6a1f1dSLionel Sambuc /* There can only be one thread, so we always get the lock */
156*0a6a1f1dSLionel Sambuc return 0;
157*0a6a1f1dSLionel Sambuc }
158*0a6a1f1dSLionel Sambuc
159*0a6a1f1dSLionel Sambuc /* Try to grab a lock on a mutex. */
160*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_mutex_trylock(objc_mutex_t mutex _GLIBCXX_UNUSED)161*0a6a1f1dSLionel Sambuc __gthread_objc_mutex_trylock (objc_mutex_t mutex _GLIBCXX_UNUSED)
162*0a6a1f1dSLionel Sambuc {
163*0a6a1f1dSLionel Sambuc /* There can only be one thread, so we always get the lock */
164*0a6a1f1dSLionel Sambuc return 0;
165*0a6a1f1dSLionel Sambuc }
166*0a6a1f1dSLionel Sambuc
167*0a6a1f1dSLionel Sambuc /* Unlock the mutex */
168*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_mutex_unlock(objc_mutex_t mutex _GLIBCXX_UNUSED)169*0a6a1f1dSLionel Sambuc __gthread_objc_mutex_unlock (objc_mutex_t mutex _GLIBCXX_UNUSED)
170*0a6a1f1dSLionel Sambuc {
171*0a6a1f1dSLionel Sambuc return 0;
172*0a6a1f1dSLionel Sambuc }
173*0a6a1f1dSLionel Sambuc
174*0a6a1f1dSLionel Sambuc /* Backend condition mutex functions */
175*0a6a1f1dSLionel Sambuc
176*0a6a1f1dSLionel Sambuc /* Allocate a condition. */
177*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_condition_allocate(objc_condition_t condition _GLIBCXX_UNUSED)178*0a6a1f1dSLionel Sambuc __gthread_objc_condition_allocate (objc_condition_t condition _GLIBCXX_UNUSED)
179*0a6a1f1dSLionel Sambuc {
180*0a6a1f1dSLionel Sambuc return 0;
181*0a6a1f1dSLionel Sambuc }
182*0a6a1f1dSLionel Sambuc
183*0a6a1f1dSLionel Sambuc /* Deallocate a condition. */
184*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_condition_deallocate(objc_condition_t condition _GLIBCXX_UNUSED)185*0a6a1f1dSLionel Sambuc __gthread_objc_condition_deallocate (objc_condition_t condition _GLIBCXX_UNUSED)
186*0a6a1f1dSLionel Sambuc {
187*0a6a1f1dSLionel Sambuc return 0;
188*0a6a1f1dSLionel Sambuc }
189*0a6a1f1dSLionel Sambuc
190*0a6a1f1dSLionel Sambuc /* Wait on the condition */
191*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_condition_wait(objc_condition_t condition _GLIBCXX_UNUSED,objc_mutex_t mutex _GLIBCXX_UNUSED)192*0a6a1f1dSLionel Sambuc __gthread_objc_condition_wait (objc_condition_t condition _GLIBCXX_UNUSED,
193*0a6a1f1dSLionel Sambuc objc_mutex_t mutex _GLIBCXX_UNUSED)
194*0a6a1f1dSLionel Sambuc {
195*0a6a1f1dSLionel Sambuc return 0;
196*0a6a1f1dSLionel Sambuc }
197*0a6a1f1dSLionel Sambuc
198*0a6a1f1dSLionel Sambuc /* Wake up all threads waiting on this condition. */
199*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_condition_broadcast(objc_condition_t condition _GLIBCXX_UNUSED)200*0a6a1f1dSLionel Sambuc __gthread_objc_condition_broadcast (objc_condition_t condition _GLIBCXX_UNUSED)
201*0a6a1f1dSLionel Sambuc {
202*0a6a1f1dSLionel Sambuc return 0;
203*0a6a1f1dSLionel Sambuc }
204*0a6a1f1dSLionel Sambuc
205*0a6a1f1dSLionel Sambuc /* Wake up one thread waiting on this condition. */
206*0a6a1f1dSLionel Sambuc static inline int
__gthread_objc_condition_signal(objc_condition_t condition _GLIBCXX_UNUSED)207*0a6a1f1dSLionel Sambuc __gthread_objc_condition_signal (objc_condition_t condition _GLIBCXX_UNUSED)
208*0a6a1f1dSLionel Sambuc {
209*0a6a1f1dSLionel Sambuc return 0;
210*0a6a1f1dSLionel Sambuc }
211*0a6a1f1dSLionel Sambuc
212*0a6a1f1dSLionel Sambuc #else /* _LIBOBJC */
213*0a6a1f1dSLionel Sambuc
214*0a6a1f1dSLionel Sambuc static inline int
__gthread_active_p(void)215*0a6a1f1dSLionel Sambuc __gthread_active_p (void)
216*0a6a1f1dSLionel Sambuc {
217*0a6a1f1dSLionel Sambuc return 0;
218*0a6a1f1dSLionel Sambuc }
219*0a6a1f1dSLionel Sambuc
220*0a6a1f1dSLionel Sambuc static inline int
__gthread_once(__gthread_once_t * __once _GLIBCXX_UNUSED,void (* __func)(void)_GLIBCXX_UNUSED)221*0a6a1f1dSLionel Sambuc __gthread_once (__gthread_once_t *__once _GLIBCXX_UNUSED, void (*__func) (void) _GLIBCXX_UNUSED)
222*0a6a1f1dSLionel Sambuc {
223*0a6a1f1dSLionel Sambuc return 0;
224*0a6a1f1dSLionel Sambuc }
225*0a6a1f1dSLionel Sambuc
226*0a6a1f1dSLionel Sambuc static inline int _GLIBCXX_UNUSED
__gthread_key_create(__gthread_key_t * __key _GLIBCXX_UNUSED,void (* __func)(void *)_GLIBCXX_UNUSED)227*0a6a1f1dSLionel Sambuc __gthread_key_create (__gthread_key_t *__key _GLIBCXX_UNUSED, void (*__func) (void *) _GLIBCXX_UNUSED)
228*0a6a1f1dSLionel Sambuc {
229*0a6a1f1dSLionel Sambuc return 0;
230*0a6a1f1dSLionel Sambuc }
231*0a6a1f1dSLionel Sambuc
232*0a6a1f1dSLionel Sambuc static int _GLIBCXX_UNUSED
__gthread_key_delete(__gthread_key_t __key _GLIBCXX_UNUSED)233*0a6a1f1dSLionel Sambuc __gthread_key_delete (__gthread_key_t __key _GLIBCXX_UNUSED)
234*0a6a1f1dSLionel Sambuc {
235*0a6a1f1dSLionel Sambuc return 0;
236*0a6a1f1dSLionel Sambuc }
237*0a6a1f1dSLionel Sambuc
238*0a6a1f1dSLionel Sambuc static inline void *
__gthread_getspecific(__gthread_key_t __key _GLIBCXX_UNUSED)239*0a6a1f1dSLionel Sambuc __gthread_getspecific (__gthread_key_t __key _GLIBCXX_UNUSED)
240*0a6a1f1dSLionel Sambuc {
241*0a6a1f1dSLionel Sambuc return 0;
242*0a6a1f1dSLionel Sambuc }
243*0a6a1f1dSLionel Sambuc
244*0a6a1f1dSLionel Sambuc static inline int
__gthread_setspecific(__gthread_key_t __key _GLIBCXX_UNUSED,const void * __v _GLIBCXX_UNUSED)245*0a6a1f1dSLionel Sambuc __gthread_setspecific (__gthread_key_t __key _GLIBCXX_UNUSED, const void *__v _GLIBCXX_UNUSED)
246*0a6a1f1dSLionel Sambuc {
247*0a6a1f1dSLionel Sambuc return 0;
248*0a6a1f1dSLionel Sambuc }
249*0a6a1f1dSLionel Sambuc
250*0a6a1f1dSLionel Sambuc static inline int
__gthread_mutex_destroy(__gthread_mutex_t * __mutex _GLIBCXX_UNUSED)251*0a6a1f1dSLionel Sambuc __gthread_mutex_destroy (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED)
252*0a6a1f1dSLionel Sambuc {
253*0a6a1f1dSLionel Sambuc return 0;
254*0a6a1f1dSLionel Sambuc }
255*0a6a1f1dSLionel Sambuc
256*0a6a1f1dSLionel Sambuc static inline int
__gthread_mutex_lock(__gthread_mutex_t * __mutex _GLIBCXX_UNUSED)257*0a6a1f1dSLionel Sambuc __gthread_mutex_lock (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED)
258*0a6a1f1dSLionel Sambuc {
259*0a6a1f1dSLionel Sambuc return 0;
260*0a6a1f1dSLionel Sambuc }
261*0a6a1f1dSLionel Sambuc
262*0a6a1f1dSLionel Sambuc static inline int
__gthread_mutex_trylock(__gthread_mutex_t * __mutex _GLIBCXX_UNUSED)263*0a6a1f1dSLionel Sambuc __gthread_mutex_trylock (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED)
264*0a6a1f1dSLionel Sambuc {
265*0a6a1f1dSLionel Sambuc return 0;
266*0a6a1f1dSLionel Sambuc }
267*0a6a1f1dSLionel Sambuc
268*0a6a1f1dSLionel Sambuc static inline int
__gthread_mutex_unlock(__gthread_mutex_t * __mutex _GLIBCXX_UNUSED)269*0a6a1f1dSLionel Sambuc __gthread_mutex_unlock (__gthread_mutex_t *__mutex _GLIBCXX_UNUSED)
270*0a6a1f1dSLionel Sambuc {
271*0a6a1f1dSLionel Sambuc return 0;
272*0a6a1f1dSLionel Sambuc }
273*0a6a1f1dSLionel Sambuc
274*0a6a1f1dSLionel Sambuc static inline int
__gthread_recursive_mutex_lock(__gthread_recursive_mutex_t * __mutex)275*0a6a1f1dSLionel Sambuc __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
276*0a6a1f1dSLionel Sambuc {
277*0a6a1f1dSLionel Sambuc return __gthread_mutex_lock (__mutex);
278*0a6a1f1dSLionel Sambuc }
279*0a6a1f1dSLionel Sambuc
280*0a6a1f1dSLionel Sambuc static inline int
__gthread_recursive_mutex_trylock(__gthread_recursive_mutex_t * __mutex)281*0a6a1f1dSLionel Sambuc __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
282*0a6a1f1dSLionel Sambuc {
283*0a6a1f1dSLionel Sambuc return __gthread_mutex_trylock (__mutex);
284*0a6a1f1dSLionel Sambuc }
285*0a6a1f1dSLionel Sambuc
286*0a6a1f1dSLionel Sambuc static inline int
__gthread_recursive_mutex_unlock(__gthread_recursive_mutex_t * __mutex)287*0a6a1f1dSLionel Sambuc __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
288*0a6a1f1dSLionel Sambuc {
289*0a6a1f1dSLionel Sambuc return __gthread_mutex_unlock (__mutex);
290*0a6a1f1dSLionel Sambuc }
291*0a6a1f1dSLionel Sambuc
292*0a6a1f1dSLionel Sambuc static inline int
__gthread_recursive_mutex_destroy(__gthread_recursive_mutex_t * __mutex)293*0a6a1f1dSLionel Sambuc __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
294*0a6a1f1dSLionel Sambuc {
295*0a6a1f1dSLionel Sambuc return __gthread_mutex_destroy (__mutex);
296*0a6a1f1dSLionel Sambuc }
297*0a6a1f1dSLionel Sambuc
298*0a6a1f1dSLionel Sambuc #endif /* _LIBOBJC */
299*0a6a1f1dSLionel Sambuc
300*0a6a1f1dSLionel Sambuc #undef _GLIBCXX_UNUSED
301*0a6a1f1dSLionel Sambuc
302*0a6a1f1dSLionel Sambuc #endif /* ! _GLIBCXX_GCC_GTHR_SINGLE_H */
303