Add Changelog ...
[jlayton/glibc.git] / sysdeps / unix / sysv / linux / ia64 / nptl / bits / pthreadtypes.h
1 /* Copyright (C) 2003-2012 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
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 #define __SIZEOF_PTHREAD_ATTR_T 56
23 #define __SIZEOF_PTHREAD_MUTEX_T 40
24 #define __SIZEOF_PTHREAD_MUTEXATTR_T 4
25 #define __SIZEOF_PTHREAD_COND_T 48
26 #define __SIZEOF_PTHREAD_CONDATTR_T 4
27 #define __SIZEOF_PTHREAD_RWLOCK_T 56
28 #define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
29 #define __SIZEOF_PTHREAD_BARRIER_T 32
30 #define __SIZEOF_PTHREAD_BARRIERATTR_T 4
31
32
33 /* Thread identifiers.  The structure of the attribute type is not
34    exposed on purpose.  */
35 typedef unsigned long int pthread_t;
36
37
38 union pthread_attr_t
39 {
40   char __size[__SIZEOF_PTHREAD_ATTR_T];
41   long int __align;
42 };
43 #ifndef __have_pthread_attr_t
44 typedef union pthread_attr_t pthread_attr_t;
45 # define __have_pthread_attr_t  1
46 #endif
47
48
49 typedef struct __pthread_internal_list
50 {
51   struct __pthread_internal_list *__prev;
52   struct __pthread_internal_list *__next;
53 } __pthread_list_t;
54
55
56 /* Data structures for mutex handling.  The structure of the attribute
57    type is not exposed on purpose.  */
58 typedef union
59 {
60   struct __pthread_mutex_s
61   {
62     int __lock;
63     unsigned int __count;
64     int __owner;
65     unsigned int __nusers;
66     /* KIND must stay at this position in the structure to maintain
67        binary compatibility.  */
68     int __kind;
69     int __spins;
70     __pthread_list_t __list;
71 #define __PTHREAD_MUTEX_HAVE_PREV       1
72   } __data;
73   char __size[__SIZEOF_PTHREAD_MUTEX_T];
74   long int __align;
75 } pthread_mutex_t;
76
77 typedef union
78 {
79   char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
80   int __align;
81 } pthread_mutexattr_t;
82
83
84 /* Data structure for conditional variable handling.  The structure of
85    the attribute type is not exposed on purpose.  */
86 typedef union
87 {
88   struct
89   {
90     int __lock;
91     unsigned int __futex;
92     __extension__ unsigned long long int __total_seq;
93     __extension__ unsigned long long int __wakeup_seq;
94     __extension__ unsigned long long int __woken_seq;
95     void *__mutex;
96     unsigned int __nwaiters;
97     unsigned int __broadcast_seq;
98   } __data;
99   char __size[__SIZEOF_PTHREAD_COND_T];
100   long int __align;
101 } pthread_cond_t;
102
103 typedef union
104 {
105   char __size[__SIZEOF_PTHREAD_CONDATTR_T];
106   int __align;
107 } pthread_condattr_t;
108
109
110 /* Keys for thread-specific data */
111 typedef unsigned int pthread_key_t;
112
113
114 /* Once-only execution */
115 typedef int pthread_once_t;
116
117
118 #if defined __USE_UNIX98 || defined __USE_XOPEN2K
119 /* Data structure for read-write lock variable handling.  The
120    structure of the attribute type is not exposed on purpose.  */
121 typedef union
122 {
123   struct
124   {
125     int __lock;
126     unsigned int __nr_readers;
127     unsigned int __readers_wakeup;
128     unsigned int __writer_wakeup;
129     unsigned int __nr_readers_queued;
130     unsigned int __nr_writers_queued;
131     int __writer;
132     int __shared;
133     unsigned long int __pad1;
134     unsigned long int __pad2;
135     /* FLAGS must stay at this position in the structure to maintain
136        binary compatibility.  */
137     unsigned int __flags;
138   } __data;
139   char __size[__SIZEOF_PTHREAD_RWLOCK_T];
140   long int __align;
141 } pthread_rwlock_t;
142
143 typedef union
144 {
145   char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
146   long int __align;
147 } pthread_rwlockattr_t;
148 #endif
149
150
151 #ifdef __USE_XOPEN2K
152 /* POSIX spinlock data type.  */
153 typedef volatile int pthread_spinlock_t;
154
155
156 /* POSIX barriers data type.  The structure of the type is
157    deliberately not exposed.  */
158 typedef union
159 {
160   char __size[__SIZEOF_PTHREAD_BARRIER_T];
161   long int __align;
162 } pthread_barrier_t;
163
164 typedef union
165 {
166   char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
167   int __align;
168 } pthread_barrierattr_t;
169 #endif
170
171
172 #endif  /* bits/pthreadtypes.h */