This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug nptl/14092] Support C11 threads


https://sourceware.org/bugzilla/show_bug.cgi?id=14092

--- Comment #8 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
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.

-----------------------------------------------------------------------

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]