1 /* Declarations of internal pthread functions used by libc. Hurd version. 2 Copyright (C) 2016-2022 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 <https://www.gnu.org/licenses/>. */ 18 19 #ifndef _PTHREADP_H 20 #define _PTHREADP_H 1 21 22 #define __PTHREAD_HTL 23 24 #include <pthread.h> 25 #include <link.h> 26 27 /* Attribute to indicate thread creation was issued from C11 thrd_create. */ 28 #define ATTR_C11_THREAD ((void*)(uintptr_t)-1) 29 30 extern void __pthread_init_static_tls (struct link_map *) attribute_hidden; 31 32 /* These represent the interface used by glibc itself. */ 33 34 extern int __pthread_mutex_init (pthread_mutex_t *__mutex, const pthread_mutexattr_t *__attr); 35 extern int __pthread_mutex_destroy (pthread_mutex_t *__mutex); 36 extern int __pthread_mutex_lock (pthread_mutex_t *__mutex); 37 extern int __pthread_mutex_trylock (pthread_mutex_t *_mutex); 38 extern int __pthread_mutex_timedlock (pthread_mutex_t *__mutex, 39 const struct timespec *__abstime); 40 extern int __pthread_mutex_unlock (pthread_mutex_t *__mutex); 41 extern int __pthread_mutexattr_init (pthread_mutexattr_t *attr); 42 extern int __pthread_mutexattr_settype (pthread_mutexattr_t *attr, int kind); 43 44 extern int __pthread_cond_init (pthread_cond_t *cond, 45 const pthread_condattr_t *cond_attr); 46 extern int __pthread_cond_signal (pthread_cond_t *cond); 47 extern int __pthread_cond_broadcast (pthread_cond_t *cond); 48 extern int __pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex); 49 extern int __pthread_cond_timedwait (pthread_cond_t *cond, 50 pthread_mutex_t *mutex, 51 const struct timespec *abstime); 52 extern int __pthread_cond_clockwait (pthread_cond_t *cond, 53 pthread_mutex_t *mutex, 54 clockid_t clockid, 55 const struct timespec *abstime) 56 __nonnull ((1, 2, 4)); 57 extern int __pthread_cond_destroy (pthread_cond_t *cond); 58 59 typedef struct __cthread *__cthread_t; 60 typedef int __cthread_key_t; 61 typedef void * (*__cthread_fn_t)(void *__arg); 62 63 __cthread_t __cthread_fork (__cthread_fn_t, void *); 64 int __pthread_create (pthread_t *newthread, 65 const pthread_attr_t *attr, 66 void *(*start_routine) (void *), void *arg); 67 68 void __cthread_detach (__cthread_t); 69 int __pthread_detach (pthread_t __threadp); 70 void __pthread_exit (void *value) __attribute__ ((__noreturn__)); 71 int __pthread_join (pthread_t, void **); 72 int __cthread_keycreate (__cthread_key_t *); 73 int __cthread_getspecific (__cthread_key_t, void **); 74 int __cthread_setspecific (__cthread_key_t, void *); 75 int __pthread_key_create (pthread_key_t *key, void (*destr) (void *)); 76 void *__pthread_getspecific (pthread_key_t key); 77 int __pthread_setspecific (pthread_key_t key, const void *value); 78 int __pthread_key_delete (pthread_key_t key); 79 int __pthread_once (pthread_once_t *once_control, void (*init_routine) (void)); 80 81 int __pthread_setcancelstate (int state, int *oldstate); 82 83 int __pthread_getattr_np (pthread_t, pthread_attr_t *); 84 int __pthread_attr_getstackaddr (const pthread_attr_t *__restrict __attr, 85 void **__restrict __stackaddr); 86 int __pthread_attr_setstackaddr (pthread_attr_t *__attr, void *__stackaddr); 87 int __pthread_attr_getstacksize (const pthread_attr_t *__restrict __attr, 88 size_t *__restrict __stacksize); 89 int __pthread_attr_setstacksize (pthread_attr_t *__attr, size_t __stacksize); 90 int __pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, 91 size_t __stacksize); 92 int __pthread_attr_getstack (const pthread_attr_t *, void **, size_t *); 93 void __pthread_testcancel (void); 94 95 #if IS_IN (libpthread) 96 hidden_proto (__pthread_create) 97 hidden_proto (__pthread_detach) 98 hidden_proto (__pthread_key_create) 99 hidden_proto (__pthread_getspecific) 100 hidden_proto (__pthread_setspecific) 101 hidden_proto (__pthread_mutex_init) 102 hidden_proto (__pthread_mutex_destroy) 103 hidden_proto (__pthread_mutex_lock) 104 hidden_proto (__pthread_mutex_trylock) 105 hidden_proto (__pthread_mutex_unlock) 106 hidden_proto (__pthread_mutex_timedlock) 107 hidden_proto (__pthread_get_cleanup_stack) 108 #endif 109 110 #define ASSERT_TYPE_SIZE(type, size) \ 111 _Static_assert (sizeof (type) == size, \ 112 "sizeof (" #type ") != " #size) 113 114 #endif /* pthreadP.h */ 115