LWG 3035. std::allocator's constructors should be constexpr
[official-gcc.git] / libgcc / config / gthr-rtems.h
blob25e04b3b79c5e59643fcc690121bfb72d358fb9a
1 /* RTEMS threads compatibility routines for libgcc2 and libobjc.
2 by: Rosimildo da Silva( rdasilva@connecttel.com ) */
3 /* Compile this one with gcc. */
4 /* Copyright (C) 1997-2018 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 Under Section 7 of GPL version 3, you are granted additional
19 permissions described in the GCC Runtime Library Exception, version
20 3.1, as published by the Free Software Foundation.
22 You should have received a copy of the GNU General Public License and
23 a copy of the GCC Runtime Library Exception along with this program;
24 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
25 <http://www.gnu.org/licenses/>. */
27 #ifndef GCC_GTHR_RTEMS_H
28 #define GCC_GTHR_RTEMS_H
30 #include <sys/lock.h>
31 #include <pthread.h>
32 #include <sched.h>
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
38 #define __GTHREADS 1
39 #define __GTHREADS_CXX0X 1
40 #define __GTHREAD_HAS_COND 1
42 typedef pthread_t __gthread_t;
43 typedef pthread_key_t __gthread_key_t;
44 typedef pthread_once_t __gthread_once_t;
45 typedef struct _Mutex_Control __gthread_mutex_t;
46 typedef struct _Mutex_recursive_Control __gthread_recursive_mutex_t;
47 typedef struct _Condition_Control __gthread_cond_t;
48 typedef struct timespec __gthread_time_t;
50 #define __GTHREAD_ONCE_INIT PTHREAD_ONCE_INIT
51 #define __GTHREAD_MUTEX_INIT _MUTEX_INITIALIZER
52 #define __GTHREAD_MUTEX_INIT_FUNCTION _Mutex_Initialize
53 #define __GTHREAD_RECURSIVE_MUTEX_INIT _MUTEX_RECURSIVE_INITIALIZER
54 #define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION _Mutex_recursive_Initialize
55 #define __GTHREAD_COND_INIT _CONDITION_INITIALIZER
56 #define __GTHREAD_COND_INIT_FUNCTION _Condition_Initialize
57 #define __GTHREAD_TIME_INIT {0, 0}
59 static inline int
60 __gthread_active_p (void)
62 return 1;
65 static inline int
66 __gthread_create (__gthread_t *__threadid, void *(*__func) (void *),
67 void *__args)
69 return pthread_create (__threadid, NULL, __func, __args);
72 static inline int
73 __gthread_join (__gthread_t __threadid, void **__value_ptr)
75 return pthread_join (__threadid, __value_ptr);
78 static inline int
79 __gthread_detach (__gthread_t __threadid)
81 return pthread_detach (__threadid);
84 static inline int
85 __gthread_equal (__gthread_t __t1, __gthread_t __t2)
87 return pthread_equal (__t1, __t2);
90 static inline __gthread_t
91 __gthread_self (void)
93 return pthread_self ();
96 static inline int
97 __gthread_yield (void)
99 return sched_yield ();
102 static inline int
103 __gthread_once (__gthread_once_t *__once, void (*__func) (void))
105 return pthread_once (__once, __func);
108 static inline int
109 __gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
111 return pthread_key_create (__key, __dtor);
114 static inline int
115 __gthread_key_delete (__gthread_key_t __key)
117 return pthread_key_delete (__key);
120 static inline void *
121 __gthread_getspecific (__gthread_key_t __key)
123 return pthread_getspecific (__key);
126 static inline int
127 __gthread_setspecific (__gthread_key_t __key, const void *__ptr)
129 return pthread_setspecific (__key, __ptr);
132 static inline int
133 __gthread_mutex_lock (__gthread_mutex_t *__mutex)
135 _Mutex_Acquire (__mutex);
136 return 0;
139 static inline int
140 __gthread_mutex_trylock (__gthread_mutex_t *__mutex)
142 return _Mutex_Try_acquire (__mutex);
145 static inline int
146 __gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
147 const __gthread_time_t *__abs_timeout)
149 return _Mutex_Acquire_timed (__mutex, __abs_timeout);
152 static inline int
153 __gthread_mutex_unlock (__gthread_mutex_t *__mutex)
155 _Mutex_Release (__mutex);
156 return 0;
159 static inline int
160 __gthread_mutex_destroy (__gthread_mutex_t *__mutex)
162 _Mutex_Destroy (__mutex);
163 return 0;
166 static inline int
167 __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
169 _Mutex_recursive_Acquire (__mutex);
170 return 0;
173 static inline int
174 __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
176 return _Mutex_recursive_Try_acquire (__mutex);
179 static inline int
180 __gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex,
181 const __gthread_time_t *__abs_timeout)
183 return _Mutex_recursive_Acquire_timed (__mutex, __abs_timeout);
186 static inline int
187 __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
189 _Mutex_recursive_Release (__mutex);
190 return 0;
193 static inline int
194 __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
196 _Mutex_recursive_Destroy (__mutex);
197 return 0;
200 static inline int
201 __gthread_cond_broadcast (__gthread_cond_t *__cond)
203 _Condition_Broadcast (__cond);
204 return 0;
207 static inline int
208 __gthread_cond_signal (__gthread_cond_t *__cond)
210 _Condition_Signal (__cond);
211 return 0;
214 static inline int
215 __gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
217 _Condition_Wait (__cond, __mutex);
218 return 0;
221 static inline int
222 __gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
223 const __gthread_time_t *__abs_timeout)
225 return _Condition_Wait_timed (__cond, __mutex, __abs_timeout);
228 static inline int
229 __gthread_cond_wait_recursive (__gthread_cond_t *__cond,
230 __gthread_recursive_mutex_t *__mutex)
232 _Condition_Wait_recursive (__cond, __mutex);
233 return 0;
236 static inline int
237 __gthread_cond_destroy (__gthread_cond_t *__cond)
239 _Condition_Destroy (__cond);
240 return 0;
243 #ifdef __cplusplus
245 #endif
247 #endif /* ! GCC_GTHR_RTEMS_H */