OpenCores
URL https://opencores.org/ocsvn/hf-risc/hf-risc/trunk

Subversion Repositories hf-risc

[/] [hf-risc/] [trunk/] [tools/] [riscv-gnu-toolchain-master/] [glibc/] [sysdeps/] [riscv/] [nptl/] [bits/] [pthreadtypes.h] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 serginhofr
/* Machine-specific pthread type layouts.  RISC-V version.
2
   Copyright (C) 2011-2014 Free Software Foundation, Inc.
3
   This file is part of the GNU C Library.
4
 
5
   The GNU C Library is free software; you can redistribute it and/or
6
   modify it under the terms of the GNU Lesser General Public
7
   License as published by the Free Software Foundation; either
8
   version 2.1 of the License, or (at your option) any later version.
9
 
10
   The GNU C Library is distributed in the hope that it will be useful,
11
   but WITHOUT ANY WARRANTY; without even the implied warranty of
12
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
   Lesser General Public License for more details.
14
 
15
   You should have received a copy of the GNU Lesser General Public
16
   License along with the GNU C Library; if not, write to the Free
17
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18
   02111-1307 USA.  */
19
 
20
#ifndef _BITS_PTHREADTYPES_H
21
#define _BITS_PTHREADTYPES_H    1
22
 
23
#include <endian.h>
24
 
25
#ifdef __riscv64
26
# define __SIZEOF_PTHREAD_ATTR_T 56
27
# define __SIZEOF_PTHREAD_MUTEX_T 40
28
# define __SIZEOF_PTHREAD_MUTEXATTR_T 4
29
# define __SIZEOF_PTHREAD_COND_T 48
30
# define __SIZEOF_PTHREAD_CONDATTR_T 4
31
# define __SIZEOF_PTHREAD_RWLOCK_T 56
32
# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
33
# define __SIZEOF_PTHREAD_BARRIER_T 32
34
# define __SIZEOF_PTHREAD_BARRIERATTR_T 4
35
#else
36
# define __SIZEOF_PTHREAD_ATTR_T 36
37
# define __SIZEOF_PTHREAD_MUTEX_T 24
38
# define __SIZEOF_PTHREAD_MUTEXATTR_T 4
39
# define __SIZEOF_PTHREAD_COND_T 48
40
# define __SIZEOF_PTHREAD_CONDATTR_T 4
41
# define __SIZEOF_PTHREAD_RWLOCK_T 32
42
# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
43
# define __SIZEOF_PTHREAD_BARRIER_T 20
44
# define __SIZEOF_PTHREAD_BARRIERATTR_T 4
45
#endif
46
 
47
 
48
/* Thread identifiers.  The structure of the attribute type is
49
   deliberately not exposed.  */
50
typedef unsigned long int pthread_t;
51
 
52
 
53
union pthread_attr_t
54
{
55
  char __size[__SIZEOF_PTHREAD_ATTR_T];
56
  long int __align;
57
};
58
#ifndef __have_pthread_attr_t
59
typedef union pthread_attr_t pthread_attr_t;
60
# define __have_pthread_attr_t  1
61
#endif
62
 
63
#ifdef __riscv64
64
typedef struct __pthread_internal_list
65
{
66
  struct __pthread_internal_list *__prev;
67
  struct __pthread_internal_list *__next;
68
} __pthread_list_t;
69
#else
70
typedef struct __pthread_internal_slist
71
{
72
  struct __pthread_internal_slist *__next;
73
} __pthread_slist_t;
74
#endif
75
 
76
 
77
/* Data structures for mutex handling.  The structure of the attribute
78
   type is deliberately not exposed.  */
79
typedef union
80
{
81
  struct __pthread_mutex_s
82
  {
83
    int __lock;
84
    unsigned int __count;
85
    int __owner;
86
#ifdef __riscv64
87
    unsigned int __nusers;
88
#endif
89
    /* KIND must stay at this position in the structure to maintain
90
       binary compatibility.  */
91
    int __kind;
92
#ifdef __riscv64
93
    int __spins;
94
    __pthread_list_t __list;
95
# define __PTHREAD_MUTEX_HAVE_PREV      1
96
#else
97
    unsigned int __nusers;
98
    __extension__ union
99
    {
100
      int __spins;
101
      __pthread_slist_t __list;
102
    };
103
#endif
104
  } __data;
105
  char __size[__SIZEOF_PTHREAD_MUTEX_T];
106
  long int __align;
107
} pthread_mutex_t;
108
 
