OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.2.2/] [gcc/] [gthr-rtems.h] - Blame information for rev 645

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
/* 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, 1999, 2000, 2002, 2003, 2005
5
   Free Software Foundation, Inc.
6
 
7
This file is part of GCC.
8
 
9
GCC is free software; you can redistribute it and/or modify it under
10
the terms of the GNU General Public License as published by the Free
11
Software Foundation; either version 2, or (at your option) any later
12
version.
13
 
14
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
15
WARRANTY; without even the implied warranty of MERCHANTABILITY or
16
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17
for more details.
18
 
19
You should have received a copy of the GNU General Public License
20
along with GCC; see the file COPYING.  If not, write to the Free
21
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
22
02110-1301, USA.  */
23
 
24
/* As a special exception, if you link this library with other files,
25
   some of which are compiled with GCC, to produce an executable,
26
   this library does not by itself cause the resulting executable
27
   to be covered by the GNU General Public License.
28
   This exception does not however invalidate any other reasons why
29
   the executable file might be covered by the GNU General Public License.  */
30
 
31
#ifndef GCC_GTHR_RTEMS_H
32
#define GCC_GTHR_RTEMS_H
33
 
34
#ifdef __cplusplus
35
extern "C" {
36
#endif
37
 
38
#define __GTHREADS 1
39
 
40
#define __GTHREAD_ONCE_INIT  0
41
#define __GTHREAD_MUTEX_INIT 0
42
#define __GTHREAD_MUTEX_INIT_FUNCTION  rtems_gxx_mutex_init
43
#define __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION  rtems_gxx_recursive_mutex_init
44
 
45
/* Avoid dependency on rtems specific headers.  */
46
typedef void *__gthread_key_t;
47
typedef int   __gthread_once_t;
48
typedef void *__gthread_mutex_t;
49
typedef void *__gthread_recursive_mutex_t;
50
 
51
/*
52
 * External functions provided by RTEMS. They are very similar to their POSIX
53
 * counterparts. A "Wrapper API" is being use to avoid dependency on any RTEMS
54
 * header files.
55
 */
56
 
57
/* generic per task variables */
58
extern int rtems_gxx_once (__gthread_once_t *once, void (*func) (void));
59
extern int rtems_gxx_key_create (__gthread_key_t *key, void (*dtor) (void *));
60
extern int rtems_gxx_key_delete (__gthread_key_t key);
61
extern void *rtems_gxx_getspecific (__gthread_key_t key);
62
extern int rtems_gxx_setspecific (__gthread_key_t key, const void *ptr);
63
 
64
/* mutex support */
65
extern void rtems_gxx_mutex_init (__gthread_mutex_t *mutex);
66
extern int rtems_gxx_mutex_lock (__gthread_mutex_t *mutex);
67
extern int rtems_gxx_mutex_trylock (__gthread_mutex_t *mutex);
68
extern int rtems_gxx_mutex_unlock (__gthread_mutex_t *mutex);
69
 
70
/* recursive mutex support */
71
extern void rtems_gxx_recursive_mutex_init (__gthread_recursive_mutex_t *mutex);
72
extern int rtems_gxx_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex);
73
extern int rtems_gxx_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex);
74
extern int rtems_gxx_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex);
75
 
76
/* RTEMS threading is always active */
77
static inline int
78
__gthread_active_p (void)
79
{
80
  return 1;
81
}
82
 
83
/* Wrapper calls */
84
static inline int
85
__gthread_once (__gthread_once_t *once, void (*func) (void))
86
{
87
   return rtems_gxx_once( once, func );
88
}
89
 
90
static inline int
91
__gthread_key_create (__gthread_key_t *key, void (*dtor) (void *))
92
{
93
  return rtems_gxx_key_create( key, dtor );
94
}
95
 
96
static inline int
97
__gthread_key_delete (__gthread_key_t key)
98
{
99
  return rtems_gxx_key_delete (key);
100
}
101
 
102
static inline void *
103
__gthread_getspecific (__gthread_key_t key)
104
{
105
  return rtems_gxx_getspecific (key);
106
}
107
 
108
static inline int
109
__gthread_setspecific (__gthread_key_t key, const void *ptr)
110
{
111
  return rtems_gxx_setspecific (key, ptr);
112
}
113
 
114
static inline int
115
__gthread_mutex_lock (__gthread_mutex_t *mutex)
116
{
117
    return rtems_gxx_mutex_lock (mutex);
118
}
119
 
120
static inline int
121
__gthread_mutex_trylock (__gthread_mutex_t *mutex)
122
{
123
    return rtems_gxx_mutex_trylock (mutex);
124
}
125
 
126
static inline int
127
__gthread_mutex_unlock (__gthread_mutex_t *mutex)
128
{
129
    return rtems_gxx_mutex_unlock( mutex );
130
}
131
 
132
static inline int
133
__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex)
134
{
135
    return rtems_gxx_recursive_mutex_lock (mutex);
136
}
137
 
138
static inline int
139
__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex)
140
{
141
    return rtems_gxx_recursive_mutex_trylock (mutex);
142
}
143
 
144
static inline int
145
__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex)
146
{
147
    return rtems_gxx_recursive_mutex_unlock( mutex );
148
}
149
 
150
#ifdef __cplusplus
151
}
152
#endif
153
 
154
#endif /* ! GCC_GTHR_RTEMS_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.