Bug 14092 - Support C11 threads
Summary: Support C11 threads
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: nptl (show other bugs)
Version: 2.15
: P2 normal
Target Milestone: 2.28
Assignee: Adhemerval Zanella
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-05-10 14:42 UTC by Joseph Myers
Modified: 2018-07-24 19:03 UTC (History)
11 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:
fweimer: security-


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Joseph Myers 2012-05-10 14:42:59 UTC
It might be useful for glibc to implement the C11 <threads.h> functionality.

http://sourceware.org/ml/libc-alpha/2011-12/msg00059.html

has some comments about how this might be done without having a new shared library.  (However, making pthreadtypes.h stay within the ISO C reserved namespace may be harder than suggested there, because of C++ mangling issues; see how when we gave the union that's pthread_attr_t a tag, it had to be exactly "union pthread_attr_t" to avoid changing the mangling.)
Comment 1 Rich Felker 2012-05-10 15:44:57 UTC
I think it's safe (and probably preferable) NOT to use the same types for C11 threads. This will catch program errors of trying to call a C11 thread function on a POSIX thread object or vice versa. Of course, if it's desirable for the implementations to be shared (and I believe it is), then the corresponding types should have the same *sizes*, and internally the code should just cast away (or spirit it away with weak symbols and fake prototypes) the difference in pointer types.

In any case, I'd like to hear a decision on what glibc intends to do on this issue. I'm aiming to keep the C (but not C++) ABI in musl libc mostly compatible with glibc, and not knowing what sizes glibc intends to use for the C11 mutex, etc. types is preventing me from getting C11 threads implemented.
Comment 2 Fredrik Tolf 2017-02-19 21:10:37 UTC
I am surprised by any lack of progress in this for almost five years. Is there any reason why glibc hasn't added C11 threading support yet, or is it just that no-one has any interest in it?
Comment 3 jsm-csl@polyomino.org.uk 2017-02-20 16:37:29 UTC
A complicated patch series can be expected to go through many cycles of 
patch review and revision.  At some point, detailed review comments were 
provided for one patch series revision and updated patches did not follow.

I'm not sure what Adhemerval's plans are having picked up those patches 
and put them on the azanella/c11-threads branch (or whether the patches 
there do reflect all the review comments, or whether the various C11 DRs 
relating to the definition of the C11 threads interfaces have been 
reviewed to make sure the implementation properly respects the DR 
resolutions).
Comment 4 Bogdan Barbu 2018-05-15 04:03:28 UTC
The original author claimed to have been frustrated by the lack of interest from the developers. Having resolved all the issues pointing out and pinging the mailing list a bunch he said he had enough.

Since then, Adhemerval revised the patch set numerous times but things seem to have eventually gone in the same direction.

We've had numerous projects switch over to Musl (which supports C11 threads), using Cygwin whenever neccessary. I think it is safe to assume that glibc will not support this feature, which has been standardized almost a decade ago.
Comment 5 Carlos O'Donell 2018-05-15 12:48:49 UTC
(In reply to Bogdan Barbu from comment #4)
> The original author claimed to have been frustrated by the lack of interest
> from the developers. Having resolved all the issues pointing out and pinging
> the mailing list a bunch he said he had enough.

I'm sorry to hear that. We're a volunteer project. Many times that means it's hard to get review for your changes, much like in the Linux kernel, or other larger projects.

Let me assure you we *do* want C11 threads, but it's a large new set of APIs that have ABI consequences.
 
> Since then, Adhemerval revised the patch set numerous times but things seem
> to have eventually gone in the same direction.

I trust Adhemerval to keep pinging.

> We've had numerous projects switch over to Musl (which supports C11
> threads), using Cygwin whenever neccessary. I think it is safe to assume
> that glibc will not support this feature, which has been standardized almost
> a decade ago.

No, we will support it, but it just takes time to merge large chunks of code. We ask for patience, and to reach out to the stewards for additional review if required.
Comment 6 Evan Nemerson 2018-05-15 18:32:05 UTC
I'd love to see C11 threads implemented in glibc, but switching to musl (or another libc) probably isn't an option for most people, and even if it were it's a pretty heavy-handed work-around… there are several projects which wrap pthreads in the C11 API. I maintain one of them, TinyCThread (<https://tinycthread.github.io>), which also has a WinAPI backend. If you don't expose the API publicly, one of those projects is probably a good temporary solution until this issue is resolved.
Comment 7 Eric Herman 2018-05-25 07:12:38 UTC
Consider Mesa:

https://cgit.freedesktop.org/mesa/mesa/tree/include/c11
Comment 8 Sourceware Commits 2018-07-21 13:34:37 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, azanella/c11-threads has been created
        at  06a612274bc4eaa1acaf0b9c8c895587908a576e (commit)

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=06a612274bc4eaa1acaf0b9c8c895587908a576e

commit 06a612274bc4eaa1acaf0b9c8c895587908a576e
Author: Rical Jasan <rj@2c3t.io>
Date:   Tue Dec 6 20:47:02 2016 -0200

    Add manual documentation for threads.h
    
    This patch updates the manual and adds a new chapter to the manual,
    explaining types macros, constants and functions defined by ISO C11
    threads.h standard.
    
    	[BZ# 14092]
    	* manual/debug.texi: Update adjacent chapter name.
    	* manual/probes.texi: Likewise.
    	* manual/threads.texi (ISO C Threads): New section.
    	(POSIX Threads): Convert to a section.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=dc5e47a755eeb7330894286ef15ead296be4e5f8

commit dc5e47a755eeb7330894286ef15ead296be4e5f8
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Mon Dec 5 18:32:11 2016 -0200

    nptl: Add test cases for ISO C11 threads
    
    This patch adds to testsuite new test cases to test all new introduced
    C11 threads functions, types and macros are tested.
    
    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,
    tile{pro,gx}-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.
    
    	Adhemerval Zanella  <adhemerval.zanella@linaro.org>
    	Juan Manuel Torres Palma  <jmtorrespalma@gmail.com>
    
    	[BZ #14092]
    	* nptl/Makefile (tests): Add new test files.
    	* nptl/tst-call-once.c : New file. Tests C11 functions and types.
    	* nptl/tst-cnd-basic.c: Likewise.
    	* nptl/tst-cnd-broadcast.c: Likewise.
    	* nptl/tst-cnd-timedwait.c: Likewise.
    	* nptl/tst-mtx-basic.c: Likewise.
    	* nptl/tst-mtx-recursive.c: Likewise.
    	* nptl/tst-mtx-timedlock.c: Likewise.
    	* nptl/tst-mtx-trylock.c: Likewise.
    	* nptl/tst-thrd-basic.c: Likewise.
    	* nptl/tst-thrd-detach.c: Likewise.
    	* nptl/tst-thrd-sleep.c: Likewise.
    	* nptl/tst-tss-basic.c: Likewise.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=cb68b8f38000ac1ed3b2292f68e590d779208bdd

commit cb68b8f38000ac1ed3b2292f68e590d779208bdd
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 11:02:16 2017 -0300

    nptl: Add abilist symbols for C11 threads
    
    This patch adds the required abilist symbols for C11 thread support.
    
    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,
    tile{pro,gx}-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]
    	* sysdeps/unix/sysv/linux/aarch64/libc.abilist [GLIBC_2.28]
    	(thrd_current, thrd_equal, thrd_sleep, thrd_yield): Add C11 thread
    	symbols.
    	* sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
    	Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist:
    	Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist:
    	Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/aarch64/libpthread.abilist [[GLIBC_2.28]
    	(call_once, cnd_broadcast, cnd_destroy, cnd_init, cnd_signal,
    	cnd_timedwait, cnd_wait, mtx_destroy, mtx_init, mtx_lock,
    	mtx_timedlock, mtx_trylock, mtx_unlokc, thrd_create, thrd_detach,
    	thrd_exit, thrd_join, tss_create, tss_delete, tss_get, tss_set):
    	Likewise.
    	* sysdeps/unix/sysv/linux/aarch64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/alpha/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/arm/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/hppa/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/i386/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/ia64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/microblaze/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/nios2/libpthread.abilist: Likewise.
    	ikewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist:
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist:
    	Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist:
    	Likewise.
    	* sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sh/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist: Likewise.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=212c8dc9a1fcb0d2b72bedb474fd99bd7152aac0

commit 212c8dc9a1fcb0d2b72bedb474fd99bd7152aac0
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 11:00:05 2017 -0300

    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,
    tile{pro,gx}-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.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=6388e5d9432fd5acc30c1dfa8a681fc655e4f49e

commit 6388e5d9432fd5acc30c1dfa8a681fc655e4f49e
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 10:55:10 2017 -0300

    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,
    tile{pro,gx}-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.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=b06bbd114f668dee17875ab00b2640f38b1d90b4

commit b06bbd114f668dee17875ab00b2640f38b1d90b4
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 10:49:51 2017 -0300

    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,
    tile{pro,gx}-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.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=38e61d9925c39783429b344ca0970e2ef46d7a1b

commit 38e61d9925c39783429b344ca0970e2ef46d7a1b
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 10:45:04 2017 -0300

    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,
    tile{pro,gx}-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.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=66b6a7d00fb6bac32991b8331f867784c4e3f4a6

commit 66b6a7d00fb6bac32991b8331f867784c4e3f4a6
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 10:29:29 2017 -0300

    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,
    tile{pro,gx}-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.

-----------------------------------------------------------------------
Comment 9 Sourceware Commits 2018-07-24 17:08:31 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, azanella/c11-threads has been created
        at  9d0a979e5ddcec8ede63b04364e4f5d442d04e14 (commit)

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=9d0a979e5ddcec8ede63b04364e4f5d442d04e14

commit 9d0a979e5ddcec8ede63b04364e4f5d442d04e14
Author: Rical Jasan <rj@2c3t.io>
Date:   Tue Dec 6 20:47:02 2016 -0200

    Add manual documentation for threads.h
    
    This patch updates the manual and adds a new chapter to the manual,
    explaining types macros, constants and functions defined by ISO C11
    threads.h standard.
    
    	[BZ# 14092]
    	* manual/debug.texi: Update adjacent chapter name.
    	* manual/probes.texi: Likewise.
    	* manual/threads.texi (ISO C Threads): New section.
    	(POSIX Threads): Convert to a section.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=0a07288b13c89dbbb1cac964891f5905a0919434

commit 0a07288b13c89dbbb1cac964891f5905a0919434
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Mon Dec 5 18:32:11 2016 -0200

    nptl: Add test cases for ISO C11 threads
    
    This patch adds to testsuite new test cases to test all new introduced
    C11 threads functions, types and macros are tested.
    
    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.
    
    	Adhemerval Zanella  <adhemerval.zanella@linaro.org>
    	Juan Manuel Torres Palma  <jmtorrespalma@gmail.com>
    
    	[BZ #14092]
    	* nptl/Makefile (tests): Add new test files.
    	* nptl/tst-call-once.c : New file. Tests C11 functions and types.
    	* nptl/tst-cnd-basic.c: Likewise.
    	* nptl/tst-cnd-broadcast.c: Likewise.
    	* nptl/tst-cnd-timedwait.c: Likewise.
    	* nptl/tst-mtx-basic.c: Likewise.
    	* nptl/tst-mtx-recursive.c: Likewise.
    	* nptl/tst-mtx-timedlock.c: Likewise.
    	* nptl/tst-mtx-trylock.c: Likewise.
    	* nptl/tst-thrd-basic.c: Likewise.
    	* nptl/tst-thrd-detach.c: Likewise.
    	* nptl/tst-thrd-sleep.c: Likewise.
    	* nptl/tst-tss-basic.c: Likewise.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=c6dd669bed2ebdd0303e880214f3907477fc72d1

commit c6dd669bed2ebdd0303e880214f3907477fc72d1
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 11:02:16 2017 -0300

    nptl: Add abilist symbols for C11 threads
    
    This patch adds the required abilist symbols for C11 thread support.
    
    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]
    	* sysdeps/unix/sysv/linux/aarch64/libc.abilist [GLIBC_2.28]
    	(thrd_current, thrd_equal, thrd_sleep, thrd_yield): Add C11 thread
    	symbols.
    	* sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
    	Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist:
    	Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist:
    	Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/aarch64/libpthread.abilist [[GLIBC_2.28]
    	(call_once, cnd_broadcast, cnd_destroy, cnd_init, cnd_signal,
    	cnd_timedwait, cnd_wait, mtx_destroy, mtx_init, mtx_lock,
    	mtx_timedlock, mtx_trylock, mtx_unlokc, thrd_create, thrd_detach,
    	thrd_exit, thrd_join, tss_create, tss_delete, tss_get, tss_set):
    	Likewise.
    	* sysdeps/unix/sysv/linux/aarch64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/alpha/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/arm/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/hppa/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/i386/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/ia64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/microblaze/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/nios2/libpthread.abilist: Likewise.
    	ikewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist:
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread-le.abilist:
    	Likewise.
    	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libpthread.abilist:
    	Likewise.
    	* sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sh/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist: Likewise.
    	* sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist: Likewise.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=78d401327f3bcbb06f5d6b388a967cae2ab42b43

commit 78d401327f3bcbb06f5d6b388a967cae2ab42b43
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 11:00:05 2017 -0300

    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.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=918311a3a3c7679f40e2e95fcaa120f8c74ef479

commit 918311a3a3c7679f40e2e95fcaa120f8c74ef479
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 10:55:10 2017 -0300

    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.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=3c20a679b6e31af07542e56a446e2433fba53a7e

commit 3c20a679b6e31af07542e56a446e2433fba53a7e
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 10:49:51 2017 -0300

    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.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=18d59c1b36e97d438ed964eb483c119517c18fee

commit 18d59c1b36e97d438ed964eb483c119517c18fee
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 10:45:04 2017 -0300

    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.

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=ce7528f637f7b9cddb3c22081d7e09b2a26c89bf

commit ce7528f637f7b9cddb3c22081d7e09b2a26c89bf
Author: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Date:   Tue Jun 27 10:29:29 2017 -0300

    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.

-----------------------------------------------------------------------
Comment 10 Adhemerval Zanella 2018-07-24 19:03:09 UTC
Implemented upstream by:

9d0a979 Add manual documentation for threads.h
0a07288 nptl: Add test cases for ISO C11 threads
c6dd669 nptl: Add abilist symbols for C11 threads
78d4013 nptl: Add C11 threads tss_* functions
918311a nptl: Add C11 threads cnd_* functions
3c20a67 nptl: Add C11 threads call_once functions
18d59c1 nptl: Add C11 threads mtx_* functions
ce7528f nptl: Add C11 threads thrd_* functions

It will be included in 2.28.