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