]> 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
fbe5a4a6 1/* RTEMS threads compatibility routines for libgcc2 and libobjc.
bc98ef7f
JS
2 by: Rosimildo da Silva( rdasilva@connecttel.com ) */
3/* Compile this one with gcc. */
8d9254fc 4/* Copyright (C) 1997-2020 Free Software Foundation, Inc.
bc98ef7f 5
1322177d 6This file is part of GCC.
bc98ef7f 7
1322177d
LB
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
748086b7 10Software Foundation; either version 3, or (at your option) any later
1322177d 11version.
bc98ef7f 12
1322177d
LB
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.
bc98ef7f 17
748086b7
JJ
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/>. */
bc98ef7f 26
88657302
RH
27#ifndef GCC_GTHR_RTEMS_H
28#define GCC_GTHR_RTEMS_H
bc98ef7f 29
4efab402
SH
30#include <sys/lock.h>
31#include <pthread.h>
32#include <sched.h>
33
f22b4bc4
JS
34#ifdef __cplusplus
35extern "C" {
36#endif
bc98ef7f
JS
37
38#define __GTHREADS 1
4efab402
SH
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}
bc98ef7f 58
e08f13ee
JS
59static inline int
60__gthread_active_p (void)
61{
62 return 1;
63}
64
4efab402
SH
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
bc98ef7f 102static inline int
09e361bb 103__gthread_once (__gthread_once_t *__once, void (*__func) (void))
bc98ef7f 104{
4efab402 105 return pthread_once (__once, __func);
bc98ef7f
JS
106}
107
108static inline int
09e361bb 109__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *))
bc98ef7f 110{
4efab402 111 return pthread_key_create (__key, __dtor);
bc98ef7f
JS
112}
113
bc98ef7f 114static inline int
09e361bb 115__gthread_key_delete (__gthread_key_t __key)
bc98ef7f 116{
4efab402 117 return pthread_key_delete (__key);
bc98ef7f
JS
118}
119
120static inline void *
09e361bb 121__gthread_getspecific (__gthread_key_t __key)
bc98ef7f 122{
4efab402 123 return pthread_getspecific (__key);
bc98ef7f
JS
124}
125
126static inline int
09e361bb 127__gthread_setspecific (__gthread_key_t __key, const void *__ptr)
bc98ef7f 128{
4efab402 129 return pthread_setspecific (__key, __ptr);
bc98ef7f
JS
130}
131
4dabf736 132static inline int
4efab402 133__gthread_mutex_lock (__gthread_mutex_t *__mutex)
4dabf736 134{
4efab402
SH
135 _Mutex_Acquire (__mutex);
136 return 0;
4dabf736
JB
137}
138
bc98ef7f 139static inline int
4efab402 140__gthread_mutex_trylock (__gthread_mutex_t *__mutex)
bc98ef7f 141{
4efab402 142 return _Mutex_Try_acquire (__mutex);
bc98ef7f
JS
143}
144
145static inline int
4efab402
SH
146__gthread_mutex_timedlock (__gthread_mutex_t *__mutex,
147 const __gthread_time_t *__abs_timeout)
bc98ef7f 148{
4efab402 149 return _Mutex_Acquire_timed (__mutex, __abs_timeout);
bc98ef7f
JS
150}
151
152static inline int
09e361bb 153__gthread_mutex_unlock (__gthread_mutex_t *__mutex)
bc98ef7f 154{
4efab402
SH
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;
bc98ef7f
JS
164}
165
5d58d2f8 166static inline int
09e361bb 167__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex)
5d58d2f8 168{
4efab402
SH
169 _Mutex_recursive_Acquire (__mutex);
170 return 0;
5d58d2f8
RC
171}
172
173static inline int
09e361bb 174__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex)
5d58d2f8 175{
4efab402
SH
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);
5d58d2f8
RC
184}
185
186static inline int
09e361bb 187__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex)
5d58d2f8 188{
4efab402
SH
189 _Mutex_recursive_Release (__mutex);
190 return 0;
5d58d2f8
RC
191}
192
1504e3e1
JW
193static inline int
194__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
195{
4efab402
SH
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;
1504e3e1
JW
241}
242
f22b4bc4
JS
243#ifdef __cplusplus
244}
245#endif
246
88657302 247#endif /* ! GCC_GTHR_RTEMS_H */