mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-08 14:20:07 +00:00
C11 threads: Move implementation to sysdeps/pthread
so it gets shared by nptl and htl. Also add htl versions of thrd_current and thrd_yield. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
6cefe985b8
commit
b05de10400
16
htl/Versions
16
htl/Versions
@ -20,6 +20,12 @@ libc {
|
||||
GLIBC_2.22 {
|
||||
__register_atfork;
|
||||
}
|
||||
|
||||
# C11 thread symbols.
|
||||
GLIBC_2.32 {
|
||||
thrd_current; thrd_equal; thrd_sleep; thrd_yield;
|
||||
}
|
||||
|
||||
GLIBC_PRIVATE {
|
||||
__libc_alloca_cutoff;
|
||||
__libc_pthread_init;
|
||||
@ -136,6 +142,16 @@ libpthread {
|
||||
pthread_hurd_cond_wait_np;
|
||||
pthread_hurd_cond_timedwait_np;
|
||||
}
|
||||
|
||||
# C11 thread symbols.
|
||||
GLIBC_2.32 {
|
||||
thrd_create; thrd_detach; thrd_exit; thrd_join;
|
||||
mtx_init; mtx_lock; mtx_timedlock; mtx_trylock; mtx_unlock; mtx_destroy;
|
||||
call_once;
|
||||
cnd_broadcast; cnd_destroy; cnd_init; cnd_signal; cnd_timedwait; cnd_wait;
|
||||
tss_create; tss_delete; tss_get; tss_set;
|
||||
}
|
||||
|
||||
GLIBC_PRIVATE {
|
||||
__shm_directory;
|
||||
__pthread_threads;
|
||||
|
@ -22,7 +22,7 @@ subdir := nptl
|
||||
|
||||
include ../Makeconfig
|
||||
|
||||
headers := pthread.h semaphore.h bits/semaphore.h threads.h \
|
||||
headers := pthread.h semaphore.h bits/semaphore.h \
|
||||
bits/struct_mutex.h bits/struct_rwlock.h
|
||||
|
||||
extra-libs := libpthread
|
||||
@ -30,8 +30,7 @@ extra-libs-others := $(extra-libs)
|
||||
|
||||
routines = alloca_cutoff forward libc-lowlevellock libc-cancellation \
|
||||
libc-cleanup libc_pthread_init libc_multiple_threads \
|
||||
register-atfork pthread_atfork pthread_self thrd_current \
|
||||
thrd_equal thrd_sleep thrd_yield pthread_equal \
|
||||
register-atfork pthread_atfork pthread_self pthread_equal \
|
||||
pthread_attr_destroy pthread_attr_init pthread_attr_getdetachstate \
|
||||
pthread_attr_setdetachstate pthread_attr_getinheritsched \
|
||||
pthread_attr_setinheritsched pthread_attr_getschedparam \
|
||||
@ -141,11 +140,7 @@ libpthread-routines = nptl-init nptlfreeres vars events version pt-interp \
|
||||
pthread_mutex_setprioceiling \
|
||||
pthread_setname pthread_getname \
|
||||
pthread_setattr_default_np pthread_getattr_default_np \
|
||||
thrd_create thrd_detach thrd_exit thrd_join \
|
||||
mtx_destroy mtx_init mtx_lock mtx_timedlock \
|
||||
mtx_trylock mtx_unlock call_once cnd_broadcast \
|
||||
cnd_destroy cnd_init cnd_signal cnd_timedwait cnd_wait \
|
||||
tss_create tss_delete tss_get tss_set pthread_mutex_conf \
|
||||
pthread_mutex_conf \
|
||||
libpthread-compat
|
||||
# pthread_setuid pthread_seteuid pthread_setreuid \
|
||||
# pthread_setresuid \
|
||||
@ -319,9 +314,6 @@ tests = tst-attr1 tst-attr2 tst-attr3 tst-default-attr \
|
||||
tst-robust-fork tst-create-detached tst-memstream \
|
||||
tst-thread-exit-clobber tst-minstack-cancel tst-minstack-exit \
|
||||
tst-minstack-throw \
|
||||
tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \
|
||||
tst-cnd-timedwait tst-thrd-detach tst-mtx-basic tst-thrd-sleep \
|
||||
tst-mtx-recursive tst-tss-basic tst-call-once tst-mtx-timedlock \
|
||||
tst-rwlock-pwn \
|
||||
tst-rwlock-tryrdlock-stall tst-rwlock-trywrlock-stall \
|
||||
tst-unwind-thread
|
||||
|
@ -91,6 +91,8 @@ hidden_proto (__pthread_key_create)
|
||||
hidden_proto (__pthread_getspecific)
|
||||
hidden_proto (__pthread_setspecific)
|
||||
hidden_proto (__pthread_mutex_init)
|
||||
hidden_proto (__pthread_mutex_destroy)
|
||||
hidden_proto (__pthread_mutex_timedlock)
|
||||
#endif
|
||||
|
||||
#define ASSERT_TYPE_SIZE(type, size) \
|
||||
|
31
sysdeps/htl/thrd_current.c
Normal file
31
sysdeps/htl/thrd_current.c
Normal file
@ -0,0 +1,31 @@
|
||||
/* C11 threads current thread implementation.
|
||||
Copyright (C) 2020 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "thrd_priv.h"
|
||||
|
||||
#pragma weak __pthread_self
|
||||
#pragma weak __pthread_threads
|
||||
|
||||
thrd_t
|
||||
thrd_current (void)
|
||||
{
|
||||
if (__pthread_threads)
|
||||
return (thrd_t) __pthread_self ();
|
||||
|
||||
return (thrd_t) 0;
|
||||
}
|
@ -1 +0,0 @@
|
||||
#error "HTL does not implement ISO C threads"
|
@ -1,63 +0,0 @@
|
||||
/* Copyright (C) 2018-2020 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _STDC_PREDEF_H
|
||||
#define _STDC_PREDEF_H 1
|
||||
|
||||
/* This header is separate from features.h so that the compiler can
|
||||
include it implicitly at the start of every compilation. It must
|
||||
not itself include <features.h> or any other header that includes
|
||||
<features.h> because the implicit include comes before any feature
|
||||
test macros that may be defined in a source file before it first
|
||||
explicitly includes a system header. GCC knows the name of this
|
||||
header in order to preinclude it. */
|
||||
|
||||
/* glibc's intent is to support the IEC 559 math functionality, real
|
||||
and complex. If the GCC (4.9 and later) predefined macros
|
||||
specifying compiler intent are available, use them to determine
|
||||
whether the overall intent is to support these features; otherwise,
|
||||
presume an older compiler has intent to support these features and
|
||||
define these macros by default. */
|
||||
|
||||
#ifdef __GCC_IEC_559
|
||||
# if __GCC_IEC_559 > 0
|
||||
# define __STDC_IEC_559__ 1
|
||||
# endif
|
||||
#else
|
||||
# define __STDC_IEC_559__ 1
|
||||
#endif
|
||||
|
||||
#ifdef __GCC_IEC_559_COMPLEX
|
||||
# if __GCC_IEC_559_COMPLEX > 0
|
||||
# define __STDC_IEC_559_COMPLEX__ 1
|
||||
# endif
|
||||
#else
|
||||
# define __STDC_IEC_559_COMPLEX__ 1
|
||||
#endif
|
||||
|
||||
/* wchar_t uses Unicode 10.0.0. Version 10.0 of the Unicode Standard is
|
||||
synchronized with ISO/IEC 10646:2017, fifth edition, plus
|
||||
the following additions from Amendment 1 to the fifth edition:
|
||||
- 56 emoji characters
|
||||
- 285 hentaigana
|
||||
- 3 additional Zanabazar Square characters */
|
||||
#define __STDC_ISO_10646__ 201706L
|
||||
|
||||
/* We do not support C11 <threads.h>. */
|
||||
#define __STDC_NO_THREADS__ 1
|
||||
|
||||
#endif
|
26
sysdeps/mach/htl/thrd_yield.c
Normal file
26
sysdeps/mach/htl/thrd_yield.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* sched_yield -- yield the processor. Mach version.
|
||||
Copyright (C) 2020 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<https://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <mach.h>
|
||||
#include "thrd_priv.h"
|
||||
|
||||
void
|
||||
thrd_yield (void)
|
||||
{
|
||||
(void) __swtch ();
|
||||
}
|
@ -35,3 +35,4 @@ __pthread_mutex_destroy (pthread_mutex_t *mtxp)
|
||||
}
|
||||
|
||||
strong_alias (__pthread_mutex_destroy, pthread_mutex_destroy)
|
||||
hidden_def (__pthread_mutex_destroy)
|
||||
|
@ -77,3 +77,4 @@ __pthread_mutex_timedlock (pthread_mutex_t *mtxp, const struct timespec *tsp)
|
||||
return ret;
|
||||
}
|
||||
strong_alias (__pthread_mutex_timedlock, pthread_mutex_timedlock)
|
||||
hidden_def (__pthread_mutex_timedlock)
|
||||
|
@ -2181,6 +2181,10 @@ GLIBC_2.3.4 setsourcefilter F
|
||||
GLIBC_2.3.4 xdr_quad_t F
|
||||
GLIBC_2.3.4 xdr_u_quad_t F
|
||||
GLIBC_2.30 twalk_r F
|
||||
GLIBC_2.32 thrd_current F
|
||||
GLIBC_2.32 thrd_equal F
|
||||
GLIBC_2.32 thrd_sleep F
|
||||
GLIBC_2.32 thrd_yield F
|
||||
GLIBC_2.4 __confstr_chk F
|
||||
GLIBC_2.4 __fgets_chk F
|
||||
GLIBC_2.4 __fgets_unlocked_chk F
|
||||
|
@ -142,3 +142,24 @@ GLIBC_2.2.6 __errno_location F
|
||||
GLIBC_2.2.6 __h_errno_location F
|
||||
GLIBC_2.21 pthread_hurd_cond_timedwait_np F
|
||||
GLIBC_2.21 pthread_hurd_cond_wait_np F
|
||||
GLIBC_2.32 call_once F
|
||||
GLIBC_2.32 cnd_broadcast F
|
||||
GLIBC_2.32 cnd_destroy F
|
||||
GLIBC_2.32 cnd_init F
|
||||
GLIBC_2.32 cnd_signal F
|
||||
GLIBC_2.32 cnd_timedwait F
|
||||
GLIBC_2.32 cnd_wait F
|
||||
GLIBC_2.32 mtx_destroy F
|
||||
GLIBC_2.32 mtx_init F
|
||||
GLIBC_2.32 mtx_lock F
|
||||
GLIBC_2.32 mtx_timedlock F
|
||||
GLIBC_2.32 mtx_trylock F
|
||||
GLIBC_2.32 mtx_unlock F
|
||||
GLIBC_2.32 thrd_create F
|
||||
GLIBC_2.32 thrd_detach F
|
||||
GLIBC_2.32 thrd_exit F
|
||||
GLIBC_2.32 thrd_join F
|
||||
GLIBC_2.32 tss_create F
|
||||
GLIBC_2.32 tss_delete F
|
||||
GLIBC_2.32 tss_get F
|
||||
GLIBC_2.32 tss_set F
|
||||
|
2
sysdeps/nptl/thrd_create.c
Normal file
2
sysdeps/nptl/thrd_create.c
Normal file
@ -0,0 +1,2 @@
|
||||
#define __pthread_create __pthread_create_2_1
|
||||
#include <sysdeps/pthread/thrd_create.c>
|
@ -25,3 +25,21 @@ $(objpfx)tst-timer: $(objpfx)librt.a $(static-thread-library)
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
ifneq (,$(filter $(subdir),htl nptl))
|
||||
headers += threads.h
|
||||
|
||||
routines += thrd_current thrd_equal thrd_sleep thrd_yield
|
||||
|
||||
libpthread-routines += thrd_create thrd_detach thrd_exit thrd_join \
|
||||
call_once \
|
||||
mtx_destroy mtx_init mtx_lock mtx_timedlock \
|
||||
mtx_trylock mtx_unlock \
|
||||
cnd_broadcast \
|
||||
cnd_destroy cnd_init cnd_signal cnd_timedwait cnd_wait \
|
||||
tss_create tss_delete tss_get tss_set
|
||||
|
||||
tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \
|
||||
tst-cnd-timedwait tst-thrd-detach tst-mtx-basic tst-thrd-sleep \
|
||||
tst-mtx-recursive tst-tss-basic tst-call-once tst-mtx-timedlock
|
||||
endif
|
||||
|
@ -24,7 +24,7 @@ thrd_create (thrd_t *thr, thrd_start_t func, void *arg)
|
||||
_Static_assert (sizeof (thrd_t) == sizeof (pthread_t),
|
||||
"sizeof (thrd_t) != sizeof (pthread_t)");
|
||||
|
||||
int err_code = __pthread_create_2_1 (thr, ATTR_C11_THREAD,
|
||||
(void* (*) (void*))func, arg);
|
||||
int err_code = __pthread_create (thr, ATTR_C11_THREAD,
|
||||
(void* (*) (void*))func, arg);
|
||||
return thrd_err_map (err_code);
|
||||
}
|
Loading…
Reference in New Issue
Block a user