Linux: Consolidate {RTLD_}SINGLE_THREAD_P definition
commit09c76a74099826f4c6e1c4c431d7659f78112862
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 3 Aug 2017 22:27:27 +0000 (3 19:27 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 11 Oct 2017 17:27:24 +0000 (11 14:27 -0300)
tree9c8ad771692fd75a61adefe04d3450edf8b26618
parent2faa42daa886cc176dfc10fef2308c9191a6ec7f
Linux: Consolidate {RTLD_}SINGLE_THREAD_P definition

Current GLIBC has two ways to implement the single thread optimization
on syscalls to avoid calling the cancellation path: either by using
global variables (__{libc,pthread}_multiple_thread) or by accessing
the TCB field (defined by TLS_MULTIPLE_THREADS_IN_TCB).  Both the
variables and the macros to acces its value are defined in the
architecture sysdep-cancel.h header.

This patch consolidates its definition on only one header,
sysdeps/unix/sysv/linux/sysdep-cancel.h, and adds a new define
(SINGLE_THREAD_BY_GLOBAL) which the architecture defines if it prefer
to use the global variables instead of the TCB field.  This is an
optimization, so if the architecture does not define it, the TCB
method will be used as default.

Checked on x86_64-linux-gnu and on a build with major touched
ABIs (aarch64-linux-gnu, alpha-linux-gnu, arm-linux-gnueabihf,
hppa-linux-gnu, i686-linux-gnu, m68k-linux-gnu, microblaze-linux-gnu,
mips-linux-gnu, mips64-linux-gnu, powerpc-linux-gnu,
powerpc64le-linux-gnu, s390-linux-gnu, s390x-linux-gnu, sh4-linux-gnu,
sparcv9-linux-gnu, sparc64-linux-gnu, tilegx-linux-gnu).

* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h: Remove file.
* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/tile/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
(SINGLE_THREAD_BY_GLOBAL): Define.
* sysdeps/unix/sysv/linux/aarch64/sysdep.h (SINGLE_THREAD_BY_GLOBAL):
Likewise.
* sysdeps/unix/sysv/linux/alpha/sysdep.h (SINGLE_THREAD_BY_GLOBAL):
Likewise.
* sysdeps/unix/sysv/linux/arm/sysdep.h (SINGLE_THREAD_BY_GLOBAL):
Likewise.
* sysdeps/unix/sysv/linux/hppa/sysdep.h (SINGLE_THREAD_BY_GLOBAL):
Likewise.
* sysdeps/unix/sysv/linux/microblaze/sysdep.h
(SINGLE_THREAD_BY_GLOBAL): Likewise.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h (SINGLE_THREAD_BY_GLOBAL):
Likewise.
26 files changed:
ChangeLog
sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/aarch64/sysdep.h
sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/alpha/sysdep.h
sysdeps/unix/sysv/linux/arm/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/arm/sysdep.h
sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/hppa/sysdep.h
sysdeps/unix/sysv/linux/i386/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/microblaze/sysdep.h
sysdeps/unix/sysv/linux/mips/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
sysdeps/unix/sysv/linux/sh/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/sysdep-cancel.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/tile/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h [deleted file]
sysdeps/unix/sysv/linux/x86_64/sysdep.h