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-2017 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
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
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
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}
60 __gthread_active_p (void)
66 __gthread_create (__gthread_t
*__threadid
, void *(*__func
) (void *),
69 return pthread_create (__threadid
, NULL
, __func
, __args
);
73 __gthread_join (__gthread_t __threadid
, void **__value_ptr
)
75 return pthread_join (__threadid
, __value_ptr
);
79 __gthread_detach (__gthread_t __threadid
)
81 return pthread_detach (__threadid
);
85 __gthread_equal (__gthread_t __t1
, __gthread_t __t2
)
87 return pthread_equal (__t1
, __t2
);
90 static inline __gthread_t
93 return pthread_self ();
97 __gthread_yield (void)
99 return sched_yield ();
103 __gthread_once (__gthread_once_t
*__once
, void (*__func
) (void))
105 return pthread_once (__once
, __func
);
109 __gthread_key_create (__gthread_key_t
*__key
, void (*__dtor
) (void *))
111 return pthread_key_create (__key
, __dtor
);
115 __gthread_key_delete (__gthread_key_t __key
)
117 return pthread_key_delete (__key
);
121 __gthread_getspecific (__gthread_key_t __key
)
123 return pthread_getspecific (__key
);
127 __gthread_setspecific (__gthread_key_t __key
, const void *__ptr
)
129 return pthread_setspecific (__key
, __ptr
);
133 __gthread_mutex_lock (__gthread_mutex_t
*__mutex
)
135 _Mutex_Acquire (__mutex
);
140 __gthread_mutex_trylock (__gthread_mutex_t
*__mutex
)
142 return _Mutex_Try_acquire (__mutex
);
146 __gthread_mutex_timedlock (__gthread_mutex_t
*__mutex
,
147 const __gthread_time_t
*__abs_timeout
)
149 return _Mutex_Acquire_timed (__mutex
, __abs_timeout
);
153 __gthread_mutex_unlock (__gthread_mutex_t
*__mutex
)
155 _Mutex_Release (__mutex
);
160 __gthread_mutex_destroy (__gthread_mutex_t
*__mutex
)
162 _Mutex_Destroy (__mutex
);
167 __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t
*__mutex
)
169 _Mutex_recursive_Acquire (__mutex
);
174 __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t
*__mutex
)
176 return _Mutex_recursive_Try_acquire (__mutex
);
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
);
187 __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t
*__mutex
)
189 _Mutex_recursive_Release (__mutex
);
194 __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t
*__mutex
)
196 _Mutex_recursive_Destroy (__mutex
);
201 __gthread_cond_broadcast (__gthread_cond_t
*__cond
)
203 _Condition_Broadcast (__cond
);
208 __gthread_cond_signal (__gthread_cond_t
*__cond
)
210 _Condition_Signal (__cond
);
215 __gthread_cond_wait (__gthread_cond_t
*__cond
, __gthread_mutex_t
*__mutex
)
217 _Condition_Wait (__cond
, __mutex
);
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
);
229 __gthread_cond_wait_recursive (__gthread_cond_t
*__cond
,
230 __gthread_recursive_mutex_t
*__mutex
)
232 _Condition_Wait_recursive (__cond
, __mutex
);
237 __gthread_cond_destroy (__gthread_cond_t
*__cond
)
239 _Condition_Destroy (__cond
);
247 #endif /* ! GCC_GTHR_RTEMS_H */