]> git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / unix / sysv / linux / powerpc / bits / pthreadtypes.h
1 /* Machine-specific pthread type layouts. PowerPC version.
2 Copyright (C) 2003-2016 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, see
17 <http://www.gnu.org/licenses/>. */
18
19 #ifndef _BITS_PTHREADTYPES_H
20 #define _BITS_PTHREADTYPES_H 1
21
22 #include <bits/wordsize.h>
23
24 #if __WORDSIZE == 64
25 # define __SIZEOF_PTHREAD_ATTR_T 56
26 # define __SIZEOF_PTHREAD_MUTEX_T 40
27 # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
28 # define __SIZEOF_PTHREAD_COND_T 48
29 # define __SIZEOF_PTHREAD_CONDATTR_T 4
30 # define __SIZEOF_PTHREAD_RWLOCK_T 56
31 # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
32 # define __SIZEOF_PTHREAD_BARRIER_T 32
33 # define __SIZEOF_PTHREAD_BARRIERATTR_T 4
34 #else
35 # define __SIZEOF_PTHREAD_ATTR_T 36
36 # define __SIZEOF_PTHREAD_MUTEX_T 24
37 # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
38 # define __SIZEOF_PTHREAD_COND_T 48
39 # define __SIZEOF_PTHREAD_CONDATTR_T 4
40 # define __SIZEOF_PTHREAD_RWLOCK_T 32
41 # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
42 # define __SIZEOF_PTHREAD_BARRIER_T 20
43 # define __SIZEOF_PTHREAD_BARRIERATTR_T 4
44 #endif
45
46
47 /* Thread identifiers. The structure of the attribute type is
48 deliberately not exposed. */
49 typedef unsigned long int pthread_t;
50
51
52 union pthread_attr_t
53 {
54 char __size[__SIZEOF_PTHREAD_ATTR_T];
55 long int __align;
56 };
57 #ifndef __have_pthread_attr_t
58 typedef union pthread_attr_t pthread_attr_t;
59 # define __have_pthread_attr_t 1
60 #endif
61
62
63 #if __WORDSIZE == 64
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 #if __WORDSIZE == 64
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 #if __WORDSIZE == 64
93 short __spins;
94 short __elision;
95 __pthread_list_t __list;
96 # define __PTHREAD_MUTEX_HAVE_PREV 1
97 # define __PTHREAD_SPINS 0, 0
98 #else
99 unsigned int __nusers;
100 __extension__ union
101 {
102 struct
103 {
104 short __espins;
105 short __elision;
106 # define __spins __elision_data.__espins
107 # define __elision __elision_data.__elision
108 # define __PTHREAD_SPINS { 0, 0 }
109 } __elision_data;
110 __pthread_slist_t __list;
111 };
112 #endif
113 } __data;
114 char __size[__SIZEOF_PTHREAD_MUTEX_T];
115 long int __align;
116 } pthread_mutex_t;
117
118 typedef union
119 {
120 char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
121 int __align;
122 } pthread_mutexattr_t;
123
124
125 /* Data structure for conditional variable handling. The structure of
126 the attribute type is deliberately not exposed. */
127 typedef union
128 {
129 struct
130 {
131 int __lock;
132 unsigned int __futex;
133 __extension__ unsigned long long int __total_seq;
134 __extension__ unsigned long long int __wakeup_seq;
135 __extension__ unsigned long long int __woken_seq;
136 void *__mutex;
137 unsigned int __nwaiters;
138 unsigned int __broadcast_seq;
139 } __data;
140 char __size[__SIZEOF_PTHREAD_COND_T];
141 __extension__ long long int __align;
142 } pthread_cond_t;
143
144 typedef union
145 {
146 char __size[__SIZEOF_PTHREAD_CONDATTR_T];
147 int __align;
148 } pthread_condattr_t;
149
150
151 /* Keys for thread-specific data */
152 typedef unsigned int pthread_key_t;
153
154
155 /* Once-only execution */
156 typedef int pthread_once_t;
157
158
159 #if defined __USE_UNIX98 || defined __USE_XOPEN2K
160 /* Data structure for read-write lock variable handling. The
161 structure of the attribute type is deliberately not exposed. */
162 typedef union
163 {
164 # if __WORDSIZE == 64
165 struct
166 {
167 int __lock;
168 unsigned int __nr_readers;
169 unsigned int __readers_wakeup;
170 unsigned int __writer_wakeup;
171 unsigned int __nr_readers_queued;
172 unsigned int __nr_writers_queued;
173 int __writer;
174 int __shared;
175 unsigned char __rwelision;
176 unsigned char __pad1[7];
177 unsigned long int __pad2;
178 /* FLAGS must stay at this position in the structure to maintain
179 binary compatibility. */
180 unsigned int __flags;
181 # define __PTHREAD_RWLOCK_ELISION_EXTRA 0, {0, 0, 0, 0, 0, 0, 0 }
182 } __data;
183 # else
184 struct
185 {
186 int __lock;
187 unsigned int __nr_readers;
188 unsigned int __readers_wakeup;
189 unsigned int __writer_wakeup;
190 unsigned int __nr_readers_queued;
191 unsigned int __nr_writers_queued;
192 unsigned char __rwelision;
193 unsigned char __pad2;
194 unsigned char __shared;
195 /* FLAGS must stay at this position in the structure to maintain
196 binary compatibility. */
197 unsigned char __flags;
198 int __writer;
199 #define __PTHREAD_RWLOCK_ELISION_EXTRA 0
200 } __data;
201 # endif
202 char __size[__SIZEOF_PTHREAD_RWLOCK_T];
203 long int __align;
204 } pthread_rwlock_t;
205
206
207 typedef union
208 {
209 char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
210 long int __align;
211 } pthread_rwlockattr_t;
212 #endif
213
214
215 #ifdef __USE_XOPEN2K
216 /* POSIX spinlock data type. */
217 typedef volatile int pthread_spinlock_t;
218
219
220 /* POSIX barriers data type. The structure of the type is
221 deliberately not exposed. */
222 typedef union
223 {
224 char __size[__SIZEOF_PTHREAD_BARRIER_T];
225 long int __align;
226 } pthread_barrier_t;
227
228 typedef union
229 {
230 char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
231 int __align;
232 } pthread_barrierattr_t;
233 #endif
234
235
236 #endif /* bits/pthreadtypes.h */