]> git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/riscv/nptl/bits/pthreadtypes-arch.h
f6a55b6233a43b6f1b8bec98d04bccabe2a373aa
[thirdparty/glibc.git] / sysdeps / riscv / nptl / bits / pthreadtypes-arch.h
1 /* Machine-specific pthread type layouts. RISC-V version.
2 Copyright (C) 2011-2018 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_ARCH_H
20 #define _BITS_PTHREADTYPES_ARCH_H 1
21
22 #include <endian.h>
23
24 #if __riscv_xlen == 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 # error "rv32i-based systems are not supported"
36 #endif
37
38 #define __PTHREAD_COMPAT_PADDING_MID
39 #define __PTHREAD_COMPAT_PADDING_END
40 #define __PTHREAD_MUTEX_LOCK_ELISION 0
41 #define __PTHREAD_MUTEX_USE_UNION 0
42 #define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 0
43
44 #define __LOCK_ALIGNMENT
45 #define __ONCE_ALIGNMENT
46
47 /* There is a lot of padding in this structure. While it's not strictly
48 necessary on RISC-V, we're going to leave it in to be on the safe side in
49 case it's needed in the future. Most other architectures have the padding,
50 so this gives us the same extensibility as everyone else has. */
51 struct __pthread_rwlock_arch_t
52 {
53 unsigned int __readers;
54 unsigned int __writers;
55 unsigned int __wrphase_futex;
56 unsigned int __writers_futex;
57 unsigned int __pad3;
58 unsigned int __pad4;
59 int __cur_writer;
60 int __shared;
61 unsigned long int __pad1;
62 unsigned long int __pad2;
63 unsigned int __flags;
64 };
65
66 #define __PTHREAD_RWLOCK_ELISION_EXTRA 0
67
68 #endif /* bits/pthreadtypes.h */