]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgcc/config/gthr-rtems.h
Update copyright years.
[thirdparty/gcc.git] / libgcc / config / gthr-rtems.h
CommitLineData
98667efb 1/* RTEMS threads compatibility routines for libgcc2 and libobjc.
742d48c2 2 by: Rosimildo da Silva( rdasilva@connecttel.com ) */
3/* Compile this one with gcc. */
fbd26352 4/* Copyright (C) 1997-2019 Free Software Foundation, Inc.
742d48c2 5
f12b58b3 6This file is part of GCC.
742d48c2 7
f12b58b3 8GCC is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
6bc9506f 10Software Foundation; either version 3, or (at your option) any later
f12b58b3 11version.
742d48c2 12
f12b58b3 13GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16for more details.
742d48c2 17
6bc9506f 18Under Section 7 of GPL version 3, you are granted additional
19permissions described in the GCC Runtime Library Exception, version
203.1, as published by the Free Software Foundation.
21
22You should have received a copy of the GNU General Public License and
23a copy of the GCC Runtime Library Exception along with this program;
24see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
25<http://www.gnu.org/licenses/>. */
742d48c2 26
2a281353 27#ifndef GCC_GTHR_RTEMS_H
28#define GCC_GTHR_RTEMS_H
742d48c2 29
196c8383 30#include <sys/lock.h>
31#include <pthread.h>
32#include <sched.h>
33
214507b9 34#ifdef __cplusplus
35extern "C" {
36#endif
742d48c2 37
38#define __GTHREADS 1
196c8383 39#define __GTHREADS_CXX0X 1
40#define __GTHREAD_HAS_COND 1
41
42typedef pthread_t __gthread_t;
43typedef pthread_key_t __gthread_key_t;
44typedef pthread_once_t __gthread_once_t;
45typedef struct _Mutex_Control __gthread_mutex_t;
46typedef struct _Mutex_recursive_Control __gthread_recursive_mutex_t;
47typedef struct _Condition_Control __gthread_cond_t;
48typedef struct timespec __gthread_time_t;
49
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}
742d48c2 58
f41eaefe 59static inline int
60__gthread_active_p (void)
61{
62 return 1;
63}
64
196c8383 65static inline int
66__gthread_create (__gthread_t *__threadid, void *(*__func) (void *),
67 void *__args)
68{
69 return pthread_create (__threadid, NULL, __func, __args);
70}
71
72static inline int
73__gthread_join (__gthread_t __threadid, void **__value_ptr)
74{
75 return pthread_join (__threadid, __value_ptr);
76}
77
78static inline int
79__gthread_detach (__gthread_t __threadid)
80{
81 return pthread_detach (__threadid);
82}
83
84static inline int
85__gthread_equal (__gthread_t __t1, __gthread_t __t2)
86{
87 return pthread_equal (__t1, __t2);
88}
89
90static inline __gthread_t
91__gthread_self (void)
92{
93 return pthread_self ();
94}
95
96static inline int
97__gthread_yield (void)
98{
99 return sched_yield ();
100}
101
742d48c2 102static inline int
320084b9 103__gthread_once (__gthread_once_t *__once, void (*__func) (void))
742d48c2 104{
196c8383 105 return pthread_once (__once, __func);
742d48c2 106}
107
108static inline int
320084b9 109__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
742d48c2 110{
196c8383 111 return pthread_key_create (__key, __dtor);
742d48c2 112}
113
742d48c2 114static inline int
320084b9 115__gthread_key_delete (__gthread_key_t __key)
742d48c2 116{
196c8383 117 return pthread_key_delete (__key);
742d48c2 118}
119
120static inline void *
320084b9 121__gthread_getspecific (__gthread_key_t __key)
742d48c2 122{
196c8383 123 return pthread_getspecific (__key);
742d48c2 124}
125
126static inline int
320084b9 127__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
742d48c2 128{
196c8383 129 return pthread_setspecific (__key, __ptr);
742d48c2 130}
131
1cd3a344 132static inline int
196c8383 133__gthread_mutex_lock (__gthread_mutex_t *__mutex)
1cd3a344 134{
196c8383 135 _Mutex_Acquire (__mutex);
136 return 0;
1cd3a344 137}
138
742d48c2 139static inline int
196c8383 140__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
742d48c2 141{
196c8383 142 return _Mutex_Try_acquire (__mutex);
742d48c2 143}
144
145static inline int
196c8383 146__gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
147 const __gthread_time_t *__abs_timeout)
742d48c2 148{
196c8383 149 return _Mutex_Acquire_timed (__mutex, __abs_timeout);
742d48c2 150}
151
152static inline int
320084b9 153__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
742d48c2 154{
196c8383 155 _Mutex_Release (__mutex);
156 return 0;
157}
158
159static inline int
160__gthread_mutex_destroy (__gthread_mutex_t *__mutex)
161{
162 _Mutex_Destroy (__mutex);
163 return 0;
742d48c2 164}
165
6a18fdb1 166static inline int
320084b9 167__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
6a18fdb1 168{
196c8383 169 _Mutex_recursive_Acquire (__mutex);
170 return 0;
6a18fdb1 171}
172
173static inline int
320084b9 174__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
6a18fdb1 175{
196c8383 176 return _Mutex_recursive_Try_acquire (__mutex);
177}
178
179static inline int
180__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex,
181 const __gthread_time_t *__abs_timeout)
182{
183 return _Mutex_recursive_Acquire_timed (__mutex, __abs_timeout);
6a18fdb1 184}
185
186static inline int
320084b9 187__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
6a18fdb1 188{
196c8383 189 _Mutex_recursive_Release (__mutex);
190 return 0;
6a18fdb1 191}
192
4854adab 193static inline int
194__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
195{
196c8383 196 _Mutex_recursive_Destroy (__mutex);
197 return 0;
198}
199
200static inline int
201__gthread_cond_broadcast (__gthread_cond_t *__cond)
202{
203 _Condition_Broadcast (__cond);
204 return 0;
205}
206
207static inline int
208__gthread_cond_signal (__gthread_cond_t *__cond)
209{
210 _Condition_Signal (__cond);
211 return 0;
212}
213
214static inline int
215__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex)
216{
217 _Condition_Wait (__cond, __mutex);
218 return 0;
219}
220
221static inline int
222__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex,
223 const __gthread_time_t *__abs_timeout)
224{
225 return _Condition_Wait_timed (__cond, __mutex, __abs_timeout);
226}
227
228static inline int
229__gthread_cond_wait_recursive (__gthread_cond_t *__cond,
230 __gthread_recursive_mutex_t *__mutex)
231{
232 _Condition_Wait_recursive (__cond, __mutex);
233 return 0;
234}
235
236static inline int
237__gthread_cond_destroy (__gthread_cond_t *__cond)
238{
239 _Condition_Destroy (__cond);
240 return 0;
4854adab 241}
242
214507b9 243#ifdef __cplusplus
244}
245#endif
246
2a281353 247#endif /* ! GCC_GTHR_RTEMS_H */