nptl: Add C11 threads thrd_* functions
This patch adds the thrd_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically thrd_create, thrd_curent, rhd_detach, thrd_equal,
thrd_exit, thrd_join, thrd_sleep, thrd_yield, and required types.
Mostly of the definitions are composed based on POSIX conterparts, such as
thrd_t (using pthread_t). For thrd_* function internally direct
POSIX pthread call are used with the exceptions:
1. thrd_start uses pthread_create internal implementation, but changes
how to actually calls the start routine. This is due the difference
in signature between POSIX and C11, where former return a 'void *'
and latter 'int'.
To avoid calling convention issues due 'void *' to int cast, routines
from C11 threads are started slight different than default pthread one.
Explicit cast to expected return are used internally on pthread_create
and the result is stored back to void also with an explicit cast.
2. thrd_sleep uses nanosleep internal direct syscall to avoid clobbering
errno and to handle expected standard return codes. It is a
cancellation entrypoint to be consistent with both thrd_join and
cnd_{timed}wait.
3. thrd_yield also uses internal direct syscall to avoid errno clobbering.
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/Makefile (conformtest-headers-ISO11): Add threads.h.
(linknamespace-libs-ISO11): Add libpthread.a.
* conform/data/threads.h-data: New file: add C11 thrd_* types and
functions.
* include/stdc-predef.h (__STDC_NO_THREADS__): Remove definition.
* nptl/Makefile (headers): Add threads.h.
(libpthread-routines): Add new C11 thread thrd_create, thrd_current,
thrd_detach, thrd_equal, thrd_exit, thrd_join, thrd_sleep, and
thrd_yield.
* nptl/Versions (libpthread) [GLIBC_2.28]): Add new C11 thread
thrd_create, thrd_current, thrd_detach, thrd_equal, thrd_exit,
thrd_join, thrd_sleep, and thrd_yield symbols.
* nptl/descr.h (struct pthread): Add c11 field.
* nptl/pthreadP.h (ATTR_C11_THREAD): New define.
* nptl/pthread_create.c (START_THREAD_DEFN): Call C11 thread start
routine with expected function prototype.
(__pthread_create_2_1): Add C11 threads check based on attribute
value.
* sysdeps/unix/sysdep.h (INTERNAL_SYSCALL_CANCEL): New macro.
* nptl/thrd_create.c: New file.
* nptl/thrd_current.c: Likewise.
* nptl/thrd_detach.c: Likewise.
* nptl/thrd_equal.c: Likewise.
* nptl/thrd_exit.c: Likewise.
* nptl/thrd_join.c: Likewise.
* nptl/thrd_priv.h: Likewise.
* nptl/thrd_sleep.c: Likewise.
* nptl/thrd_yield.c: Likewise.
* include/threads.h: Likewise.
2017-06-27 13:29:29 +00:00
|
|
|
#if defined ISO11
|
|
|
|
|
nptl: Add C11 threads call_once functions
This patch adds the call_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically call_once and required types.
Mostly of the definitions are composed based on POSIX conterparts,including
once_flag (pthread_once_t). The idea is to make possible to share POSIX
internal implementations for mostly of the code (and making adjustment only
when required).
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (ONCE_FLAG_INIT): New macro.
(once_flag): New type.
(call_once): New function.
* nptl/Makefile (libpthread-routines): Add call_once object.
* nptl/Versions (libphread) [GLIBC_2.28]: Add call_once symbol.
* nptl/call_once.c: New file.
* sysdeps/nptl/threads.h (ONCE_FLAG_INIT): New define.
(once_flag): New type.
(call_once): New prototype.
2017-06-27 13:49:51 +00:00
|
|
|
macro ONCE_FLAG_INIT
|
nptl: Add C11 threads tss_* functions
This patch adds the tss_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically tss_create, tss_delete, tss_get, tss_set, and required
types.
Mostly of the definitions are composed based on POSIX conterparts, including
tss_t (pthread_key_t).
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (thread_local): New macro.
(TSS_DTOR_ITERATIONS): Likewise.
(tss_t): New type.
(tss_dtor_t): Likewise.
(tss_create): New function.
(tss_get): Likewise.
(tss_set): Likewise.
(tss_delete): Likewise.
* nptl/Makefile (libpthread-routines): Add tss_create, tss_delete,
tss_get, and tss_set objects.
* nptl/Versions (libpthread) [GLIBC_2.28]: Likewise.
* nptl/tss_create.c: New file.
* nptl/tss_delete.c: Likewise.
* nptl/tss_get.c: Likewise.
* nptl/tss_set.c: Likewise.
* sysdeps/nptl/threads.h (thread_local): New define.
(TSS_DTOR_ITERATIONS): Likewise.
(tss_t): New typedef.
(tss_dtor_t): Likewise.
(tss_create): New prototype.
(tss_get): Likewise.
(tss_set): Likewise.
(tss_delete): Likewise.
2017-06-27 14:00:05 +00:00
|
|
|
macro thread_local
|
|
|
|
macro-int-constant TSS_DTOR_ITERATIONS
|
nptl: Add C11 threads call_once functions
This patch adds the call_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically call_once and required types.
Mostly of the definitions are composed based on POSIX conterparts,including
once_flag (pthread_once_t). The idea is to make possible to share POSIX
internal implementations for mostly of the code (and making adjustment only
when required).
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (ONCE_FLAG_INIT): New macro.
(once_flag): New type.
(call_once): New function.
* nptl/Makefile (libpthread-routines): Add call_once object.
* nptl/Versions (libphread) [GLIBC_2.28]: Add call_once symbol.
* nptl/call_once.c: New file.
* sysdeps/nptl/threads.h (ONCE_FLAG_INIT): New define.
(once_flag): New type.
(call_once): New prototype.
2017-06-27 13:49:51 +00:00
|
|
|
|
nptl: Add C11 threads thrd_* functions
This patch adds the thrd_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically thrd_create, thrd_curent, rhd_detach, thrd_equal,
thrd_exit, thrd_join, thrd_sleep, thrd_yield, and required types.
Mostly of the definitions are composed based on POSIX conterparts, such as
thrd_t (using pthread_t). For thrd_* function internally direct
POSIX pthread call are used with the exceptions:
1. thrd_start uses pthread_create internal implementation, but changes
how to actually calls the start routine. This is due the difference
in signature between POSIX and C11, where former return a 'void *'
and latter 'int'.
To avoid calling convention issues due 'void *' to int cast, routines
from C11 threads are started slight different than default pthread one.
Explicit cast to expected return are used internally on pthread_create
and the result is stored back to void also with an explicit cast.
2. thrd_sleep uses nanosleep internal direct syscall to avoid clobbering
errno and to handle expected standard return codes. It is a
cancellation entrypoint to be consistent with both thrd_join and
cnd_{timed}wait.
3. thrd_yield also uses internal direct syscall to avoid errno clobbering.
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/Makefile (conformtest-headers-ISO11): Add threads.h.
(linknamespace-libs-ISO11): Add libpthread.a.
* conform/data/threads.h-data: New file: add C11 thrd_* types and
functions.
* include/stdc-predef.h (__STDC_NO_THREADS__): Remove definition.
* nptl/Makefile (headers): Add threads.h.
(libpthread-routines): Add new C11 thread thrd_create, thrd_current,
thrd_detach, thrd_equal, thrd_exit, thrd_join, thrd_sleep, and
thrd_yield.
* nptl/Versions (libpthread) [GLIBC_2.28]): Add new C11 thread
thrd_create, thrd_current, thrd_detach, thrd_equal, thrd_exit,
thrd_join, thrd_sleep, and thrd_yield symbols.
* nptl/descr.h (struct pthread): Add c11 field.
* nptl/pthreadP.h (ATTR_C11_THREAD): New define.
* nptl/pthread_create.c (START_THREAD_DEFN): Call C11 thread start
routine with expected function prototype.
(__pthread_create_2_1): Add C11 threads check based on attribute
value.
* sysdeps/unix/sysdep.h (INTERNAL_SYSCALL_CANCEL): New macro.
* nptl/thrd_create.c: New file.
* nptl/thrd_current.c: Likewise.
* nptl/thrd_detach.c: Likewise.
* nptl/thrd_equal.c: Likewise.
* nptl/thrd_exit.c: Likewise.
* nptl/thrd_join.c: Likewise.
* nptl/thrd_priv.h: Likewise.
* nptl/thrd_sleep.c: Likewise.
* nptl/thrd_yield.c: Likewise.
* include/threads.h: Likewise.
2017-06-27 13:29:29 +00:00
|
|
|
constant thrd_success
|
|
|
|
constant thrd_busy
|
|
|
|
constant thrd_error
|
|
|
|
constant thrd_nomem
|
|
|
|
constant thrd_timedout
|
|
|
|
|
nptl: Add C11 threads mtx_* functions
This patch adds the mtx_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically mtx_init, mtx_destroy, mtx_lock, mtx_timedlock, mtx_trylock,
mtx_unlock, and required types.
Mostly of the definitions are composed based on POSIX conterparts, and mtx_t
is also based on internal pthread fields, but with a distinct internal layout
to avoid possible issues with code interchange (such as trying to pass POSIX
structure on C11 functions and to avoid inclusion of pthread.h). The idea
is to make possible to share POSIX internal implementations for mostly of
the code (and making adjustment only when required).
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (mtx_plain): New constant.
(mtx_recursive): Likewise.
(mtx_timed): Likewise.
(mtx_t): New type.
(mtx_init): New function.
(mtx_lock): Likewise.
(mtx_timedlock): Likewise.
(mtx_trylock): Likewise.
(mtx_unlock): Likewise.
(mtx_destroy): Likewise.
* nptl/Makefile (libpthread-routines): Add mtx_destroy, mtx_init,
mtx_lock, mtx_timedlock, mtx_trylock, and mtx_unlock object.
* nptl/Versions (libpthread) [GLIBC_2.28]): Add mtx_init, mtx_lock,
mtx_timedlock, mtx_trylock, mtx_unlock, and mtx_destroy.
* nptl/mtx_destroy.c: New file.
* nptl/mtx_init.c: Likewise.
* nptl/mtx_lock.c: Likewise.
* nptl/mtx_timedlock.c: Likewise.
* nptl/mtx_trylock.c: Likewise.
* nptl/mtx_unlock.c: Likewise.
* sysdeps/nptl/threads.h (mtx_plain): New enumeration.
(mtx_recursive): Likewise.
(mtx_timed): Likewise.
(mtx_t): New type.
(mtx_init): New prototype.
(mtx_lock): Likewise.
(mtx_timedlock): Likewise.
(mtx_trylock): Likewise.
(mtx_unlock): Likewise.
(mtx_destroy): Likewise.
2017-06-27 13:45:04 +00:00
|
|
|
constant mtx_plain
|
|
|
|
constant mtx_recursive
|
|
|
|
constant mtx_timed
|
|
|
|
|
nptl: Add C11 threads thrd_* functions
This patch adds the thrd_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically thrd_create, thrd_curent, rhd_detach, thrd_equal,
thrd_exit, thrd_join, thrd_sleep, thrd_yield, and required types.
Mostly of the definitions are composed based on POSIX conterparts, such as
thrd_t (using pthread_t). For thrd_* function internally direct
POSIX pthread call are used with the exceptions:
1. thrd_start uses pthread_create internal implementation, but changes
how to actually calls the start routine. This is due the difference
in signature between POSIX and C11, where former return a 'void *'
and latter 'int'.
To avoid calling convention issues due 'void *' to int cast, routines
from C11 threads are started slight different than default pthread one.
Explicit cast to expected return are used internally on pthread_create
and the result is stored back to void also with an explicit cast.
2. thrd_sleep uses nanosleep internal direct syscall to avoid clobbering
errno and to handle expected standard return codes. It is a
cancellation entrypoint to be consistent with both thrd_join and
cnd_{timed}wait.
3. thrd_yield also uses internal direct syscall to avoid errno clobbering.
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/Makefile (conformtest-headers-ISO11): Add threads.h.
(linknamespace-libs-ISO11): Add libpthread.a.
* conform/data/threads.h-data: New file: add C11 thrd_* types and
functions.
* include/stdc-predef.h (__STDC_NO_THREADS__): Remove definition.
* nptl/Makefile (headers): Add threads.h.
(libpthread-routines): Add new C11 thread thrd_create, thrd_current,
thrd_detach, thrd_equal, thrd_exit, thrd_join, thrd_sleep, and
thrd_yield.
* nptl/Versions (libpthread) [GLIBC_2.28]): Add new C11 thread
thrd_create, thrd_current, thrd_detach, thrd_equal, thrd_exit,
thrd_join, thrd_sleep, and thrd_yield symbols.
* nptl/descr.h (struct pthread): Add c11 field.
* nptl/pthreadP.h (ATTR_C11_THREAD): New define.
* nptl/pthread_create.c (START_THREAD_DEFN): Call C11 thread start
routine with expected function prototype.
(__pthread_create_2_1): Add C11 threads check based on attribute
value.
* sysdeps/unix/sysdep.h (INTERNAL_SYSCALL_CANCEL): New macro.
* nptl/thrd_create.c: New file.
* nptl/thrd_current.c: Likewise.
* nptl/thrd_detach.c: Likewise.
* nptl/thrd_equal.c: Likewise.
* nptl/thrd_exit.c: Likewise.
* nptl/thrd_join.c: Likewise.
* nptl/thrd_priv.h: Likewise.
* nptl/thrd_sleep.c: Likewise.
* nptl/thrd_yield.c: Likewise.
* include/threads.h: Likewise.
2017-06-27 13:29:29 +00:00
|
|
|
type thrd_t
|
|
|
|
type thrd_start_t
|
nptl: Add C11 threads mtx_* functions
This patch adds the mtx_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically mtx_init, mtx_destroy, mtx_lock, mtx_timedlock, mtx_trylock,
mtx_unlock, and required types.
Mostly of the definitions are composed based on POSIX conterparts, and mtx_t
is also based on internal pthread fields, but with a distinct internal layout
to avoid possible issues with code interchange (such as trying to pass POSIX
structure on C11 functions and to avoid inclusion of pthread.h). The idea
is to make possible to share POSIX internal implementations for mostly of
the code (and making adjustment only when required).
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (mtx_plain): New constant.
(mtx_recursive): Likewise.
(mtx_timed): Likewise.
(mtx_t): New type.
(mtx_init): New function.
(mtx_lock): Likewise.
(mtx_timedlock): Likewise.
(mtx_trylock): Likewise.
(mtx_unlock): Likewise.
(mtx_destroy): Likewise.
* nptl/Makefile (libpthread-routines): Add mtx_destroy, mtx_init,
mtx_lock, mtx_timedlock, mtx_trylock, and mtx_unlock object.
* nptl/Versions (libpthread) [GLIBC_2.28]): Add mtx_init, mtx_lock,
mtx_timedlock, mtx_trylock, mtx_unlock, and mtx_destroy.
* nptl/mtx_destroy.c: New file.
* nptl/mtx_init.c: Likewise.
* nptl/mtx_lock.c: Likewise.
* nptl/mtx_timedlock.c: Likewise.
* nptl/mtx_trylock.c: Likewise.
* nptl/mtx_unlock.c: Likewise.
* sysdeps/nptl/threads.h (mtx_plain): New enumeration.
(mtx_recursive): Likewise.
(mtx_timed): Likewise.
(mtx_t): New type.
(mtx_init): New prototype.
(mtx_lock): Likewise.
(mtx_timedlock): Likewise.
(mtx_trylock): Likewise.
(mtx_unlock): Likewise.
(mtx_destroy): Likewise.
2017-06-27 13:45:04 +00:00
|
|
|
type mtx_t
|
nptl: Add C11 threads call_once functions
This patch adds the call_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically call_once and required types.
Mostly of the definitions are composed based on POSIX conterparts,including
once_flag (pthread_once_t). The idea is to make possible to share POSIX
internal implementations for mostly of the code (and making adjustment only
when required).
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (ONCE_FLAG_INIT): New macro.
(once_flag): New type.
(call_once): New function.
* nptl/Makefile (libpthread-routines): Add call_once object.
* nptl/Versions (libphread) [GLIBC_2.28]: Add call_once symbol.
* nptl/call_once.c: New file.
* sysdeps/nptl/threads.h (ONCE_FLAG_INIT): New define.
(once_flag): New type.
(call_once): New prototype.
2017-06-27 13:49:51 +00:00
|
|
|
type once_flag
|
nptl: Add C11 threads cnd_* functions
This patch adds the cnd_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically cnd_broadcast, cnd_destroy, cnd_init, cnd_signal,
cnd_timedwait, cnd_wait, and required types.
Mostly of the definitions are composed based on POSIX conterparts, and
cnd_t is also based on internal pthreads fields, but with distinct internal
layout to avoid possible issues with code interchange (such as trying to pass
POSIX structure on C11 functions and to avoid inclusion of pthread.h). The
idea is to make it possible to share POSIX internal implementation for mostly
of the code making adjust where only required.
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (cnd_t): New type.
(cnd_init): New function.
(cnd_signal): Likewise.
(cnd_broadcast): Likewise.
(cnd_wait): Likewise.
(cnd_timedwait): Likewise.
(cnd_destroy): Likewise.
* nptl/Makefile (libpthread-routines): Add cnd_broadcast,
cnd_destroy, cnd_init, cnd_signal, cnd_timedwait, and cnd_wait
object.
* nptl/Versions (libpthread) [GLIBC_2.28]: Likewise.
* nptl/cnd_broadcast.c: New file.
* nptl/cnd_destroy.c: Likewise.
* nptl/cnd_init.c: Likewise.
* nptl/cnd_signal.c: Likewise.
* nptl/cnd_timedwait.c: Likewise.
* nptl/cnd_wait.c: Likewise.
* sysdeps/nptl/threads.h (cnd_t): New type.
(cnd_init): New prototype.
(cnd_signa): Likewise.
(cnd_broadcast): Likewise.
(cnd_wait): Likewise.
(cnd_timedwait): Likewise.
(cnd_destroy): Likewise.
2017-06-27 13:55:10 +00:00
|
|
|
type cnd_t
|
nptl: Add C11 threads tss_* functions
This patch adds the tss_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically tss_create, tss_delete, tss_get, tss_set, and required
types.
Mostly of the definitions are composed based on POSIX conterparts, including
tss_t (pthread_key_t).
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (thread_local): New macro.
(TSS_DTOR_ITERATIONS): Likewise.
(tss_t): New type.
(tss_dtor_t): Likewise.
(tss_create): New function.
(tss_get): Likewise.
(tss_set): Likewise.
(tss_delete): Likewise.
* nptl/Makefile (libpthread-routines): Add tss_create, tss_delete,
tss_get, and tss_set objects.
* nptl/Versions (libpthread) [GLIBC_2.28]: Likewise.
* nptl/tss_create.c: New file.
* nptl/tss_delete.c: Likewise.
* nptl/tss_get.c: Likewise.
* nptl/tss_set.c: Likewise.
* sysdeps/nptl/threads.h (thread_local): New define.
(TSS_DTOR_ITERATIONS): Likewise.
(tss_t): New typedef.
(tss_dtor_t): Likewise.
(tss_create): New prototype.
(tss_get): Likewise.
(tss_set): Likewise.
(tss_delete): Likewise.
2017-06-27 14:00:05 +00:00
|
|
|
type tss_t
|
|
|
|
type tss_dtor_t
|
nptl: Add C11 threads thrd_* functions
This patch adds the thrd_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically thrd_create, thrd_curent, rhd_detach, thrd_equal,
thrd_exit, thrd_join, thrd_sleep, thrd_yield, and required types.
Mostly of the definitions are composed based on POSIX conterparts, such as
thrd_t (using pthread_t). For thrd_* function internally direct
POSIX pthread call are used with the exceptions:
1. thrd_start uses pthread_create internal implementation, but changes
how to actually calls the start routine. This is due the difference
in signature between POSIX and C11, where former return a 'void *'
and latter 'int'.
To avoid calling convention issues due 'void *' to int cast, routines
from C11 threads are started slight different than default pthread one.
Explicit cast to expected return are used internally on pthread_create
and the result is stored back to void also with an explicit cast.
2. thrd_sleep uses nanosleep internal direct syscall to avoid clobbering
errno and to handle expected standard return codes. It is a
cancellation entrypoint to be consistent with both thrd_join and
cnd_{timed}wait.
3. thrd_yield also uses internal direct syscall to avoid errno clobbering.
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/Makefile (conformtest-headers-ISO11): Add threads.h.
(linknamespace-libs-ISO11): Add libpthread.a.
* conform/data/threads.h-data: New file: add C11 thrd_* types and
functions.
* include/stdc-predef.h (__STDC_NO_THREADS__): Remove definition.
* nptl/Makefile (headers): Add threads.h.
(libpthread-routines): Add new C11 thread thrd_create, thrd_current,
thrd_detach, thrd_equal, thrd_exit, thrd_join, thrd_sleep, and
thrd_yield.
* nptl/Versions (libpthread) [GLIBC_2.28]): Add new C11 thread
thrd_create, thrd_current, thrd_detach, thrd_equal, thrd_exit,
thrd_join, thrd_sleep, and thrd_yield symbols.
* nptl/descr.h (struct pthread): Add c11 field.
* nptl/pthreadP.h (ATTR_C11_THREAD): New define.
* nptl/pthread_create.c (START_THREAD_DEFN): Call C11 thread start
routine with expected function prototype.
(__pthread_create_2_1): Add C11 threads check based on attribute
value.
* sysdeps/unix/sysdep.h (INTERNAL_SYSCALL_CANCEL): New macro.
* nptl/thrd_create.c: New file.
* nptl/thrd_current.c: Likewise.
* nptl/thrd_detach.c: Likewise.
* nptl/thrd_equal.c: Likewise.
* nptl/thrd_exit.c: Likewise.
* nptl/thrd_join.c: Likewise.
* nptl/thrd_priv.h: Likewise.
* nptl/thrd_sleep.c: Likewise.
* nptl/thrd_yield.c: Likewise.
* include/threads.h: Likewise.
2017-06-27 13:29:29 +00:00
|
|
|
|
|
|
|
function int thrd_create (thrd_t*, thrd_start_t, void*)
|
|
|
|
function int thrd_equal (thrd_t, thrd_t)
|
|
|
|
function thrd_t thrd_current (void)
|
|
|
|
function int thrd_sleep (const struct timespec*, struct timespec*)
|
|
|
|
function void thrd_exit (int)
|
|
|
|
function int thrd_detach (thrd_t)
|
|
|
|
function int thrd_join (thrd_t, int*)
|
|
|
|
function void thrd_yield (void)
|
|
|
|
|
nptl: Add C11 threads mtx_* functions
This patch adds the mtx_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically mtx_init, mtx_destroy, mtx_lock, mtx_timedlock, mtx_trylock,
mtx_unlock, and required types.
Mostly of the definitions are composed based on POSIX conterparts, and mtx_t
is also based on internal pthread fields, but with a distinct internal layout
to avoid possible issues with code interchange (such as trying to pass POSIX
structure on C11 functions and to avoid inclusion of pthread.h). The idea
is to make possible to share POSIX internal implementations for mostly of
the code (and making adjustment only when required).
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (mtx_plain): New constant.
(mtx_recursive): Likewise.
(mtx_timed): Likewise.
(mtx_t): New type.
(mtx_init): New function.
(mtx_lock): Likewise.
(mtx_timedlock): Likewise.
(mtx_trylock): Likewise.
(mtx_unlock): Likewise.
(mtx_destroy): Likewise.
* nptl/Makefile (libpthread-routines): Add mtx_destroy, mtx_init,
mtx_lock, mtx_timedlock, mtx_trylock, and mtx_unlock object.
* nptl/Versions (libpthread) [GLIBC_2.28]): Add mtx_init, mtx_lock,
mtx_timedlock, mtx_trylock, mtx_unlock, and mtx_destroy.
* nptl/mtx_destroy.c: New file.
* nptl/mtx_init.c: Likewise.
* nptl/mtx_lock.c: Likewise.
* nptl/mtx_timedlock.c: Likewise.
* nptl/mtx_trylock.c: Likewise.
* nptl/mtx_unlock.c: Likewise.
* sysdeps/nptl/threads.h (mtx_plain): New enumeration.
(mtx_recursive): Likewise.
(mtx_timed): Likewise.
(mtx_t): New type.
(mtx_init): New prototype.
(mtx_lock): Likewise.
(mtx_timedlock): Likewise.
(mtx_trylock): Likewise.
(mtx_unlock): Likewise.
(mtx_destroy): Likewise.
2017-06-27 13:45:04 +00:00
|
|
|
function int mtx_init (mtx_t*, int)
|
|
|
|
function int mtx_lock (mtx_t*)
|
|
|
|
function int mtx_timedlock (mtx_t*, const struct timespec*)
|
|
|
|
function int mtx_trylock (mtx_t*)
|
|
|
|
function int mtx_unlock (mtx_t*)
|
|
|
|
function void mtx_destroy (mtx_t*)
|
|
|
|
|
nptl: Add C11 threads call_once functions
This patch adds the call_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically call_once and required types.
Mostly of the definitions are composed based on POSIX conterparts,including
once_flag (pthread_once_t). The idea is to make possible to share POSIX
internal implementations for mostly of the code (and making adjustment only
when required).
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (ONCE_FLAG_INIT): New macro.
(once_flag): New type.
(call_once): New function.
* nptl/Makefile (libpthread-routines): Add call_once object.
* nptl/Versions (libphread) [GLIBC_2.28]: Add call_once symbol.
* nptl/call_once.c: New file.
* sysdeps/nptl/threads.h (ONCE_FLAG_INIT): New define.
(once_flag): New type.
(call_once): New prototype.
2017-06-27 13:49:51 +00:00
|
|
|
function void call_once (once_flag*, void (*)(void))
|
|
|
|
|
nptl: Add C11 threads cnd_* functions
This patch adds the cnd_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically cnd_broadcast, cnd_destroy, cnd_init, cnd_signal,
cnd_timedwait, cnd_wait, and required types.
Mostly of the definitions are composed based on POSIX conterparts, and
cnd_t is also based on internal pthreads fields, but with distinct internal
layout to avoid possible issues with code interchange (such as trying to pass
POSIX structure on C11 functions and to avoid inclusion of pthread.h). The
idea is to make it possible to share POSIX internal implementation for mostly
of the code making adjust where only required.
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (cnd_t): New type.
(cnd_init): New function.
(cnd_signal): Likewise.
(cnd_broadcast): Likewise.
(cnd_wait): Likewise.
(cnd_timedwait): Likewise.
(cnd_destroy): Likewise.
* nptl/Makefile (libpthread-routines): Add cnd_broadcast,
cnd_destroy, cnd_init, cnd_signal, cnd_timedwait, and cnd_wait
object.
* nptl/Versions (libpthread) [GLIBC_2.28]: Likewise.
* nptl/cnd_broadcast.c: New file.
* nptl/cnd_destroy.c: Likewise.
* nptl/cnd_init.c: Likewise.
* nptl/cnd_signal.c: Likewise.
* nptl/cnd_timedwait.c: Likewise.
* nptl/cnd_wait.c: Likewise.
* sysdeps/nptl/threads.h (cnd_t): New type.
(cnd_init): New prototype.
(cnd_signa): Likewise.
(cnd_broadcast): Likewise.
(cnd_wait): Likewise.
(cnd_timedwait): Likewise.
(cnd_destroy): Likewise.
2017-06-27 13:55:10 +00:00
|
|
|
function int cnd_init (cnd_t*)
|
|
|
|
function int cnd_signal (cnd_t*)
|
|
|
|
function int cnd_broadcast (cnd_t*)
|
|
|
|
function int cnd_wait (cnd_t*, mtx_t*)
|
|
|
|
function int cnd_timedwait (cnd_t*, mtx_t*, const struct timespec*)
|
|
|
|
function void cnd_destroy (cnd_t*)
|
|
|
|
|
nptl: Add C11 threads tss_* functions
This patch adds the tss_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically tss_create, tss_delete, tss_get, tss_set, and required
types.
Mostly of the definitions are composed based on POSIX conterparts, including
tss_t (pthread_key_t).
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/data/threads.h-data (thread_local): New macro.
(TSS_DTOR_ITERATIONS): Likewise.
(tss_t): New type.
(tss_dtor_t): Likewise.
(tss_create): New function.
(tss_get): Likewise.
(tss_set): Likewise.
(tss_delete): Likewise.
* nptl/Makefile (libpthread-routines): Add tss_create, tss_delete,
tss_get, and tss_set objects.
* nptl/Versions (libpthread) [GLIBC_2.28]: Likewise.
* nptl/tss_create.c: New file.
* nptl/tss_delete.c: Likewise.
* nptl/tss_get.c: Likewise.
* nptl/tss_set.c: Likewise.
* sysdeps/nptl/threads.h (thread_local): New define.
(TSS_DTOR_ITERATIONS): Likewise.
(tss_t): New typedef.
(tss_dtor_t): Likewise.
(tss_create): New prototype.
(tss_get): Likewise.
(tss_set): Likewise.
(tss_delete): Likewise.
2017-06-27 14:00:05 +00:00
|
|
|
function int tss_create (tss_t*, tss_dtor_t)
|
|
|
|
function {void*} tss_get (tss_t)
|
|
|
|
function int tss_set (tss_t, void*)
|
|
|
|
function void tss_delete (tss_t)
|
|
|
|
|
nptl: Add C11 threads thrd_* functions
This patch adds the thrd_* definitions from C11 threads (ISO/IEC 9899:2011),
more specifically thrd_create, thrd_curent, rhd_detach, thrd_equal,
thrd_exit, thrd_join, thrd_sleep, thrd_yield, and required types.
Mostly of the definitions are composed based on POSIX conterparts, such as
thrd_t (using pthread_t). For thrd_* function internally direct
POSIX pthread call are used with the exceptions:
1. thrd_start uses pthread_create internal implementation, but changes
how to actually calls the start routine. This is due the difference
in signature between POSIX and C11, where former return a 'void *'
and latter 'int'.
To avoid calling convention issues due 'void *' to int cast, routines
from C11 threads are started slight different than default pthread one.
Explicit cast to expected return are used internally on pthread_create
and the result is stored back to void also with an explicit cast.
2. thrd_sleep uses nanosleep internal direct syscall to avoid clobbering
errno and to handle expected standard return codes. It is a
cancellation entrypoint to be consistent with both thrd_join and
cnd_{timed}wait.
3. thrd_yield also uses internal direct syscall to avoid errno clobbering.
Checked with a build for all major ABI (aarch64-linux-gnu, alpha-linux-gnu,
arm-linux-gnueabi, i386-linux-gnu, ia64-linux-gnu, m68k-linux-gnu,
microblaze-linux-gnu [1], mips{64}-linux-gnu, nios2-linux-gnu,
powerpc{64le}-linux-gnu, s390{x}-linux-gnu, sparc{64}-linux-gnu,
and x86_64-linux-gnu).
Also ran a full check on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabhf, and powerpc64le-linux-gnu.
[BZ #14092]
* conform/Makefile (conformtest-headers-ISO11): Add threads.h.
(linknamespace-libs-ISO11): Add libpthread.a.
* conform/data/threads.h-data: New file: add C11 thrd_* types and
functions.
* include/stdc-predef.h (__STDC_NO_THREADS__): Remove definition.
* nptl/Makefile (headers): Add threads.h.
(libpthread-routines): Add new C11 thread thrd_create, thrd_current,
thrd_detach, thrd_equal, thrd_exit, thrd_join, thrd_sleep, and
thrd_yield.
* nptl/Versions (libpthread) [GLIBC_2.28]): Add new C11 thread
thrd_create, thrd_current, thrd_detach, thrd_equal, thrd_exit,
thrd_join, thrd_sleep, and thrd_yield symbols.
* nptl/descr.h (struct pthread): Add c11 field.
* nptl/pthreadP.h (ATTR_C11_THREAD): New define.
* nptl/pthread_create.c (START_THREAD_DEFN): Call C11 thread start
routine with expected function prototype.
(__pthread_create_2_1): Add C11 threads check based on attribute
value.
* sysdeps/unix/sysdep.h (INTERNAL_SYSCALL_CANCEL): New macro.
* nptl/thrd_create.c: New file.
* nptl/thrd_current.c: Likewise.
* nptl/thrd_detach.c: Likewise.
* nptl/thrd_equal.c: Likewise.
* nptl/thrd_exit.c: Likewise.
* nptl/thrd_join.c: Likewise.
* nptl/thrd_priv.h: Likewise.
* nptl/thrd_sleep.c: Likewise.
* nptl/thrd_yield.c: Likewise.
* include/threads.h: Likewise.
2017-06-27 13:29:29 +00:00
|
|
|
#include "time.h-data"
|
|
|
|
|
|
|
|
#endif
|