OSDN Git Service

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