xref: /minix3/external/gpl3/gcc/lib/libstdc++-v3/arch/earm/gthr.h (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
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