glibc/nptl/Versions
Adhemerval Zanella 18d59c1b36 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.
2018-07-24 14:06:54 -03:00

287 lines
8.1 KiB
Plaintext

libc {
GLIBC_2.0 {
pthread_attr_destroy; pthread_attr_init;
pthread_attr_getdetachstate; pthread_attr_setdetachstate;
pthread_attr_getinheritsched; pthread_attr_setinheritsched;
pthread_attr_getschedparam; pthread_attr_setschedparam;
pthread_attr_getschedpolicy; pthread_attr_setschedpolicy;
pthread_attr_getscope; pthread_attr_setscope;
pthread_condattr_destroy; pthread_condattr_init;
pthread_cond_broadcast; pthread_cond_destroy;
pthread_cond_init; pthread_cond_signal; pthread_cond_wait;
pthread_cond_timedwait;
pthread_equal; pthread_exit;
pthread_getschedparam; pthread_setschedparam;
pthread_mutex_destroy; pthread_mutex_init;
pthread_mutex_lock; pthread_mutex_unlock;
pthread_self;
pthread_setcancelstate; pthread_setcanceltype;
}
GLIBC_2.1 {
pthread_attr_init;
}
GLIBC_2.3.2 {
__register_atfork;
# Changed pthread_cond_t.
pthread_cond_init; pthread_cond_destroy;
pthread_cond_wait; pthread_cond_signal;
pthread_cond_broadcast; pthread_cond_timedwait;
}
# C11 thread symbols.
GLIBC_2.28 {
thrd_current; thrd_equal; thrd_sleep; thrd_yield;
}
GLIBC_PRIVATE {
__libc_alloca_cutoff;
# Internal libc interface to libpthread
__libc_dl_error_tsd;
__libc_vfork;
__libc_pthread_init;
__libc_current_sigrtmin_private; __libc_current_sigrtmax_private;
__libc_allocate_rtsig_private;
}
}
libpthread {
GLIBC_2.0 {
pthread_create; pthread_join; pthread_self; pthread_equal;
pthread_exit; pthread_detach;
pthread_getschedparam; pthread_setschedparam;
pthread_attr_init; pthread_attr_destroy;
pthread_attr_getdetachstate; pthread_attr_setdetachstate;
pthread_attr_getschedparam; pthread_attr_setschedparam;
pthread_attr_getschedpolicy; pthread_attr_setschedpolicy;
pthread_attr_getinheritsched; pthread_attr_setinheritsched;
pthread_attr_getscope; pthread_attr_setscope;
pthread_mutex_init; pthread_mutex_destroy;
pthread_mutex_lock; pthread_mutex_trylock; pthread_mutex_unlock;
pthread_mutexattr_init; pthread_mutexattr_destroy;
pthread_cond_init; pthread_cond_destroy;
pthread_cond_wait; pthread_cond_timedwait;
pthread_cond_signal; pthread_cond_broadcast;
pthread_condattr_destroy; pthread_condattr_init;
pthread_cancel; pthread_testcancel;
pthread_setcancelstate; pthread_setcanceltype;
pthread_sigmask; pthread_kill;
pthread_key_create; pthread_key_delete;
pthread_getspecific; pthread_setspecific;
pthread_once;
pthread_atfork;
flockfile; funlockfile; ftrylockfile;
# Non-standard POSIX1.x functions.
pthread_mutexattr_getkind_np; pthread_mutexattr_setkind_np;
# Protected names for functions used in other shared objects.
__pthread_mutex_init; __pthread_mutex_destroy;
__pthread_mutex_lock; __pthread_mutex_trylock; __pthread_mutex_unlock;
__pthread_mutexattr_init; __pthread_mutexattr_destroy;
__pthread_mutexattr_settype;
__pthread_key_create; __pthread_getspecific; __pthread_setspecific;
__pthread_once; __pthread_atfork;
_IO_flockfile; _IO_ftrylockfile; _IO_funlockfile;
# Semaphores.
sem_destroy; sem_getvalue; sem_init; sem_post; sem_trywait; sem_wait;
# Special fork handling.
fork; __fork; vfork;
# Cancellation points.
close; __close; fcntl; __fcntl; read; __read; write; __write; accept;
connect; __connect; recv; recvfrom; recvmsg; send; __send; sendmsg; sendto;
fsync; lseek; __lseek; msync; nanosleep; open; __open; pause; tcdrain;
system; wait; __wait; waitpid;
# Hidden entry point (through macros).
_pthread_cleanup_push; _pthread_cleanup_pop;
_pthread_cleanup_push_defer; _pthread_cleanup_pop_restore;
pthread_kill_other_threads_np;
# The error functions.
__errno_location; __h_errno_location;
# Functions which previously have been overwritten.
sigwait; sigaction; __sigaction; _exit; _Exit; longjmp; siglongjmp;
raise;
}
GLIBC_2.1 {
pthread_create;
pthread_attr_init;
pthread_attr_getguardsize; pthread_attr_setguardsize;
pthread_attr_getstackaddr; pthread_attr_setstackaddr;
pthread_attr_getstacksize; pthread_attr_setstacksize;
pthread_mutexattr_gettype; pthread_mutexattr_settype;
pthread_rwlock_init; pthread_rwlock_destroy;
pthread_rwlock_rdlock; pthread_rwlock_wrlock; pthread_rwlock_unlock;
pthread_rwlock_tryrdlock; pthread_rwlock_trywrlock;
pthread_rwlockattr_init; pthread_rwlockattr_destroy;
pthread_rwlockattr_getpshared; pthread_rwlockattr_setpshared;
pthread_rwlockattr_getkind_np; pthread_rwlockattr_setkind_np;
pthread_getconcurrency; pthread_setconcurrency;
# Semaphores.
sem_destroy; sem_getvalue; sem_init; sem_post; sem_trywait; sem_wait;
__libc_current_sigrtmin; __libc_current_sigrtmax;
__libc_allocate_rtsig;
}
GLIBC_2.1.1 {
sem_close; sem_open; sem_unlink;
}
GLIBC_2.1.2 {
__vfork;
}
GLIBC_2.2 {
pthread_mutexattr_getpshared; pthread_mutexattr_setpshared;
pthread_condattr_getpshared; pthread_condattr_setpshared;
# New functions from IEEE Std. 1003.1-2001.
pthread_mutex_timedlock;
pthread_rwlock_timedrdlock; pthread_rwlock_timedwrlock;
pthread_attr_getstack; pthread_attr_setstack;
pthread_spin_destroy; pthread_spin_init; pthread_spin_lock;
pthread_spin_trylock; pthread_spin_unlock;
pthread_barrier_init; pthread_barrier_destroy; pthread_barrier_wait;
pthread_barrierattr_destroy; pthread_barrierattr_init;
pthread_barrierattr_setpshared;
sem_timedwait;
pthread_yield;
pthread_getcpuclockid;
# Cancellation points.
lseek64; open64; __open64; pread; pread64; __pread64; pwrite; pwrite64;
__pwrite64;
# Names used internally.
__pthread_rwlock_init; __pthread_rwlock_destroy;
__pthread_rwlock_rdlock; __pthread_rwlock_tryrdlock;
__pthread_rwlock_wrlock; __pthread_rwlock_trywrlock;
__pthread_rwlock_unlock;
__res_state;
}
GLIBC_2.2.3 {
# Extensions.
pthread_getattr_np;
}
GLIBC_2.2.6 {
# Cancellation wrapper
__nanosleep;
}
GLIBC_2.3.2 {
# Changed pthread_cond_t.
pthread_cond_init; pthread_cond_destroy;
pthread_cond_wait; pthread_cond_timedwait;
pthread_cond_signal; pthread_cond_broadcast;
}
GLIBC_2.3.3 {
# 1003.1-2001 function accidentally left out in 2.2.
pthread_barrierattr_getpshared;
# Unix CS option.
pthread_condattr_getclock; pthread_condattr_setclock;
# Proposed API extensions.
pthread_tryjoin_np; pthread_timedjoin_np;
# New cancellation cleanup handling.
__pthread_register_cancel; __pthread_unregister_cancel;
__pthread_register_cancel_defer; __pthread_unregister_cancel_restore;
__pthread_unwind_next;
__pthread_cleanup_routine;
# affinity interfaces without size parameter
pthread_getaffinity_np; pthread_setaffinity_np;
pthread_attr_getaffinity_np; pthread_attr_setaffinity_np;
}
GLIBC_2.3.4 {
# New affinity interfaces.
pthread_getaffinity_np; pthread_setaffinity_np;
pthread_attr_getaffinity_np; pthread_attr_setaffinity_np;
pthread_setschedprio;
}
GLIBC_2.4 {
pthread_mutexattr_getrobust_np; pthread_mutexattr_setrobust_np;
pthread_mutex_consistent_np;
pthread_mutexattr_getprotocol; pthread_mutexattr_setprotocol;
pthread_mutexattr_getprioceiling; pthread_mutexattr_setprioceiling;
pthread_mutex_getprioceiling; pthread_mutex_setprioceiling;
};
GLIBC_2.11 {
pthread_sigqueue;
};
GLIBC_2.12 {
pthread_mutex_consistent; pthread_mutexattr_getrobust;
pthread_mutexattr_setrobust;
pthread_setname_np; pthread_getname_np;
};
GLIBC_2.18 {
pthread_getattr_default_np;
pthread_setattr_default_np;
}
GLIBC_2.20 {
}
GLIBC_2.22 {
}
# C11 thread symbols.
GLIBC_2.28 {
thrd_create; thrd_detach; thrd_exit; thrd_join;
mtx_init; mtx_lock; mtx_timedlock; mtx_trylock; mtx_unlock; mtx_destroy;
}
GLIBC_PRIVATE {
__pthread_initialize_minimal;
__pthread_clock_gettime; __pthread_clock_settime;
__pthread_unwind; __pthread_get_minstack;
__pthread_barrier_init; __pthread_barrier_wait;
__shm_directory;
__libpthread_freeres;
}
}