summary refs log tree commit diff
path: root/conform
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2017-06-27 10:45:04 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2018-07-24 14:06:54 -0300
commit18d59c1b36e97d438ed964eb483c119517c18fee (patch)
tree331c95cbaed55bfef162c5696db9e3820a5f9c16 /conform
parentce7528f637f7b9cddb3c22081d7e09b2a26c89bf (diff)
downloadglibc-18d59c1b36e97d438ed964eb483c119517c18fee.tar.gz
glibc-18d59c1b36e97d438ed964eb483c119517c18fee.tar.xz
glibc-18d59c1b36e97d438ed964eb483c119517c18fee.zip
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.
Diffstat (limited to 'conform')
-rw-r--r--conform/data/threads.h-data12
1 files changed, 12 insertions, 0 deletions
diff --git a/conform/data/threads.h-data b/conform/data/threads.h-data
index bc2d8578de..bb5ca75524 100644
--- a/conform/data/threads.h-data
+++ b/conform/data/threads.h-data
@@ -6,8 +6,13 @@ constant thrd_error
 constant thrd_nomem
 constant thrd_timedout
 
+constant mtx_plain
+constant mtx_recursive
+constant mtx_timed
+
 type thrd_t
 type thrd_start_t
+type mtx_t
 
 function int thrd_create (thrd_t*, thrd_start_t, void*)
 function int thrd_equal (thrd_t, thrd_t)
@@ -18,6 +23,13 @@ function int thrd_detach (thrd_t)
 function int thrd_join (thrd_t, int*)
 function void thrd_yield (void)
 
+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*)
+
 #include "time.h-data"
 
 #endif