OSDN Git Service

Replace FSF snail mail address with URLs
[uclinux-h8/uClibc.git] / libpthread / nptl / sysdeps / unix / sysv / linux / sh / bits / pthreadtypes.h
1 /* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007
2    Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, see
18    <http://www.gnu.org/licenses/>.  */
19
20 #ifndef _BITS_PTHREADTYPES_H
21 #define _BITS_PTHREADTYPES_H    1
22
23 #include <endian.h>
24
25 #define __SIZEOF_PTHREAD_ATTR_T 36
26 #define __SIZEOF_PTHREAD_MUTEX_T 24
27 #define __SIZEOF_PTHREAD_MUTEXATTR_T 4
28 #define __SIZEOF_PTHREAD_COND_T 48
29 #define __SIZEOF_PTHREAD_COND_COMPAT_T 12
30 #define __SIZEOF_PTHREAD_CONDATTR_T 4
31 #define __SIZEOF_PTHREAD_RWLOCK_T 32
32 #define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
33 #define __SIZEOF_PTHREAD_BARRIER_T 20
34 #define __SIZEOF_PTHREAD_BARRIERATTR_T 4
35
36
37 /* Thread identifiers.  The structure of the attribute type is not
38    exposed on purpose.  */
39 typedef unsigned long int pthread_t;
40
41
42 typedef union
43 {
44   char __size[__SIZEOF_PTHREAD_ATTR_T];
45   long int __align;
46 } pthread_attr_t;
47
48
49 typedef struct __pthread_internal_slist
50 {
51   struct __pthread_internal_slist *__next;
52 } __pthread_slist_t;
53
54
55 /* Data structures for mutex handling.  The structure of the attribute
56    type is not exposed on purpose.  */
57 typedef union
58 {
59   struct __pthread_mutex_s
60   {
61     int __lock;
62     unsigned int __count;
63     int __owner;
64     /* KIND must stay at this position in the structure to maintain
65        binary compatibility.  */
66     int __kind;
67     unsigned int __nusers;
68     __extension__ union
69     {
70       int __spins;
71       __pthread_slist_t __list;
72     };
73   } __data;
74   char __size[__SIZEOF_PTHREAD_MUTEX_T];
75   long int __align;
76 } pthread_mutex_t;
77
78 typedef union
79 {
80   char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
81   long int __align;
82 } pthread_mutexattr_t;
83
84
85 /* Data structure for conditional variable handling.  The structure of
86    the attribute type is not exposed on purpose.  */
87 typedef union
88 {
89   struct
90   {
91     int __lock;
92     unsigned int __futex;
93     __extension__ unsigned long long int __total_seq;
94     __extension__ unsigned long long int __wakeup_seq;
95     __extension__ unsigned long long int __woken_seq;
96     void *__mutex;
97     unsigned int __nwaiters;
98     unsigned int __broadcast_seq;
99   } __data;
100   char __size[__SIZEOF_PTHREAD_COND_T];
101   __extension__ long long int __align;
102 } pthread_cond_t;
103
104 typedef union
105 {
106   char __size[__SIZEOF_PTHREAD_CONDATTR_T];
107   long int __align;
108 } pthread_condattr_t;
109
110
111 /* Keys for thread-specific data */
112 typedef unsigned int pthread_key_t;
113
114
115 /* Once-only execution */
116 typedef int pthread_once_t;
117
118
119 #if defined __USE_UNIX98 || defined __USE_XOPEN2K
120 /* Data structure for read-write lock variable handling.  The
121    structure of the attribute type is not exposed on purpose.  */
122 typedef union
123 {
124   struct
125   {
126     int __lock;
127     unsigned int __nr_readers;
128     unsigned int __readers_wakeup;
129     unsigned int __writer_wakeup;
130     unsigned int __nr_readers_queued;
131     unsigned int __nr_writers_queued;
132 #if __BYTE_ORDER == __BIG_ENDIAN
133     unsigned char __pad1;
134     unsigned char __pad2;
135     unsigned char __shared;
136     /* FLAGS must stay at this position in the structure to maintain
137        binary compatibility.  */
138     unsigned char __flags;
139 #else
140     /* FLAGS must stay at this position in the structure to maintain
141        binary compatibility.  */
142     unsigned char __flags;
143     unsigned char __shared;
144     unsigned char __pad1;
145     unsigned char __pad2;
146 #endif
147     pthread_t __writer;
148   } __data;
149   char __size[__SIZEOF_PTHREAD_RWLOCK_T];
150   long int __align;
151 } pthread_rwlock_t;
152
153 typedef union
154 {
155   char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
156   long int __align;
157 } pthread_rwlockattr_t;
158 #endif
159
160
161 #ifdef __USE_XOPEN2K
162 /* POSIX spinlock data type.  */
163 typedef volatile int pthread_spinlock_t;
164
165
166 /* POSIX barriers data type.  The structure of the type is
167    deliberately not exposed.  */
168 typedef union
169 {
170   char __size[__SIZEOF_PTHREAD_BARRIER_T];
171   long int __align;
172 } pthread_barrier_t;
173
174 typedef union
175 {
176   char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
177   int __align;
178 } pthread_barrierattr_t;
179 #endif
180
181
182 #endif  /* bits/pthreadtypes.h */