109
/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER.  */
110
#define __PTHREAD_SPINS 0
111
 
112
typedef union
113
{
114
  char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
115
  int __align;
116
} pthread_mutexattr_t;
117
 
118
 
119
/* Data structure for conditional variable handling.  The structure of
120
   the attribute type is deliberately not exposed.  */
121
typedef union
122
{
123
  struct
124
  {
125
    int __lock;
126
    unsigned int __futex;
127
    __extension__ unsigned long long int __total_seq;
128
    __extension__ unsigned long long int __wakeup_seq;
129
    __extension__ unsigned long long int __woken_seq;
130
    void *__mutex;
131
    unsigned int __nwaiters;
132
    unsigned int __broadcast_seq;
133
  } __data;
134
  char __size[__SIZEOF_PTHREAD_COND_T];
135
  __extension__ long long int __align;
136
} pthread_cond_t;
137
 
138
typedef union
139
{
140
  char __size[__SIZEOF_PTHREAD_CONDATTR_T];
141
  int __align;
142
} pthread_condattr_t;
143
 
144
 
145
/* Keys for thread-specific data */
146
typedef unsigned int pthread_key_t;
147
 
148
 
149
/* Once-only execution */
150
typedef int pthread_once_t;
151
 
152
 
153
#if defined __USE_UNIX98 || defined __USE_XOPEN2K
154
/* Data structure for read-write lock variable handling.  The
155
   structure of the attribute type is deliberately not exposed.  */
156
typedef union
157
{
158
# ifdef __riscv64
159
  struct
160
  {
161
    int __lock;
162
    unsigned int __nr_readers;
163
    unsigned int __readers_wakeup;
164
    unsigned int __writer_wakeup;
165
    unsigned int __nr_readers_queued;
166
    unsigned int __nr_writers_queued;
167
    int __writer;
168
    int __shared;
169
    unsigned long int __pad1;
170
    unsigned long int __pad2;
171
    /* FLAGS must stay at this position in the structure to maintain
172
       binary compatibility.  */
173
    unsigned int __flags;
174
  } __data;
175
# else
176
  struct
177
  {
178
    int __lock;
179
    unsigned int __nr_readers;
180
    unsigned int __readers_wakeup;
181
    unsigned int __writer_wakeup;
182
    unsigned int __nr_readers_queued;
183
    unsigned int __nr_writers_queued;
184
#if __BYTE_ORDER == __BIG_ENDIAN
185
    unsigned char __pad1;
186
    unsigned char __pad2;
187
    unsigned char __shared;
188
    /* FLAGS must stay at this position in the structure to maintain
189
       binary compatibility.  */
190
    unsigned char __flags;
191
#else
192
    /* FLAGS must stay at this position in the structure to maintain
193
       binary compatibility.  */
194
    unsigned char __flags;
195
    unsigned char __shared;
196
    unsigned char __pad1;
197
    unsigned char __pad2;
198
#endif
199
    int __writer;
200
  } __data;
201
# endif
202
  char __size[__SIZEOF_PTHREAD_RWLOCK_T];
203
  long int __align;
204
} pthread_rwlock_t;
205
 
206
#define __PTHREAD_RWLOCK_ELISION_EXTRA 0
207
 
208
typedef union
209
{
210
  char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
211
  long int __align;
212
} pthread_rwlockattr_t;
213
#endif
214
 
215
 
216
#ifdef __USE_XOPEN2K
217
/* POSIX spinlock data type.  */
218
#ifdef __riscv_atomic
219
typedef volatile int pthread_spinlock_t;
220
#else
221
typedef pthread_mutex_t pthread_spinlock_t;
222
#endif
223
 
224
 
225
/* POSIX barriers data type.  The structure of the type is
226
   deliberately not exposed.  */
227
typedef union
228
{
229
  char __size[__SIZEOF_PTHREAD_BARRIER_T];
230
  long int __align;
231
} pthread_barrier_t;
232
 
233
typedef union
234
{
235
  char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
236
  int __align;
237
} pthread_barrierattr_t;
238
#endif
239
 
240
 
241
#endif  /* bits/pthreadtypes.h */

powered by: WebSVN 2.1.0

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