2 * D header file for POSIX.
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
8 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
11 /* Copyright Sean Kelly 2005 - 2009.
12 * Distributed under the Boost Software License, Version 1.0.
13 * (See accompanying file LICENSE or copy at
14 * http://www.boost.org/LICENSE_1_0.txt)
16 module core.sys.posix.sys.types;
18 private import core.sys.posix.config;
19 private import core.stdc.stdint;
20 public import core.stdc.stddef;
28 else version (WatchOS)
35 // bits/typesizes.h -- underlying types for *_t.
41 version (CRuntime_Glibc)
47 // X32 kernel interface is 64-bit.
54 alias c_ulong ulong_t;
60 alias c_ulong ulong_t;
66 alias c_ulong ulong_t;
88 version (CRuntime_Glibc)
90 static if ( __USE_FILE_OFFSET64 )
98 alias slong_t blkcnt_t;
102 alias slong_t blksize_t;
106 alias ulong_t nlink_t;
108 //size_t (defined in core.stdc.stddef)
109 alias c_long ssize_t;
110 alias slong_t time_t;
113 else version (CRuntime_Musl)
115 alias long blksize_t;
127 alias ulong pthread_t;
130 else version (Darwin)
138 alias ushort nlink_t;
141 //size_t (defined in core.stdc.stddef)
142 alias c_long ssize_t;
146 else version (FreeBSD)
148 // https://github.com/freebsd/freebsd/blob/master/sys/sys/_types.h
150 alias uint blksize_t;
155 alias ushort nlink_t;
158 //size_t (defined in core.stdc.stddef)
159 alias c_long ssize_t;
164 else version (NetBSD)
175 //size_t (defined in core.stdc.stddef)
176 alias c_long ssize_t;
180 else version (OpenBSD)
192 //size_t (defined in core.stdc.stddef)
193 alias c_long ssize_t;
197 else version (DragonFlyBSD)
200 alias long blksize_t;
206 alias long off_t; //__off_t (defined in /usr/include/sys/stdint.h -> core.stdc.stddef)
207 alias int pid_t; // size_t (defined in /usr/include/sys/stdint.h -> core.stdc.stddef)
208 alias c_long ssize_t;
212 else version (Solaris)
215 alias c_long daddr_t;
218 static if (__USE_FILE_OFFSET64)
226 alias c_long blkcnt_t;
233 alias blkcnt_t blkcnt64_t;
239 alias long blkcnt64_t;
244 alias uint blksize_t;
250 alias c_long ssize_t;
254 else version (CRuntime_Bionic)
256 alias c_ulong blkcnt_t;
257 alias c_ulong blksize_t;
263 alias c_long ssize_t;
275 alias ushort nlink_t;
278 else version (CRuntime_UClibc)
280 static if ( __USE_FILE_OFFSET64 )
288 alias slong_t blkcnt_t;
304 alias slong_t blksize_t;
310 //size_t (defined in core.stdc.stddef)
311 alias c_long ssize_t;
312 alias slong_t time_t;
317 static assert(false, "Unsupported platform");
333 version (CRuntime_Glibc)
335 static if ( __USE_FILE_OFFSET64 )
337 alias ulong fsblkcnt_t;
338 alias ulong fsfilcnt_t;
342 alias ulong_t fsblkcnt_t;
343 alias ulong_t fsfilcnt_t;
345 alias slong_t clock_t;
348 alias slong_t suseconds_t;
349 alias uint useconds_t;
351 else version (Darwin)
353 alias uint fsblkcnt_t;
354 alias uint fsfilcnt_t;
355 alias c_long clock_t;
358 alias int suseconds_t;
359 alias uint useconds_t;
361 else version (FreeBSD)
363 alias ulong fsblkcnt_t;
364 alias ulong fsfilcnt_t;
365 alias c_long clock_t;
368 alias c_long suseconds_t;
369 alias uint useconds_t;
371 else version (NetBSD)
373 alias ulong fsblkcnt_t;
374 alias ulong fsfilcnt_t;
375 alias c_long clock_t;
378 alias c_long suseconds_t;
379 alias uint useconds_t;
381 else version (OpenBSD)
383 alias ulong fsblkcnt_t;
384 alias ulong fsfilcnt_t;
388 alias c_long suseconds_t;
389 alias uint useconds_t;
391 else version (DragonFlyBSD)
393 alias ulong fsblkcnt_t;
394 alias ulong fsfilcnt_t;
395 alias c_long clock_t;
398 alias c_long suseconds_t;
399 alias uint useconds_t;
401 else version (Solaris)
403 static if (__USE_FILE_OFFSET64)
405 alias ulong fsblkcnt_t;
406 alias ulong fsfilcnt_t;
410 alias c_ulong fsblkcnt_t;
411 alias c_ulong fsfilcnt_t;
414 alias c_long clock_t;
417 alias c_long suseconds_t;
418 alias uint useconds_t;
426 else version (CRuntime_Bionic)
428 alias c_ulong fsblkcnt_t;
429 alias c_ulong fsfilcnt_t;
430 alias c_long clock_t;
433 alias c_long suseconds_t;
434 alias uint useconds_t; // Updated in Lollipop
436 else version (CRuntime_Musl)
438 static if ( __USE_FILE_OFFSET64 )
440 alias ulong fsblkcnt_t;
441 alias ulong fsfilcnt_t;
445 alias ulong_t fsblkcnt_t;
446 alias ulong_t fsfilcnt_t;
450 alias long suseconds_t;
452 else version (CRuntime_UClibc)
454 static if ( __USE_FILE_OFFSET64 )
456 alias ulong fsblkcnt_t;
457 alias ulong fsfilcnt_t;
461 alias ulong_t fsblkcnt_t;
462 alias ulong_t fsfilcnt_t;
464 alias slong_t clock_t;
467 alias slong_t suseconds_t;
468 alias uint useconds_t;
472 static assert(false, "Unsupported platform");
491 version (CRuntime_Glibc)
495 enum __SIZEOF_PTHREAD_ATTR_T = 36;
496 enum __SIZEOF_PTHREAD_MUTEX_T = 24;
497 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
498 enum __SIZEOF_PTHREAD_COND_T = 48;
499 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
500 enum __SIZEOF_PTHREAD_RWLOCK_T = 32;
501 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
502 enum __SIZEOF_PTHREAD_BARRIER_T = 20;
503 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
505 else version (X86_64)
507 static if (__WORDSIZE == 64)
509 enum __SIZEOF_PTHREAD_ATTR_T = 56;
510 enum __SIZEOF_PTHREAD_MUTEX_T = 40;
511 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
512 enum __SIZEOF_PTHREAD_COND_T = 48;
513 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
514 enum __SIZEOF_PTHREAD_RWLOCK_T = 56;
515 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
516 enum __SIZEOF_PTHREAD_BARRIER_T = 32;
517 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
521 enum __SIZEOF_PTHREAD_ATTR_T = 32;
522 enum __SIZEOF_PTHREAD_MUTEX_T = 32;
523 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
524 enum __SIZEOF_PTHREAD_COND_T = 48;
525 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
526 enum __SIZEOF_PTHREAD_RWLOCK_T = 44;
527 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
528 enum __SIZEOF_PTHREAD_BARRIER_T = 20;
529 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
532 else version (AArch64)
534 enum __SIZEOF_PTHREAD_ATTR_T = 64;
535 enum __SIZEOF_PTHREAD_MUTEX_T = 48;
536 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 8;
537 enum __SIZEOF_PTHREAD_COND_T = 48;
538 enum __SIZEOF_PTHREAD_CONDATTR_T = 8;
539 enum __SIZEOF_PTHREAD_RWLOCK_T = 56;
540 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
541 enum __SIZEOF_PTHREAD_BARRIER_T = 32;
542 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 8;
546 enum __SIZEOF_PTHREAD_ATTR_T = 36;
547 enum __SIZEOF_PTHREAD_MUTEX_T = 24;
548 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
549 enum __SIZEOF_PTHREAD_COND_T = 48;
550 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
551 enum __SIZEOF_PTHREAD_RWLOCK_T = 32;
552 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
553 enum __SIZEOF_PTHREAD_BARRIER_T = 20;
554 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
558 enum __SIZEOF_PTHREAD_ATTR_T = 36;
559 enum __SIZEOF_PTHREAD_MUTEX_T = 48;
560 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
561 enum __SIZEOF_PTHREAD_COND_T = 48;
562 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
563 enum __SIZEOF_PTHREAD_RWLOCK_T = 64;
564 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
565 enum __SIZEOF_PTHREAD_BARRIER_T = 48;
566 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
570 enum __SIZEOF_PTHREAD_ATTR_T = 56;
571 enum __SIZEOF_PTHREAD_MUTEX_T = 40;
572 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
573 enum __SIZEOF_PTHREAD_COND_T = 48;
574 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
575 enum __SIZEOF_PTHREAD_RWLOCK_T = 56;
576 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
577 enum __SIZEOF_PTHREAD_BARRIER_T = 32;
578 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
580 else version (MIPS32)
582 enum __SIZEOF_PTHREAD_ATTR_T = 36;
583 enum __SIZEOF_PTHREAD_MUTEX_T = 24;
584 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
585 enum __SIZEOF_PTHREAD_COND_T = 48;
586 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
587 enum __SIZEOF_PTHREAD_RWLOCK_T = 32;
588 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
589 enum __SIZEOF_PTHREAD_BARRIER_T = 20;
590 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
592 else version (MIPS64)
594 enum __SIZEOF_PTHREAD_ATTR_T = 56;
595 enum __SIZEOF_PTHREAD_MUTEX_T = 40;
596 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
597 enum __SIZEOF_PTHREAD_COND_T = 48;
598 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
599 enum __SIZEOF_PTHREAD_RWLOCK_T = 56;
600 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
601 enum __SIZEOF_PTHREAD_BARRIER_T = 32;
602 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
606 enum __SIZEOF_PTHREAD_ATTR_T = 36;
607 enum __SIZEOF_PTHREAD_MUTEX_T = 24;
608 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
609 enum __SIZEOF_PTHREAD_COND_T = 48;
610 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
611 enum __SIZEOF_PTHREAD_RWLOCK_T = 32;
612 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
613 enum __SIZEOF_PTHREAD_BARRIER_T = 20;
614 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
618 enum __SIZEOF_PTHREAD_ATTR_T = 56;
619 enum __SIZEOF_PTHREAD_MUTEX_T = 40;
620 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
621 enum __SIZEOF_PTHREAD_COND_T = 48;
622 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
623 enum __SIZEOF_PTHREAD_RWLOCK_T = 56;
624 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
625 enum __SIZEOF_PTHREAD_BARRIER_T = 32;
626 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
628 else version (RISCV32)
630 enum __SIZEOF_PTHREAD_ATTR_T = 36;
631 enum __SIZEOF_PTHREAD_MUTEX_T = 24;
632 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
633 enum __SIZEOF_PTHREAD_COND_T = 48;
634 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
635 enum __SIZEOF_PTHREAD_RWLOCK_T = 32;
636 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
637 enum __SIZEOF_PTHREAD_BARRIER_T = 20;
638 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
640 else version (RISCV64)
642 enum __SIZEOF_PTHREAD_ATTR_T = 56;
643 enum __SIZEOF_PTHREAD_MUTEX_T = 40;
644 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
645 enum __SIZEOF_PTHREAD_COND_T = 48;
646 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
647 enum __SIZEOF_PTHREAD_RWLOCK_T = 56;
648 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
649 enum __SIZEOF_PTHREAD_BARRIER_T = 32;
650 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
652 else version (SPARC64)
654 enum __SIZEOF_PTHREAD_ATTR_T = 56;
655 enum __SIZEOF_PTHREAD_MUTEX_T = 40;
656 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
657 enum __SIZEOF_PTHREAD_COND_T = 48;
658 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
659 enum __SIZEOF_PTHREAD_RWLOCK_T = 56;
660 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
661 enum __SIZEOF_PTHREAD_BARRIER_T = 32;
662 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
666 enum __SIZEOF_PTHREAD_ATTR_T = 36;
667 enum __SIZEOF_PTHREAD_MUTEX_T = 24;
668 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
669 enum __SIZEOF_PTHREAD_COND_T = 48;
670 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
671 enum __SIZEOF_PTHREAD_RWLOCK_T = 32;
672 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
673 enum __SIZEOF_PTHREAD_BARRIER_T = 20;
674 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
676 else version (SystemZ)
678 enum __SIZEOF_PTHREAD_ATTR_T = 56;
679 enum __SIZEOF_PTHREAD_MUTEX_T = 40;
680 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
681 enum __SIZEOF_PTHREAD_COND_T = 48;
682 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
683 enum __SIZEOF_PTHREAD_RWLOCK_T = 56;
684 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
685 enum __SIZEOF_PTHREAD_BARRIER_T = 32;
686 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
690 static assert (false, "Unsupported platform");
695 byte[__SIZEOF_PTHREAD_ATTR_T] __size;
699 private alias int __atomic_lock_t;
701 private struct _pthread_fastlock
704 __atomic_lock_t __spinlock;
707 private alias void* _pthread_descr;
711 byte[__SIZEOF_PTHREAD_COND_T] __size;
715 union pthread_condattr_t
717 byte[__SIZEOF_PTHREAD_CONDATTR_T] __size;
721 alias uint pthread_key_t;
723 union pthread_mutex_t
725 byte[__SIZEOF_PTHREAD_MUTEX_T] __size;
729 union pthread_mutexattr_t
731 byte[__SIZEOF_PTHREAD_MUTEXATTR_T] __size;
735 alias int pthread_once_t;
737 struct pthread_rwlock_t
739 byte[__SIZEOF_PTHREAD_RWLOCK_T] __size;
743 struct pthread_rwlockattr_t
745 byte[__SIZEOF_PTHREAD_RWLOCKATTR_T] __size;
749 alias c_ulong pthread_t;
751 else version (CRuntime_Musl)
764 union pthread_mutex_t
769 union pthread_rwlock_t
774 struct pthread_rwlockattr_t
778 alias uint pthread_key_t;
779 alias uint pthread_condattr_t;
780 alias uint pthread_mutexattr_t;
781 alias int pthread_once_t;
785 static assert (false, "Architecture unsupported");
788 else version (Darwin)
792 enum __PTHREAD_SIZE__ = 1168;
793 enum __PTHREAD_ATTR_SIZE__ = 56;
794 enum __PTHREAD_MUTEXATTR_SIZE__ = 8;
795 enum __PTHREAD_MUTEX_SIZE__ = 56;
796 enum __PTHREAD_CONDATTR_SIZE__ = 8;
797 enum __PTHREAD_COND_SIZE__ = 40;
798 enum __PTHREAD_ONCE_SIZE__ = 8;
799 enum __PTHREAD_RWLOCK_SIZE__ = 192;
800 enum __PTHREAD_RWLOCKATTR_SIZE__ = 16;
804 enum __PTHREAD_SIZE__ = 596;
805 enum __PTHREAD_ATTR_SIZE__ = 36;
806 enum __PTHREAD_MUTEXATTR_SIZE__ = 8;
807 enum __PTHREAD_MUTEX_SIZE__ = 40;
808 enum __PTHREAD_CONDATTR_SIZE__ = 4;
809 enum __PTHREAD_COND_SIZE__ = 24;
810 enum __PTHREAD_ONCE_SIZE__ = 4;
811 enum __PTHREAD_RWLOCK_SIZE__ = 124;
812 enum __PTHREAD_RWLOCKATTR_SIZE__ = 12;
815 struct pthread_handler_rec
817 void function(void*) __routine;
819 pthread_handler_rec* __next;
822 struct pthread_attr_t
825 byte[__PTHREAD_ATTR_SIZE__] __opaque;
828 struct pthread_cond_t
831 byte[__PTHREAD_COND_SIZE__] __opaque;
834 struct pthread_condattr_t
837 byte[__PTHREAD_CONDATTR_SIZE__] __opaque;
840 alias c_ulong pthread_key_t;
842 struct pthread_mutex_t
845 byte[__PTHREAD_MUTEX_SIZE__] __opaque;
848 struct pthread_mutexattr_t
851 byte[__PTHREAD_MUTEXATTR_SIZE__] __opaque;
854 struct pthread_once_t
857 byte[__PTHREAD_ONCE_SIZE__] __opaque;
860 struct pthread_rwlock_t
863 byte[__PTHREAD_RWLOCK_SIZE__] __opaque;
866 struct pthread_rwlockattr_t
869 byte[__PTHREAD_RWLOCKATTR_SIZE__] __opaque;
872 private struct _opaque_pthread_t
875 pthread_handler_rec* __cleanup_stack;
876 byte[__PTHREAD_SIZE__] __opaque;
879 alias _opaque_pthread_t* pthread_t;
881 else version (FreeBSD)
885 alias void* pthread_attr_t;
886 alias void* pthread_cond_t;
887 alias void* pthread_condattr_t;
888 alias void* pthread_key_t;
889 alias void* pthread_mutex_t;
890 alias void* pthread_mutexattr_t;
891 alias void* pthread_once_t;
892 alias void* pthread_rwlock_t;
893 alias void* pthread_rwlockattr_t;
894 alias void* pthread_t;
896 else version (NetBSD)
898 struct pthread_queue_t {
904 alias pthread_spin_t = ubyte;
905 struct pthread_attr_t {
910 struct pthread_spinlock_t {
912 pthread_spin_t pts_spin;
915 struct pthread_cond_t {
917 pthread_spin_t ptc_lock;
918 pthread_queue_t ptc_waiters;
919 pthread_mutex_t *ptc_mutex;
922 struct pthread_condattr_t {
926 struct pthread_mutex_t {
928 pthread_spin_t ptm_errorcheck;
930 pthread_spin_t ptm_interlock;
937 struct pthread_mutexattr_t{
941 struct pthread_once_t{
942 pthread_mutex_t pto_mutex;
945 struct pthread_rwlock_t{
948 pthread_spin_t ptr_interlock;
950 pthread_queue_t ptr_rblocked;
951 pthread_queue_t ptr_wblocked;
956 struct pthread_rwlockattr_t{
961 alias uint pthread_key_t;
962 alias void* pthread_t;
964 else version (OpenBSD)
966 alias void* pthread_attr_t;
967 alias void* pthread_cond_t;
968 alias void* pthread_condattr_t;
969 alias int pthread_key_t;
970 alias void* pthread_mutex_t;
971 alias void* pthread_mutexattr_t;
973 private struct pthread_once
976 pthread_mutex_t mutex;
978 alias pthread_once pthread_once_t;
980 alias void* pthread_rwlock_t;
981 alias void* pthread_rwlockattr_t;
982 alias void* pthread_t;
984 else version (DragonFlyBSD)
988 alias void* pthread_attr_t;
989 alias void* pthread_cond_t;
990 alias void* pthread_condattr_t;
991 alias void* pthread_key_t;
992 alias void* pthread_mutex_t;
993 alias void* pthread_mutexattr_t;
994 alias void* pthread_once_t;
995 alias void* pthread_rwlock_t;
996 alias void* pthread_rwlockattr_t;
997 alias void* pthread_t;
999 else version (Solaris)
1001 alias uint pthread_t;
1003 struct pthread_attr_t
1005 void* __pthread_attrp;
1008 struct pthread_cond_t
1010 struct ___pthread_cond_flags
1012 ubyte[4] __pthread_cond_flags;
1013 ushort __pthread_cond_type;
1014 ushort __pthread_cond_magic;
1017 ___pthread_cond_flags __pthread_cond_flags;
1018 ulong __pthread_cond_data;
1021 struct pthread_condattr_t
1023 void* __pthread_condattrp;
1026 struct pthread_rwlock_t
1028 int __pthread_rwlock_readers;
1029 ushort __pthread_rwlock_type;
1030 ushort __pthread_rwlock_magic;
1031 pthread_mutex_t __pthread_rwlock_mutex;
1032 pthread_cond_t __pthread_rwlock_readercv;
1033 pthread_cond_t __pthread_rwlock_writercv;
1036 struct pthread_rwlockattr_t
1038 void* __pthread_rwlockattrp;
1041 struct pthread_mutex_t
1043 struct ___pthread_mutex_flags
1045 ushort __pthread_mutex_flag1;
1046 ubyte __pthread_mutex_flag2;
1047 ubyte __pthread_mutex_ceiling;
1048 ushort __pthread_mutex_type;
1049 ushort __pthread_mutex_magic;
1052 ___pthread_mutex_flags __pthread_mutex_flags;
1054 union ___pthread_mutex_lock
1056 struct ___pthread_mutex_lock64
1058 ubyte[8] __pthread_mutex_pad;
1061 ___pthread_mutex_lock64 __pthread_mutex_lock64;
1063 struct ___pthread_mutex_lock32
1065 uint __pthread_ownerpid;
1066 uint __pthread_lockword;
1069 ___pthread_mutex_lock32 __pthread_mutex_lock32;
1070 ulong __pthread_mutex_owner64;
1073 ___pthread_mutex_lock __pthread_mutex_lock;
1074 ulong __pthread_mutex_data;
1077 struct pthread_mutexattr_t
1079 void* __pthread_mutexattrp;
1082 struct pthread_once_t
1084 ulong[4] __pthread_once_pad;
1087 alias uint pthread_key_t;
1089 else version (CRuntime_Bionic)
1091 struct pthread_attr_t
1099 version (D_LP64) char[16] __reserved = 0;
1102 struct pthread_cond_t
1110 alias c_long pthread_condattr_t;
1111 alias int pthread_key_t;
1113 struct pthread_mutex_t
1121 alias c_long pthread_mutexattr_t;
1122 alias int pthread_once_t;
1124 struct pthread_rwlock_t
1132 alias c_long pthread_rwlockattr_t;
1133 alias c_long pthread_t;
1135 else version (CRuntime_UClibc)
1139 enum __SIZEOF_PTHREAD_ATTR_T = 56;
1140 enum __SIZEOF_PTHREAD_MUTEX_T = 40;
1141 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
1142 enum __SIZEOF_PTHREAD_COND_T = 48;
1143 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
1144 enum __SIZEOF_PTHREAD_RWLOCK_T = 56;
1145 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
1146 enum __SIZEOF_PTHREAD_BARRIER_T = 32;
1147 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
1149 else version (MIPS32)
1151 enum __SIZEOF_PTHREAD_ATTR_T = 36;
1152 enum __SIZEOF_PTHREAD_MUTEX_T = 24;
1153 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
1154 enum __SIZEOF_PTHREAD_COND_T = 48;
1155 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
1156 enum __SIZEOF_PTHREAD_RWLOCK_T = 32;
1157 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
1158 enum __SIZEOF_PTHREAD_BARRIER_T = 20;
1159 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
1163 enum __SIZEOF_PTHREAD_ATTR_T = 36;
1164 enum __SIZEOF_PTHREAD_MUTEX_T = 24;
1165 enum __SIZEOF_PTHREAD_MUTEXATTR_T = 4;
1166 enum __SIZEOF_PTHREAD_COND_T = 48;
1167 enum __SIZEOF_PTHREAD_COND_COMPAT_T = 12;
1168 enum __SIZEOF_PTHREAD_CONDATTR_T = 4;
1169 enum __SIZEOF_PTHREAD_RWLOCK_T = 32;
1170 enum __SIZEOF_PTHREAD_RWLOCKATTR_T = 8;
1171 enum __SIZEOF_PTHREAD_BARRIER_T = 20;
1172 enum __SIZEOF_PTHREAD_BARRIERATTR_T = 4;
1176 static assert (false, "Architecture unsupported");
1179 union pthread_attr_t
1181 byte[__SIZEOF_PTHREAD_ATTR_T] __size;
1185 union pthread_cond_t
1196 uint __broadcast_seq;
1198 byte[__SIZEOF_PTHREAD_COND_T] __size;
1202 union pthread_condattr_t
1204 byte[__SIZEOF_PTHREAD_CONDATTR_T] __size;
1208 alias uint pthread_key_t;
1210 struct __pthread_slist_t
1212 __pthread_slist_t* __next;
1215 union pthread_mutex_t
1217 struct __pthread_mutex_s
1222 /* KIND must stay at this position in the structure to maintain
1223 binary compatibility. */
1229 __pthread_slist_t __list;
1232 __pthread_mutex_s __data;
1233 byte[__SIZEOF_PTHREAD_MUTEX_T] __size;
1237 union pthread_mutexattr_t
1239 byte[__SIZEOF_PTHREAD_MUTEXATTR_T] __size;
1243 alias int pthread_once_t;
1245 struct pthread_rwlock_t
1251 uint __readers_wakeup;
1252 uint __writer_wakeup;
1253 uint __nr_readers_queued;
1254 uint __nr_writers_queued;
1271 byte[__SIZEOF_PTHREAD_RWLOCK_T] __size;
1275 struct pthread_rwlockattr_t
1277 byte[__SIZEOF_PTHREAD_RWLOCKATTR_T] __size;
1281 alias c_ulong pthread_t;
1285 static assert(false, "Unsupported platform");
1293 pthread_barrierattr_t
1296 version (CRuntime_Glibc)
1298 struct pthread_barrier_t
1300 byte[__SIZEOF_PTHREAD_BARRIER_T] __size;
1304 struct pthread_barrierattr_t
1306 byte[__SIZEOF_PTHREAD_BARRIERATTR_T] __size;
1310 else version (FreeBSD)
1312 alias void* pthread_barrier_t;
1313 alias void* pthread_barrierattr_t;
1315 else version (NetBSD)
1317 alias void* pthread_barrier_t;
1318 alias void* pthread_barrierattr_t;
1320 else version (OpenBSD)
1322 alias void* pthread_barrier_t;
1323 alias void* pthread_barrierattr_t;
1325 else version (DragonFlyBSD)
1327 alias void* pthread_barrier_t;
1328 alias void* pthread_barrierattr_t;
1330 else version (Darwin)
1333 else version (Solaris)
1335 struct pthread_barrier_t
1337 uint __pthread_barrier_count;
1338 uint __pthread_barrier_current;
1339 ulong __pthread_barrier_cycle;
1340 ulong __pthread_barrier_reserved;
1341 pthread_mutex_t __pthread_barrier_lock;
1342 pthread_cond_t __pthread_barrier_cond;
1345 struct pthread_barrierattr_t
1347 void* __pthread_barrierattrp;
1350 else version (CRuntime_Bionic)
1353 else version (CRuntime_Musl)
1356 else version (CRuntime_UClibc)
1358 struct pthread_barrier_t
1360 byte[__SIZEOF_PTHREAD_BARRIER_T] __size;
1364 struct pthread_barrierattr_t
1366 byte[__SIZEOF_PTHREAD_BARRIERATTR_T] __size;
1372 static assert(false, "Unsupported platform");
1382 version (CRuntime_Glibc)
1384 alias int pthread_spinlock_t; // volatile
1386 else version (FreeBSD)
1388 alias void* pthread_spinlock_t;
1390 else version (NetBSD)
1394 else version (OpenBSD)
1396 alias void* pthread_spinlock_t;
1398 else version (DragonFlyBSD)
1400 alias void* pthread_spinlock_t;
1402 else version (Solaris)
1404 alias pthread_mutex_t pthread_spinlock_t;
1406 else version (CRuntime_UClibc)
1408 alias int pthread_spinlock_t; // volatile