diff mbox series

[14/14] Remove cancellation support for syscall generation

Message ID 1501765874-6201-15-git-send-email-adhemerval.zanella@linaro.org
State New
Headers show
Series None | expand

Commit Message

Adhemerval Zanella Aug. 3, 2017, 1:11 p.m. UTC
This patch removes the cancellation mark from the auto-generation syscall
script.  Now all the cancellable syscalls are done throught C code using
the SYSCALL_CANCEL macro.  It simplifies the assembly required to each
architecture port, since the SYSCALL_CANCEL uses the already defined
INLINE_SYSCALL macros, and allows a more straigh fix on cancellation
machanism (since no more specific assembly fixes will be required).

Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.

	* sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for
	syscall definitions.
	* sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove
	definition.
	* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.
	[IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.
	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.
	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.
	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.
	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.
	(CENABLE): Likewise.
	(CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove
	defintion.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):
	Remove definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	(SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.
	* sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.
	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.
	* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.
	* sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
	* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove
	definition.
	(PSEUDO_END): Likewise.
	[IS_IN (libpthread)] (CENABLE): Likewise.
	[IS_IN (libpthread)] (CDISABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (libc)] (CENABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[IS_IN (librt)] (CDISABLE): Likewise.
	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
---
 ChangeLog                                          | 173 ++++++++++++++
 sysdeps/unix/make-syscalls.sh                      |   4 -
 sysdeps/unix/syscall-template.S                    |   7 +-
 sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h    |  87 +------
 sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h      | 131 +----------
 sysdeps/unix/sysv/linux/arm/sysdep-cancel.h        | 197 +---------------
 sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h       | 225 +------------------
 sysdeps/unix/sysv/linux/i386/sysdep-cancel.h       | 119 +---------
 sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h       | 194 +---------------
 sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h       | 108 +--------
 sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 116 +---------
 .../unix/sysv/linux/mips/mips64/sysdep-cancel.h    | 249 ---------------------
 sysdeps/unix/sysv/linux/mips/sysdep-cancel.h       | 159 +------------
 sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h      | 110 +--------
 .../sysv/linux/powerpc/powerpc32/sysdep-cancel.h   | 118 ----------
 .../sysv/linux/powerpc/powerpc64/sysdep-cancel.h   | 147 ------------
 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h    |  38 ++++
 .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h   | 105 +--------
 .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h   | 109 +--------
 sysdeps/unix/sysv/linux/sh/sysdep-cancel.h         | 136 +----------
 .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h  | 111 ---------
 .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h  | 109 ---------
 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h      |  38 ++++
 sysdeps/unix/sysv/linux/tile/sysdep-cancel.h       | 123 +---------
 sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h     |  62 +----
 25 files changed, 305 insertions(+), 2670 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
 create mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
 delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
 create mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h

-- 
2.7.4

Comments

Adhemerval Zanella Aug. 23, 2017, 5:23 p.m. UTC | #1
Now with both 78ca091cdd2 and b70b6026a05 pushed upstream no linux port
actually uess the sysdep-cancel.h assembly macro for syscall generation, 
so it should be safe to remove all their definition and just define 
cancellable syscalls using SYSCALL_CANCEL C macro.

I have tested this patch with build-many-glibc.py for the all affected 
ports and it shows not build failures.  I take this is an extensive patch,
but it a cleanup one that aims to code simplicity.

I plan to commit this shortly if no one opposes it.

On 03/08/2017 10:11, Adhemerval Zanella wrote:
> This patch removes the cancellation mark from the auto-generation syscall

> script.  Now all the cancellable syscalls are done throught C code using

> the SYSCALL_CANCEL macro.  It simplifies the assembly required to each

> architecture port, since the SYSCALL_CANCEL uses the already defined

> INLINE_SYSCALL macros, and allows a more straigh fix on cancellation

> machanism (since no more specific assembly fixes will be required).

> 

> Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,

> aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.

> 

> 	* sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for

> 	syscall definitions.

> 	* sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove

> 	definition.

> 	* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.

> 	[IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.

> 	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.

> 	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.

> 	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.

> 	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.

> 	(CENABLE): Likewise.

> 	(CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove

> 	defintion.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):

> 	Remove definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	(SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.

> 	* sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.

> 	* sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.

> 	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.

> 	* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.

> 	* sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.

> 	* sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> 	* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove

> 	definition.

> 	(PSEUDO_END): Likewise.

> 	[IS_IN (libpthread)] (CENABLE): Likewise.

> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (libc)] (CENABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[IS_IN (librt)] (CDISABLE): Likewise.

> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> ---

>  ChangeLog                                          | 173 ++++++++++++++

>  sysdeps/unix/make-syscalls.sh                      |   4 -

>  sysdeps/unix/syscall-template.S                    |   7 +-

>  sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h    |  87 +------

>  sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h      | 131 +----------

>  sysdeps/unix/sysv/linux/arm/sysdep-cancel.h        | 197 +---------------

>  sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h       | 225 +------------------

>  sysdeps/unix/sysv/linux/i386/sysdep-cancel.h       | 119 +---------

>  sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h       | 194 +---------------

>  sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h       | 108 +--------

>  sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 116 +---------

>  .../unix/sysv/linux/mips/mips64/sysdep-cancel.h    | 249 ---------------------

>  sysdeps/unix/sysv/linux/mips/sysdep-cancel.h       | 159 +------------

>  sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h      | 110 +--------

>  .../sysv/linux/powerpc/powerpc32/sysdep-cancel.h   | 118 ----------

>  .../sysv/linux/powerpc/powerpc64/sysdep-cancel.h   | 147 ------------

>  sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h    |  38 ++++

>  .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h   | 105 +--------

>  .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h   | 109 +--------

>  sysdeps/unix/sysv/linux/sh/sysdep-cancel.h         | 136 +----------

>  .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h  | 111 ---------

>  .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h  | 109 ---------

>  sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h      |  38 ++++

>  sysdeps/unix/sysv/linux/tile/sysdep-cancel.h       | 123 +---------

>  sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h     |  62 +----

>  25 files changed, 305 insertions(+), 2670 deletions(-)

>  delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h

>  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h

>  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h

>  create mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h

>  delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h

>  delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h

>  create mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h

> 

> diff --git a/ChangeLog b/ChangeLog

> index d0a78a1..a84bd55 100644

> --- a/ChangeLog

> +++ b/ChangeLog

> @@ -1,5 +1,178 @@

>  2017-08-02  Adhemerval Zanella  <adhemerval.zanella@linaro.org>

>  

> +	* sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for

> +	syscall definitions.

> +	* sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove

> +	definition.

> +	* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.

> +	[IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.

> +	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.

> +	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.

> +	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.

> +	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.

> +	(CENABLE): Likewise.

> +	(CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove

> +	defintion.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):

> +	Remove definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	(SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.

> +	* sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.

> +	* sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.

> +	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.

> +	* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.

> +	* sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.

> +	* sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +	* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove

> +	definition.

> +	(PSEUDO_END): Likewise.

> +	[IS_IN (libpthread)] (CENABLE): Likewise.

> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (libc)] (CENABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[IS_IN (librt)] (CDISABLE): Likewise.

> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

> +

>  	* sysdeps/unix/sysv/linux/x86_64/syscalls.list (pread64): Remove.

>  	(preadv64): Likewise.

>  	(pwrite64(: Likewise.

> diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh

> index 123553c..042cfac 100644

> --- a/sysdeps/unix/make-syscalls.sh

> +++ b/sysdeps/unix/make-syscalls.sh

> @@ -12,7 +12,6 @@

>  #

>  # Syscall Signature Prefixes:

>  #

> -# C: cancellable (i.e., this syscall is a cancellation point)

>  # E: errno and return value are not set by the call

>  # V: errno is not set, but errno or zero (success) is returned from the call

>  #

> @@ -171,11 +170,9 @@ while read file srcfile caller syscall args strong weak; do

>    ;;

>    esac

>  

> -  cancellable=0

>    noerrno=0

>    errval=0

>    case $args in

> -  C*) cancellable=1; args=`echo $args | sed 's/C:\?//'`;;

>    E*) noerrno=1; args=`echo $args | sed 's/E:\?//'`;;

>    V*) errval=1; args=`echo $args | sed 's/V:\?//'`;;

>    esac

> @@ -258,7 +255,6 @@ while read file srcfile caller syscall args strong weak; do

>  	(echo '#define SYSCALL_NAME $syscall'; \\

>  	 echo '#define SYSCALL_NARGS $nargs'; \\

>  	 echo '#define SYSCALL_SYMBOL $strong'; \\

> -	 echo '#define SYSCALL_CANCELLABLE $cancellable'; \\

>  	 echo '#define SYSCALL_NOERRNO $noerrno'; \\

>  	 echo '#define SYSCALL_ERRVAL $errval'; \\

>  	 echo '#include <syscall-template.S>'; \\"

> diff --git a/sysdeps/unix/syscall-template.S b/sysdeps/unix/syscall-template.S

> index 4993ff5..d4584a9 100644

> --- a/sysdeps/unix/syscall-template.S

> +++ b/sysdeps/unix/syscall-template.S

> @@ -27,7 +27,6 @@

>  	SYSCALL_NAME		syscall name

>  	SYSCALL_NARGS		number of arguments this call takes

>  	SYSCALL_SYMBOL		primary symbol name

> -	SYSCALL_CANCELLABLE	1 if the call is a cancelation point

>  	SYSCALL_NOERRNO		1 to define a no-errno version (see below)

>  	SYSCALL_ERRVAL		1 to define an error-value version (see below)

>  

> @@ -41,11 +40,7 @@

>     instructions long and the untrained eye might not distinguish them from

>     some compiled code that inexplicably lacks source line information.  */

>  

> -#if SYSCALL_CANCELLABLE

> -# include <sysdep-cancel.h>

> -#else

> -# include <sysdep.h>

> -#endif

> +#include <sysdep.h>

>  

>  /* This indirection is needed so that SYMBOL gets macro-expanded.  */

>  #define syscall_hidden_def(SYMBOL)		hidden_def (SYMBOL)

> diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h

> index 4be2259..d39b6a2 100644

> --- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h

> @@ -24,102 +24,23 @@

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				\

> -	.section ".text";						\

> -ENTRY (__##syscall_name##_nocancel);					\

> -.Lpseudo_nocancel:							\

> -	DO_CALL (syscall_name, args);					\

> -.Lpseudo_finish:							\

> -	cmn	x0, 4095;						\

> -	b.cs	.Lsyscall_error;					\

> -	.subsection 2;							\

> -	.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \

> -ENTRY (name);								\

> -	SINGLE_THREAD_P(16);						\

> -	cbz	w16, .Lpseudo_nocancel;					\

> -	/* Setup common stack frame no matter the number of args.	\

> -	   Also save the first arg, since it's basically free.  */	\

> -	stp	x30, x0, [sp, -64]!;					\

> -	cfi_adjust_cfa_offset (64);					\

> -	cfi_rel_offset (x30, 0);					\

> -	DOCARGS_##args;		/* save syscall args around CENABLE.  */ \

> -	CENABLE;							\

> -	mov	x16, x0;	/* save mask around syscall.  */	\

> -	UNDOCARGS_##args;	/* restore syscall args.  */		\

> -	DO_CALL (syscall_name, args);					\

> -	str	x0, [sp, 8];	/* save result around CDISABLE.  */	\

> -	mov	x0, x16;	/* restore mask for CDISABLE.  */	\

> -	CDISABLE;							\

> -	/* Break down the stack frame, restoring result at once.  */	\

> -	ldp	x30, x0, [sp], 64;					\

> -	cfi_adjust_cfa_offset (-64);					\

> -	cfi_restore (x30);						\

> -	b	.Lpseudo_finish;					\

> -	cfi_endproc;							\

> -	.size	name, .-name;						\

> -	.previous

> -

> -# undef PSEUDO_END

> -# define PSEUDO_END(name)						\

> -	SYSCALL_ERROR_HANDLER;						\

> -	cfi_endproc

> -

> -# define DOCARGS_0

> -# define DOCARGS_1

> -# define DOCARGS_2	str x1, [sp, 16]

> -# define DOCARGS_3	stp x1, x2, [sp, 16]

> -# define DOCARGS_4	DOCARGS_3; str x3, [sp, 32]

> -# define DOCARGS_5	DOCARGS_3; stp x3, x4, [sp, 32]

> -# define DOCARGS_6	DOCARGS_5; str x5, [sp, 48]

> -

> -# define UNDOCARGS_0

> -# define UNDOCARGS_1	ldr x0, [sp, 8]

> -# define UNDOCARGS_2	ldp x0, x1, [sp, 8]

> -# define UNDOCARGS_3	UNDOCARGS_1; ldp x1, x2, [sp, 16]

> -# define UNDOCARGS_4	UNDOCARGS_2; ldp x2, x3, [sp, 24]

> -# define UNDOCARGS_5	UNDOCARGS_3; ldp x3, x4, [sp, 32]

> -# define UNDOCARGS_6	UNDOCARGS_4; ldp x4, x5, [sp, 40]

> -

>  # if IS_IN (libpthread)

> -#  define CENABLE	bl __pthread_enable_asynccancel

> -#  define CDISABLE	bl __pthread_disable_asynccancel

>  #  define __local_multiple_threads __pthread_multiple_threads

>  # elif IS_IN (libc)

> -#  define CENABLE	bl __libc_enable_asynccancel

> -#  define CDISABLE	bl __libc_disable_asynccancel

>  #  define __local_multiple_threads __libc_multiple_threads

> -# elif IS_IN (librt)

> -#  define CENABLE	bl __librt_enable_asynccancel

> -#  define CDISABLE	bl __librt_disable_asynccancel

> -# else

> -#  error Unsupported library

>  # endif

>  

>  # if IS_IN (libpthread) || IS_IN (libc)

> -#  ifndef __ASSEMBLER__

>  extern int __local_multiple_threads attribute_hidden;

> -#   define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

> -#  else

> -#   define SINGLE_THREAD_P(R)						\

> -	adrp	x##R, __local_multiple_threads;				\

> -	ldr	w##R, [x##R, :lo12:__local_multiple_threads]

> -#  endif

> +#  define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

>  # else

>  /*  There is no __local_multiple_threads for librt, so use the TCB.  */

> -#  ifndef __ASSEMBLER__

> -#   define SINGLE_THREAD_P						\

> +#  define SINGLE_THREAD_P						\

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

>  				   header.multiple_threads) == 0, 1)

> -#  else

> -#   define SINGLE_THREAD_P(R)						\

> -	mrs     x##R, tpidr_el0;					\

> -	sub	x##R, x##R, PTHREAD_SIZEOF;				\

> -	ldr	w##R, [x##R, PTHREAD_MULTIPLE_THREADS_OFFSET]

> -#  endif

>  # endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  /* For rtld, et cetera.  */

>  # define SINGLE_THREAD_P 1

> @@ -127,8 +48,6 @@ extern int __local_multiple_threads attribute_hidden;

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

>  # define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h

> index 66d6962..366cf31 100644

> --- a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h

> @@ -17,147 +17,24 @@

>  

>  #include <sysdep.h>

>  #include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> +#include <nptl/pthreadP.h>

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -/* ??? Assumes that nothing comes between PSEUDO and PSEUDO_END

> -   besides "ret".  */

> -

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)			\

> -	.globl	__##syscall_name##_nocancel;			\

> -	.type	__##syscall_name##_nocancel, @function;		\

> -	.usepv	__##syscall_name##_nocancel, std;		\

> -	.align 4;						\

> -	cfi_startproc;						\

> -__LABEL(__##syscall_name##_nocancel)				\

> -	ldgp	gp, 0(pv);					\

> -	PSEUDO_PROF;						\

> -__LABEL($pseudo_nocancel)					\

> -	PSEUDO_PREPARE_ARGS;					\

> -	lda	v0, SYS_ify(syscall_name);			\

> -	call_pal PAL_callsys;					\

> -	bne	a3, SYSCALL_ERROR_LABEL;			\

> -__LABEL($pseudo_ret)						\

> -	.subsection 2;						\

> -	.size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \

> -	.globl	name;						\

> -	.type	name, @function;				\

> -	.usepv	name, std;					\

> -	.align 4;						\

> -	cfi_startproc;						\

> -__LABEL(name)							\

> -	ldgp	gp, 0(pv);					\

> -	PSEUDO_PROF;						\

> -	SINGLE_THREAD_P(t0);					\

> -	beq	t0, $pseudo_nocancel;				\

> -	subq	sp, 64, sp;					\

> -	cfi_def_cfa_offset(64);					\

> -	stq	ra, 0(sp);					\

> -	cfi_offset(ra, -64);					\

> -	SAVE_ARGS_##args;					\

> -	CENABLE;						\

> -	LOAD_ARGS_##args;					\

> -	/* Save the CENABLE return value in RA.  That register	\

> -	   is preserved across syscall and the real return 	\

> -	   address is saved on the stack.  */			\

> -	mov	v0, ra;						\

> -	lda	v0, SYS_ify(syscall_name);			\

> -	call_pal PAL_callsys;					\

> -	stq	v0, 8(sp);					\

> -	mov	ra, a0;						\

> -	bne	a3, $multi_error;				\

> -	CDISABLE;						\

> -	ldq	ra, 0(sp);					\

> -	ldq	v0, 8(sp);					\

> -	addq	sp, 64, sp;					\

> -	cfi_remember_state;					\

> -	cfi_restore(ra);					\

> -	cfi_def_cfa_offset(0);					\

> -	ret;							\

> -	cfi_restore_state;					\

> -__LABEL($multi_error)						\

> -	CDISABLE;						\

> -	ldq	ra, 0(sp);					\

> -	ldq	v0, 8(sp);					\

> -	addq	sp, 64, sp;					\

> -	cfi_restore(ra);					\

> -	cfi_def_cfa_offset(0);					\

> -	SYSCALL_ERROR_FALLTHRU;					\

> -	SYSCALL_ERROR_HANDLER;					\

> -	cfi_endproc;						\

> -	.previous

> -

> -# undef PSEUDO_END

> -# define PSEUDO_END(sym)					\

> -	cfi_endproc;						\

> -	.subsection 2;						\

> -	.size sym, .-sym

> -

> -# define SAVE_ARGS_0	/* Nothing.  */

> -# define SAVE_ARGS_1	SAVE_ARGS_0; stq a0, 8(sp)

> -# define SAVE_ARGS_2	SAVE_ARGS_1; stq a1, 16(sp)

> -# define SAVE_ARGS_3	SAVE_ARGS_2; stq a2, 24(sp)

> -# define SAVE_ARGS_4	SAVE_ARGS_3; stq a3, 32(sp)

> -# define SAVE_ARGS_5	SAVE_ARGS_4; stq a4, 40(sp)

> -# define SAVE_ARGS_6	SAVE_ARGS_5; stq a5, 48(sp)

> -

> -# define LOAD_ARGS_0	/* Nothing.  */

> -# define LOAD_ARGS_1	LOAD_ARGS_0; ldq a0, 8(sp)

> -# define LOAD_ARGS_2	LOAD_ARGS_1; ldq a1, 16(sp)

> -# define LOAD_ARGS_3	LOAD_ARGS_2; ldq a2, 24(sp)

> -# define LOAD_ARGS_4	LOAD_ARGS_3; ldq a3, 32(sp)

> -# define LOAD_ARGS_5	LOAD_ARGS_4; ldq a4, 40(sp)

> -# define LOAD_ARGS_6	LOAD_ARGS_5; ldq a5, 48(sp)

> -

>  # if IS_IN (libpthread)

> -#  define __local_enable_asynccancel	__pthread_enable_asynccancel

> -#  define __local_disable_asynccancel	__pthread_disable_asynccancel

>  #  define __local_multiple_threads	__pthread_multiple_threads

>  # elif IS_IN (libc)

> -#  define __local_enable_asynccancel	__libc_enable_asynccancel

> -#  define __local_disable_asynccancel	__libc_disable_asynccancel

>  #  define __local_multiple_threads	__libc_multiple_threads

> -# elif IS_IN (librt)

> -#  define __local_enable_asynccancel	__librt_enable_asynccancel

> -#  define __local_disable_asynccancel	__librt_disable_asynccancel

> -# else

> -#  error Unsupported library

> -# endif

> -

> -# ifdef PIC

> -#  define CENABLE	bsr ra, __local_enable_asynccancel !samegp

> -#  define CDISABLE	bsr ra, __local_disable_asynccancel !samegp

> -# else

> -#  define CENABLE	jsr ra, __local_enable_asynccancel; ldgp ra, 0(gp)

> -#  define CDISABLE	jsr ra, __local_disable_asynccancel; ldgp ra, 0(gp)

>  # endif

>  

>  # if IS_IN (libpthread) || IS_IN (libc)

> -#  ifndef __ASSEMBLER__

>  extern int __local_multiple_threads attribute_hidden;

> -#   define SINGLE_THREAD_P \

> +#  define SINGLE_THREAD_P \

>  	__builtin_expect (__local_multiple_threads == 0, 1)

> -#  elif defined(PIC)

> -#   define SINGLE_THREAD_P(reg)  ldl reg, __local_multiple_threads(gp) !gprel

> -#  else

> -#   define SINGLE_THREAD_P(reg)					\

> -	ldah	reg, __local_multiple_threads(gp) !gprelhigh;	\

> -	ldl	reg, __local_multiple_threads(reg) !gprellow

> -#  endif

>  # else

> -#  ifndef __ASSEMBLER__

> -#   define SINGLE_THREAD_P \

> +#  define SINGLE_THREAD_P \

>  	__builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#  else

> -#   define SINGLE_THREAD_P(reg)					\

> -	call_pal PAL_rduniq;					\

> -	ldl reg, MULTIPLE_THREADS_OFFSET($0)

> -#  endif

>  # endif

>  

>  #else

> @@ -167,8 +44,6 @@ extern int __local_multiple_threads attribute_hidden;

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

>  # define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h

> index de12acf..738e749 100644

> --- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h

> @@ -23,210 +23,23 @@

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -/* NOTE: We do mark syscalls with unwind annotations, for the benefit of

> -   cancellation; but they're really only accurate at the point of the

> -   syscall.  The ARM unwind directives are not rich enough without adding

> -   a custom personality function.  */

> -

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				\

> -	.text;								\

> -  ENTRY (__##syscall_name##_nocancel);					\

> -	CFI_SECTIONS;							\

> -	DO_CALL (syscall_name, args);					\

> -	cmn	r0, $4096;						\

> -	PSEUDO_RET;							\

> -  END (__##syscall_name##_nocancel);					\

> -  ENTRY (name);								\

> -	SINGLE_THREAD_P;						\

> -	DOARGS_##args;							\

> -	bne .Lpseudo_cancel;						\

> -	cfi_remember_state;						\

> -	ldr	r7, =SYS_ify (syscall_name);				\

> -	swi	0x0;							\

> -	UNDOARGS_##args;						\

> -	cmn	r0, $4096;						\

> -	PSEUDO_RET;							\

> -	cfi_restore_state;						\

> -  .Lpseudo_cancel:							\

> -	.fnstart;	/* matched by the .fnend in UNDOARGS below.  */	\

> -	DOCARGS_##args;	/* save syscall args etc. around CENABLE.  */	\

> -	CENABLE;							\

> -	mov ip, r0;		/* put mask in safe place.  */		\

> -	UNDOCARGS_##args;	/* restore syscall args.  */		\

> -	ldr	r7, =SYS_ify (syscall_name);				\

> -	swi	0x0;		/* do the call.  */			\

> -	mov	r7, r0;		/* save syscall return value.  */	\

> -	mov	r0, ip;		/* get mask back.  */			\

> -	CDISABLE;							\

> -	mov	r0, r7;		/* retrieve return value.  */		\

> -	RESTORE_LR_##args;						\

> -	UNDOARGS_##args;						\

> -	cmn	r0, $4096

> -

> -/* DOARGS pushes eight bytes on the stack for five arguments, twelve bytes for

> -   six arguments, and four bytes for fewer.  In order to preserve doubleword

> -   alignment, sometimes we must save an extra register.  */

> -

> -# define RESTART_UNWIND				\

> -	.fnend;					\

> -	.fnstart;				\

> -	.save	{r7};				\

> -	.save	{lr}

> -

> -# define DOCARGS_0				\

> -	.save {r7};				\

> -	push	{lr};				\

> -	cfi_adjust_cfa_offset (4);		\

> -	cfi_rel_offset (lr, 0);			\

> -	.save	{lr}

> -# define UNDOCARGS_0

> -# define RESTORE_LR_0				\

> -	pop	{lr};				\

> -	cfi_adjust_cfa_offset (-4);		\

> -	cfi_restore (lr)

> -

> -# define DOCARGS_1				\

> -	.save	{r7};				\

> -	push	{r0, r1, lr};			\

> -	cfi_adjust_cfa_offset (12);		\

> -	cfi_rel_offset (lr, 8);			\

> -	.save	{lr};				\

> -	.pad	#8

> -# define UNDOCARGS_1				\

> -	ldr r0, [sp], #8;			\

> -	cfi_adjust_cfa_offset (-8);		\

> -	RESTART_UNWIND

> -# define RESTORE_LR_1				\

> -	RESTORE_LR_0

> -

> -# define DOCARGS_2				\

> -	.save	{r7};				\

> -	push	{r0, r1, lr};			\

> -	cfi_adjust_cfa_offset (12);		\

> -	cfi_rel_offset (lr, 8);			\

> -	.save	{lr};				\

> -	.pad	#8

> -# define UNDOCARGS_2				\

> -	pop	{r0, r1};			\

> -	cfi_adjust_cfa_offset (-8);		\

> -	RESTART_UNWIND

> -# define RESTORE_LR_2				\

> -	RESTORE_LR_0

> -

> -# define DOCARGS_3				\

> -	.save	{r7};				\

> -	push	{r0, r1, r2, r3, lr};		\

> -	cfi_adjust_cfa_offset (20);		\

> -	cfi_rel_offset (lr, 16);		\

> -	.save	{lr};				\

> -	.pad	#16

> -# define UNDOCARGS_3				\

> -	pop	{r0, r1, r2, r3};		\

> -	cfi_adjust_cfa_offset (-16);		\

> -	RESTART_UNWIND

> -# define RESTORE_LR_3				\

> -	RESTORE_LR_0

> -

> -# define DOCARGS_4				\

> -	.save	{r7};				\

> -	push	{r0, r1, r2, r3, lr};		\

> -	cfi_adjust_cfa_offset (20);		\

> -	cfi_rel_offset (lr, 16);		\

> -	.save	{lr};				\

> -	.pad	#16

> -# define UNDOCARGS_4				\

> -	pop	{r0, r1, r2, r3};		\

> -	cfi_adjust_cfa_offset (-16);		\

> -	RESTART_UNWIND

> -# define RESTORE_LR_4				\

> -	RESTORE_LR_0

> -

> -/* r4 is only stmfd'ed for correct stack alignment.  */

> -# define DOCARGS_5				\

> -	.save	{r4, r7};			\

> -	push	{r0, r1, r2, r3, r4, lr};	\

> -	cfi_adjust_cfa_offset (24);		\

> -	cfi_rel_offset (lr, 20);		\

> -	.save	{lr};				\

> -	.pad	#20

> -# define UNDOCARGS_5				\

> -	pop	{r0, r1, r2, r3};		\

> -	cfi_adjust_cfa_offset (-16);		\

> -	.fnend;					\

> -	.fnstart;				\

> -	.save	{r4, r7};			\

> -	.save	{lr};				\

> -	.pad	#4

> -# define RESTORE_LR_5				\

> -	pop	{r4, lr};			\

> -	cfi_adjust_cfa_offset (-8);		\

> -	/* r4 will be marked as restored later.  */ \

> -	cfi_restore (lr)

> -

> -# define DOCARGS_6				\

> -	.save	{r4, r5, r7};			\

> -	push	{r0, r1, r2, r3, lr};		\

> -	cfi_adjust_cfa_offset (20);		\

> -	cfi_rel_offset (lr, 16);		\

> -	.save	{lr};				\

> -	.pad	#16

> -# define UNDOCARGS_6				\

> -	pop	{r0, r1, r2, r3};		\

> -	cfi_adjust_cfa_offset (-16);		\

> -	.fnend;					\

> -	.fnstart;				\

> -	.save	{r4, r5, r7};			\

> -	.save	{lr};

> -# define RESTORE_LR_6				\

> -	RESTORE_LR_0

> -

>  # if IS_IN (libpthread)

> -#  define CENABLE	bl PLTJMP(__pthread_enable_asynccancel)

> -#  define CDISABLE	bl PLTJMP(__pthread_disable_asynccancel)

>  #  define __local_multiple_threads __pthread_multiple_threads

>  # elif IS_IN (libc)

> -#  define CENABLE	bl PLTJMP(__libc_enable_asynccancel)

> -#  define CDISABLE	bl PLTJMP(__libc_disable_asynccancel)

>  #  define __local_multiple_threads __libc_multiple_threads

> -# elif IS_IN (librt)

> -#  define CENABLE	bl PLTJMP(__librt_enable_asynccancel)

> -#  define CDISABLE	bl PLTJMP(__librt_disable_asynccancel)

> -# else

> -#  error Unsupported library

>  # endif

>  

>  # if IS_IN (libpthread) || IS_IN (libc)

> -#  ifndef __ASSEMBLER__

>  extern int __local_multiple_threads attribute_hidden;

> -#   define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

> -#  else

> -#   define SINGLE_THREAD_P						\

> -	LDST_PCREL(ldr, ip, ip, __local_multiple_threads);		\

> -	teq ip, #0

> -#  endif

> +#  define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

>  # else

>  /*  There is no __local_multiple_threads for librt, so use the TCB.  */

> -#  ifndef __ASSEMBLER__

> -#   define SINGLE_THREAD_P						\

> +#  define SINGLE_THREAD_P						\

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

>  				   header.multiple_threads) == 0, 1)

> -#  else

> -#   define SINGLE_THREAD_P						\

> -	push	{r0, lr};						\

> -	cfi_adjust_cfa_offset (8);					\

> -	cfi_rel_offset (lr, 4);						\

> -	GET_TLS (lr);							\

> -	NEGOFF_ADJ_BASE (r0, MULTIPLE_THREADS_OFFSET);			\

> -	ldr	ip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET);		\

> -	pop	{r0, lr};						\

> -	cfi_adjust_cfa_offset (-8);					\

> -	cfi_restore (lr);						\

> -	teq	ip, #0

> -#  endif

>  # endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  /* For rtld, et cetera.  */

>  # define SINGLE_THREAD_P 1

> @@ -234,8 +47,6 @@ extern int __local_multiple_threads attribute_hidden;

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> +#define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h

> index 8b7f2b2..a6189a7 100644

> --- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h

> @@ -23,215 +23,6 @@

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -# ifndef NO_ERROR

> -#  define NO_ERROR -0x1000

> -# endif

> -

> -/* The syscall cancellation mechanism requires userspace

> -   assistance, the following code does roughly this:

> -

> -	do arguments (read arg5 and arg6 to registers)

> -	setup frame

> -

> -	check if there are threads, yes jump to pseudo_cancel

> -

> -	unthreaded:

> -		syscall

> -		check syscall return (jump to pre_end)

> -		set errno

> -		set return to -1

> -		(jump to pre_end)

> -

> -	pseudo_cancel:

> -		cenable

> -		syscall

> -		cdisable

> -		check syscall return (jump to pre_end)

> -		set errno

> -		set return to -1

> -

> -	pre_end

> -		restore stack

> -

> -	It is expected that 'ret' and 'END' macros will

> -	append an 'undo arguments' and 'return' to the

> -	this PSEUDO macro. */

> -

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				\

> -	ENTRY (__##syscall_name##_nocancel)				\

> -	DOARGS_##args					ASM_LINE_SEP	\

> -	stwm TREG, 64(%sp)				ASM_LINE_SEP	\

> -	.cfi_def_cfa_offset -64				ASM_LINE_SEP	\

> -	.cfi_offset TREG, 0				ASM_LINE_SEP	\

> -	stw %sp, -4(%sp)				ASM_LINE_SEP	\

> -	stw %r19, -32(%sp)				ASM_LINE_SEP	\

> -	.cfi_offset 19, 32				ASM_LINE_SEP	\

> -	/* Save r19 */					ASM_LINE_SEP	\

> -	SAVE_PIC(TREG)					ASM_LINE_SEP	\

> -	/* Do syscall, delay loads # */			ASM_LINE_SEP	\

> -	ble  0x100(%sr2,%r0)				ASM_LINE_SEP	\

> -	ldi SYS_ify (syscall_name), %r20 /* delay */	ASM_LINE_SEP	\

> -	ldi NO_ERROR,%r1				ASM_LINE_SEP	\

> -	cmpb,>>=,n %r1,%ret0,L(pre_nc_end)		ASM_LINE_SEP	\

> -	/* Restore r19 from TREG */			ASM_LINE_SEP	\

> -	LOAD_PIC(TREG) /* delay */			ASM_LINE_SEP	\

> -	SYSCALL_ERROR_HANDLER				ASM_LINE_SEP	\

> -	/* Use TREG for temp storage */			ASM_LINE_SEP	\

> -	copy %ret0, TREG /* delay */			ASM_LINE_SEP	\

> -	/* OPTIMIZE: Don't reload r19 */		ASM_LINE_SEP	\

> -	/* do a -1*syscall_ret0 */			ASM_LINE_SEP	\

> -	sub %r0, TREG, TREG				ASM_LINE_SEP	\

> -	/* Store into errno location */			ASM_LINE_SEP	\

> -	stw TREG, 0(%sr0,%ret0)				ASM_LINE_SEP	\

> -	/* return -1 as error */			ASM_LINE_SEP	\

> -	ldi -1, %ret0					ASM_LINE_SEP	\

> -L(pre_nc_end):						ASM_LINE_SEP	\

> -	/* No need to LOAD_PIC */			ASM_LINE_SEP	\

> -	/* Undo frame */				ASM_LINE_SEP	\

> -	ldwm -64(%sp),TREG				ASM_LINE_SEP	\

> -	/* Restore rp before exit */			ASM_LINE_SEP	\

> -	ldw -20(%sp), %rp				ASM_LINE_SEP	\

> -	ret						ASM_LINE_SEP	\

> -	END(__##syscall_name##_nocancel)		ASM_LINE_SEP	\

> -	/**********************************************/ASM_LINE_SEP	\

> -	ENTRY (name)							\

> -	DOARGS_##args					ASM_LINE_SEP	\

> -	stwm TREG, 64(%sp)				ASM_LINE_SEP	\

> -	.cfi_def_cfa_offset -64				ASM_LINE_SEP	\

> -	.cfi_offset TREG, 0				ASM_LINE_SEP	\

> -	stw %sp, -4(%sp)				ASM_LINE_SEP	\

> -	stw %r19, -32(%sp)				ASM_LINE_SEP	\

> -	.cfi_offset 19, 32				ASM_LINE_SEP	\

> -	/* Done setting up frame, continue... */	ASM_LINE_SEP	\

> -	SINGLE_THREAD_P					ASM_LINE_SEP	\

> -	cmpib,<>,n 0,%ret0,L(pseudo_cancel)		ASM_LINE_SEP	\

> -L(unthreaded):						ASM_LINE_SEP	\

> -	/* Save r19 */					ASM_LINE_SEP	\

> -	SAVE_PIC(TREG)					ASM_LINE_SEP	\

> -	/* Do syscall, delay loads # */			ASM_LINE_SEP	\

> -	ble  0x100(%sr2,%r0)				ASM_LINE_SEP	\

> -	ldi SYS_ify (syscall_name), %r20 /* delay */	ASM_LINE_SEP	\

> -	ldi NO_ERROR,%r1				ASM_LINE_SEP	\

> -	cmpb,>>=,n %r1,%ret0,L(pre_end)			ASM_LINE_SEP	\

> -	/* Restore r19 from TREG */			ASM_LINE_SEP	\

> -	LOAD_PIC(TREG) /* delay */			ASM_LINE_SEP	\

> -	SYSCALL_ERROR_HANDLER				ASM_LINE_SEP	\

> -	/* Use TREG for temp storage */			ASM_LINE_SEP	\

> -	copy %ret0, TREG /* delay */			ASM_LINE_SEP	\

> -	/* OPTIMIZE: Don't reload r19 */		ASM_LINE_SEP	\

> -	/* do a -1*syscall_ret0 */			ASM_LINE_SEP	\

> -	sub %r0, TREG, TREG				ASM_LINE_SEP	\

> -	/* Store into errno location */			ASM_LINE_SEP	\

> -	stw TREG, 0(%sr0,%ret0)				ASM_LINE_SEP	\

> -	b L(pre_end)					ASM_LINE_SEP	\

> -	/* return -1 as error */			ASM_LINE_SEP	\

> -	ldi -1, %ret0 /* delay */			ASM_LINE_SEP	\

> -L(pseudo_cancel):					ASM_LINE_SEP	\

> -	PUSHARGS_##args /* Save args */			ASM_LINE_SEP	\

> -	/* Save r19 into TREG */			ASM_LINE_SEP	\

> -	CENABLE /* FUNC CALL */				ASM_LINE_SEP	\

> -	SAVE_PIC(TREG) /* delay */			ASM_LINE_SEP	\

> -	/* restore syscall args */			ASM_LINE_SEP	\

> -	POPARGS_##args					ASM_LINE_SEP	\

> -	/* save mask from cenable (use stub rp slot) */	ASM_LINE_SEP	\

> -	stw %ret0, -24(%sp)				ASM_LINE_SEP	\

> -	/* ... SYSCALL ... */				ASM_LINE_SEP	\

> -	ble 0x100(%sr2,%r0)				ASM_LINE_SEP    \

> -	ldi SYS_ify (syscall_name), %r20 /* delay */	ASM_LINE_SEP	\

> -	/* ............... */				ASM_LINE_SEP	\

> -	LOAD_PIC(TREG)					ASM_LINE_SEP	\

> -	/* pass mask as arg0 to cdisable */		ASM_LINE_SEP	\

> -	ldw -24(%sp), %r26				ASM_LINE_SEP	\

> -	CDISABLE					ASM_LINE_SEP	\

> -	stw %ret0, -24(%sp) /* delay */			ASM_LINE_SEP	\

> -	/* Restore syscall return */			ASM_LINE_SEP	\

> -	ldw -24(%sp), %ret0				ASM_LINE_SEP	\

> -	/* compare error */				ASM_LINE_SEP	\

> -	ldi NO_ERROR,%r1				ASM_LINE_SEP	\

> -	/* branch if no error */			ASM_LINE_SEP	\

> -	cmpb,>>=,n %r1,%ret0,L(pre_end)			ASM_LINE_SEP	\

> -	LOAD_PIC(TREG)	/* cond. nullify */		ASM_LINE_SEP	\

> -	copy %ret0, TREG /* save syscall return */	ASM_LINE_SEP	\

> -	SYSCALL_ERROR_HANDLER				ASM_LINE_SEP	\

> -	/* make syscall res value positive */		ASM_LINE_SEP	\

> -	sub %r0, TREG, TREG	/* delay */		ASM_LINE_SEP	\

> -	/* No need to LOAD_PIC */			ASM_LINE_SEP	\

> -	/* store into errno location */			ASM_LINE_SEP	\

> -	stw TREG, 0(%sr0,%ret0)				ASM_LINE_SEP	\

> -	/* return -1 */					ASM_LINE_SEP	\

> -	ldi -1, %ret0					ASM_LINE_SEP	\

> -L(pre_end):						ASM_LINE_SEP	\

> -	/* No need to LOAD_PIC */			ASM_LINE_SEP	\

> -	/* Undo frame */				ASM_LINE_SEP	\

> -	ldwm -64(%sp),TREG				ASM_LINE_SEP	\

> -	/* Restore rp before exit */			ASM_LINE_SEP	\

> -	ldw -20(%sp), %rp				ASM_LINE_SEP

> -

> -/* Save arguments into our frame */

> -# define PUSHARGS_0	/* nothing to do */

> -# define PUSHARGS_1	PUSHARGS_0 stw %r26, -36(%sr0,%sp)	ASM_LINE_SEP	\

> -			.cfi_offset 26, 28			ASM_LINE_SEP

> -# define PUSHARGS_2	PUSHARGS_1 stw %r25, -40(%sr0,%sp)	ASM_LINE_SEP	\

> -			.cfi_offset 25, 24			ASM_LINE_SEP

> -# define PUSHARGS_3	PUSHARGS_2 stw %r24, -44(%sr0,%sp)	ASM_LINE_SEP	\

> -			.cfi_offset 24, 20			ASM_LINE_SEP

> -# define PUSHARGS_4	PUSHARGS_3 stw %r23, -48(%sr0,%sp)	ASM_LINE_SEP	\

> -			.cfi_offset 23, 16			ASM_LINE_SEP

> -# define PUSHARGS_5	PUSHARGS_4 stw %r22, -52(%sr0,%sp)	ASM_LINE_SEP	\

> -			.cfi_offset 22, 12			ASM_LINE_SEP

> -# define PUSHARGS_6	PUSHARGS_5 stw %r21, -56(%sr0,%sp)	ASM_LINE_SEP	\

> -			.cfi_offset 21, 8			ASM_LINE_SEP

> -

> -/* Bring them back from the stack */

> -# define POPARGS_0	/* nothing to do */

> -# define POPARGS_1	POPARGS_0 ldw -36(%sr0,%sp), %r26	ASM_LINE_SEP

> -# define POPARGS_2	POPARGS_1 ldw -40(%sr0,%sp), %r25	ASM_LINE_SEP

> -# define POPARGS_3	POPARGS_2 ldw -44(%sr0,%sp), %r24	ASM_LINE_SEP

> -# define POPARGS_4	POPARGS_3 ldw -48(%sr0,%sp), %r23	ASM_LINE_SEP

> -# define POPARGS_5	POPARGS_4 ldw -52(%sr0,%sp), %r22	ASM_LINE_SEP

> -# define POPARGS_6	POPARGS_5 ldw -56(%sr0,%sp), %r21	ASM_LINE_SEP

> -

> -# if IS_IN (libpthread)

> -#  ifdef PIC

> -#   define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \

> -			bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP

> -#   define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \

> -			bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP

> -#  else

> -#   define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \

> -			bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP

> -#   define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \

> -			bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP

> -#  endif

> -# elif IS_IN (libc)

> -#  ifdef PIC

> -#   define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \

> -			bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP

> -#   define CDISABLE	.import __libc_disable_asynccancel,code ASM_LINE_SEP \

> -			bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP

> -#  else

> -#   define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \

> -			bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP

> -#   define CDISABLE	.import __libc_disable_asynccancel,code ASM_LINE_SEP \

> -			bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP

> -#  endif

> -# elif IS_IN (librt)

> -#  ifdef PIC

> -#   define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \

> -			bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP

> -#   define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \

> -			bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP

> -#  else

> -#   define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \

> -			bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP

> -#   define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \

> -			bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP

> -#  endif

> -# else

> -#  error Unsupported library

> -# endif

> -

>  # if IS_IN (libpthread)

>  #  define __local_multiple_threads __pthread_multiple_threads

>  # elif IS_IN (libc)

> @@ -242,17 +33,11 @@ L(pre_end):						ASM_LINE_SEP	\

>  #  error Unsupported library

>  # endif

>  

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P \

> +# define SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -# else

> -/* Read the value of header.multiple_threads from the thread pointer */

> -#  define SINGLE_THREAD_P							\

> -	mfctl %cr27, %ret0					ASM_LINE_SEP	\

> -	ldw MULTIPLE_THREADS_THREAD_OFFSET(%sr0,%ret0),%ret0	ASM_LINE_SEP

> -# endif

> -#elif !defined __ASSEMBLER__

> +

> +#else

>  

>  /* This code should never be used but we define it anyhow.  */

>  # define SINGLE_THREAD_P (1)

> @@ -261,8 +46,6 @@ L(pre_end):						ASM_LINE_SEP	\

>  #endif

>  /* IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) */

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> +#define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h

> index ebf6019..34e2b6f 100644

> --- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h

> @@ -24,130 +24,17 @@

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				      \

> -  .text;								      \

> -  ENTRY (name)								      \

> -    cmpl $0, %gs:MULTIPLE_THREADS_OFFSET;				      \

> -    jne L(pseudo_cancel);						      \

> -  .type __##syscall_name##_nocancel,@function;				      \

> -  .globl __##syscall_name##_nocancel;					      \

> -  __##syscall_name##_nocancel:						      \

> -    DO_CALL (syscall_name, args);					      \

> -    cmpl $-4095, %eax;							      \

> -    jae SYSCALL_ERROR_LABEL;						      \

> -    ret;								      \

> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

> -  L(pseudo_cancel):							      \

> -    CENABLE								      \

> -    SAVE_OLDTYPE_##args							      \

> -    PUSHCARGS_##args							      \

> -    DOCARGS_##args							      \

> -    movl $SYS_ify (syscall_name), %eax;					      \

> -    ENTER_KERNEL;							      \

> -    POPCARGS_##args;							      \

> -    POPSTATE_##args							      \

> -    cmpl $-4095, %eax;							      \

> -    jae SYSCALL_ERROR_LABEL

> -

> -# define SAVE_OLDTYPE_0	movl %eax, %ecx;

> -# define SAVE_OLDTYPE_1	SAVE_OLDTYPE_0

> -# define SAVE_OLDTYPE_2	pushl %eax; cfi_adjust_cfa_offset (4);

> -# define SAVE_OLDTYPE_3	SAVE_OLDTYPE_2

> -# define SAVE_OLDTYPE_4	SAVE_OLDTYPE_2

> -# define SAVE_OLDTYPE_5	SAVE_OLDTYPE_2

> -# define SAVE_OLDTYPE_6	SAVE_OLDTYPE_2

> -

> -# define PUSHCARGS_0	/* No arguments to push.  */

> -# define DOCARGS_0	/* No arguments to frob.  */

> -# define POPCARGS_0	/* No arguments to pop.  */

> -# define _PUSHCARGS_0	/* No arguments to push.  */

> -# define _POPCARGS_0	/* No arguments to pop.  */

> -

> -# define PUSHCARGS_1	movl %ebx, %edx; cfi_register (ebx, edx); PUSHCARGS_0

> -# define DOCARGS_1	_DOARGS_1 (4)

> -# define POPCARGS_1	POPCARGS_0; movl %edx, %ebx; cfi_restore (ebx);

> -# define _PUSHCARGS_1	pushl %ebx; cfi_adjust_cfa_offset (4); \

> -			cfi_rel_offset (ebx, 0); _PUSHCARGS_0

> -# define _POPCARGS_1	_POPCARGS_0; popl %ebx; \

> -			cfi_adjust_cfa_offset (-4); cfi_restore (ebx);

> -

> -# define PUSHCARGS_2	PUSHCARGS_1

> -# define DOCARGS_2	_DOARGS_2 (12)

> -# define POPCARGS_2	POPCARGS_1

> -# define _PUSHCARGS_2	_PUSHCARGS_1

> -# define _POPCARGS_2	_POPCARGS_1

> -

> -# define PUSHCARGS_3	_PUSHCARGS_2

> -# define DOCARGS_3	_DOARGS_3 (20)

> -# define POPCARGS_3	_POPCARGS_3

> -# define _PUSHCARGS_3	_PUSHCARGS_2

> -# define _POPCARGS_3	_POPCARGS_2

> -

> -# define PUSHCARGS_4	_PUSHCARGS_4

> -# define DOCARGS_4	_DOARGS_4 (28)

> -# define POPCARGS_4	_POPCARGS_4

> -# define _PUSHCARGS_4	pushl %esi; cfi_adjust_cfa_offset (4); \

> -			cfi_rel_offset (esi, 0); _PUSHCARGS_3

> -# define _POPCARGS_4	_POPCARGS_3; popl %esi; \

> -			cfi_adjust_cfa_offset (-4); cfi_restore (esi);

> -

> -# define PUSHCARGS_5	_PUSHCARGS_5

> -# define DOCARGS_5	_DOARGS_5 (36)

> -# define POPCARGS_5	_POPCARGS_5

> -# define _PUSHCARGS_5	pushl %edi; cfi_adjust_cfa_offset (4); \

> -			cfi_rel_offset (edi, 0); _PUSHCARGS_4

> -# define _POPCARGS_5	_POPCARGS_4; popl %edi; \

> -			cfi_adjust_cfa_offset (-4); cfi_restore (edi);

> -

> -# define PUSHCARGS_6	_PUSHCARGS_6

> -# define DOCARGS_6	_DOARGS_6 (44)

> -# define POPCARGS_6	_POPCARGS_6

> -# define _PUSHCARGS_6	pushl %ebp; cfi_adjust_cfa_offset (4); \

> -			cfi_rel_offset (ebp, 0); _PUSHCARGS_5

> -# define _POPCARGS_6	_POPCARGS_5; popl %ebp; \

> -			cfi_adjust_cfa_offset (-4); cfi_restore (ebp);

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	call __pthread_enable_asynccancel;

> -#  define CDISABLE	call __pthread_disable_asynccancel

> -# elif IS_IN (libc)

> -#  define CENABLE	call __libc_enable_asynccancel;

> -#  define CDISABLE	call __libc_disable_asynccancel

> -# elif IS_IN (librt)

> -#  define CENABLE	call __librt_enable_asynccancel;

> -#  define CDISABLE	call __librt_disable_asynccancel

> -# else

> -#  error Unsupported library

> -# endif

> -# define POPSTATE_0 \

> - pushl %eax; cfi_adjust_cfa_offset (4); movl %ecx, %eax; \

> - CDISABLE; popl %eax; cfi_adjust_cfa_offset (-4);

> -# define POPSTATE_1	POPSTATE_0

> -# define POPSTATE_2	xchgl (%esp), %eax; CDISABLE; popl %eax; \

> -			cfi_adjust_cfa_offset (-4);

> -# define POPSTATE_3	POPSTATE_2

> -# define POPSTATE_4	POPSTATE_3

> -# define POPSTATE_5	POPSTATE_4

> -# define POPSTATE_6	POPSTATE_5

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P \

> +# define SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P cmpl $0, %gs:MULTIPLE_THREADS_OFFSET

> -# endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  # define SINGLE_THREAD_P (1)

>  # define NO_CANCELLATION 1

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> +#define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h

> index 7c7f619..96d04de 100644

> --- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h

> @@ -23,201 +23,13 @@

>  #endif

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

> -

> -# undef PSEUDO

> -

> -# if IS_IN (libc)

> -#  define SYSDEP_CANCEL_ERRNO __libc_errno

> -# else

> -#  define SYSDEP_CANCEL_ERRNO errno

> -# endif

> -# define SYSDEP_CANCEL_ERROR(args)					      \

> -.section .gnu.linkonce.t.__syscall_error_##args, "ax";			      \

> -     .align 32;								      \

> -     .proc __syscall_error_##args;					      \

> -     .global __syscall_error_##args;					      \

> -     .hidden __syscall_error_##args;					      \

> -     .size __syscall_error_##args, 64;					      \

> -__syscall_error_##args:							      \

> -     .prologue;								      \

> -     .regstk args, 5, args, 0;						      \

> -     .save ar.pfs, loc0;						      \

> -     .save rp, loc1;							      \

> -     .body;								      \

> -     addl loc4 = @ltoff(@tprel(SYSDEP_CANCEL_ERRNO)), gp;;		      \

> -     ld8 loc4 = [loc4];							      \

> -     mov rp = loc1;;							      \

> -     mov r8 = -1;							      \

> -     add loc4 = loc4, r13;;						      \

> -     st4 [loc4] = loc3;							      \

> -     mov ar.pfs = loc0

> -

> -# ifndef USE_DL_SYSINFO

> -

> -#  define PSEUDO(name, syscall_name, args)				      \

> -.text;									      \

> -ENTRY (name)								      \

> -     adds r14 = MULTIPLE_THREADS_OFFSET, r13;;				      \

> -     ld4 r14 = [r14];							      \

> -     mov r15 = SYS_ify(syscall_name);;					      \

> -     cmp4.ne p6, p7 = 0, r14;						      \

> -(p6) br.cond.spnt .Lpseudo_cancel;;					      \

> -     break __BREAK_SYSCALL;;						      \

> -     cmp.eq p6,p0=-1,r10;						      \

> -(p6) br.cond.spnt.few __syscall_error;					      \

> -     ret;;								      \

> -     .endp name;							      \

> -     .proc __GC_##name;							      \

> -     .globl __GC_##name;						      \

> -     .hidden __GC_##name;						      \

> -__GC_##name:								      \

> -.Lpseudo_cancel:							      \

> -     .prologue;								      \

> -     .regstk args, 5, args, 0;						      \

> -     .save ar.pfs, loc0;						      \

> -     alloc loc0 = ar.pfs, args, 5, args, 0;				      \

> -     .save rp, loc1;							      \

> -     mov loc1 = rp;;							      \

> -     .body;								      \

> -     CENABLE;;								      \

> -     mov loc2 = r8;							      \

> -     COPY_ARGS_##args							      \

> -     mov r15 = SYS_ify(syscall_name);					      \

> -     break __BREAK_SYSCALL;;						      \

> -     mov loc3 = r8;							      \

> -     mov loc4 = r10;							      \

> -     mov out0 = loc2;							      \

> -     CDISABLE;;								      \

> -     cmp.eq p6,p0=-1,loc4;						      \

> -(p6) br.cond.spnt.few __syscall_error_##args;				      \

> -     mov r8 = loc3;							      \

> -     mov rp = loc1;							      \

> -     mov ar.pfs = loc0;							      \

> -.Lpseudo_end:								      \

> -     ret;								      \

> -     .endp __GC_##name;							      \

> -     SYSDEP_CANCEL_ERROR(args)

> -

> -# else /* USE_DL_SYSINFO */

> -

> -#  define PSEUDO(name, syscall_name, args)				      \

> -.text;									      \

> -ENTRY (name)								      \

> -     .prologue;								      \

> -     adds r2 = SYSINFO_OFFSET, r13;					      \

> -     adds r14 = MULTIPLE_THREADS_OFFSET, r13;				      \

> -     .save ar.pfs, r11;							      \

> -     mov r11 = ar.pfs;;							      \

> -     .body;								      \

> -     ld4 r14 = [r14];							      \

> -     ld8 r2 = [r2];							      \

> -     mov r15 = SYS_ify(syscall_name);;					      \

> -     cmp4.ne p6, p7 = 0, r14;						      \

> -     mov b7 = r2;							      \

> -(p6) br.cond.spnt .Lpseudo_cancel;					      \

> -     br.call.sptk.many b6 = b7;;					      \

> -     mov ar.pfs = r11;							      \

> -     cmp.eq p6,p0 = -1, r10;						      \

> -(p6) br.cond.spnt.few __syscall_error;					      \

> -     ret;;								      \

> -     .endp name;							      \

> -									      \

> -      .proc __##syscall_name##_nocancel;				      \

> -     .globl __##syscall_name##_nocancel;				      \

> -__##syscall_name##_nocancel:						      \

> -     .prologue;								      \

> -     adds r2 = SYSINFO_OFFSET, r13;					      \

> -     .save ar.pfs, r11;							      \

> -     mov r11 = ar.pfs;;							      \

> -     .body;								      \

> -     ld8 r2 = [r2];							      \

> -     mov r15 = SYS_ify(syscall_name);;					      \

> -     mov b7 = r2;							      \

> -     br.call.sptk.many b6 = b7;;					      \

> -     mov ar.pfs = r11;							      \

> -     cmp.eq p6,p0 = -1, r10;						      \

> -(p6) br.cond.spnt.few __syscall_error;					      \

> -     ret;;								      \

> -     .endp __##syscall_name##_nocancel;					      \

> -									      \

> -     .proc __GC_##name;							      \

> -     .globl __GC_##name;						      \

> -     .hidden __GC_##name;						      \

> -__GC_##name:								      \

> -.Lpseudo_cancel:							      \

> -     .prologue;								      \

> -     .regstk args, 5, args, 0;						      \

> -     .save ar.pfs, loc0;						      \

> -     alloc loc0 = ar.pfs, args, 5, args, 0;				      \

> -     adds loc4 = SYSINFO_OFFSET, r13;					      \

> -     .save rp, loc1;							      \

> -     mov loc1 = rp;;							      \

> -     .body;								      \

> -     ld8 loc4 = [loc4];							      \

> -     CENABLE;;								      \

> -     mov loc2 = r8;							      \

> -     mov b7 = loc4;							      \

> -     COPY_ARGS_##args							      \

> -     mov r15 = SYS_ify(syscall_name);					      \

> -     br.call.sptk.many b6 = b7;;					      \

> -     mov loc3 = r8;							      \

> -     mov loc4 = r10;							      \

> -     mov out0 = loc2;							      \

> -     CDISABLE;;								      \

> -     cmp.eq p6,p0=-1,loc4;						      \

> -(p6) br.cond.spnt.few __syscall_error_##args;				      \

> -     mov r8 = loc3;							      \

> -     mov rp = loc1;							      \

> -     mov ar.pfs = loc0;							      \

> -.Lpseudo_end:								      \

> -     ret;								      \

> -     .endp __GC_##name;							      \

> -     SYSDEP_CANCEL_ERROR(args)

> -

> -# endif /* USE_DL_SYSINFO */

> -

> -# undef PSEUDO_END

> -# define PSEUDO_END(name) .endp

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	br.call.sptk.many b0 = __pthread_enable_asynccancel

> -#  define CDISABLE	br.call.sptk.many b0 = __pthread_disable_asynccancel

> -# elif IS_IN (libc)

> -#  define CENABLE	br.call.sptk.many b0 = __libc_enable_asynccancel

> -#  define CDISABLE	br.call.sptk.many b0 = __libc_disable_asynccancel

> -# elif IS_IN (librt)

> -#  define CENABLE	br.call.sptk.many b0 = __librt_enable_asynccancel

> -#  define CDISABLE	br.call.sptk.many b0 = __librt_disable_asynccancel

> -# else

> -#  error Unsupported library

> -# endif

> -

> -# define COPY_ARGS_0	/* Nothing */

> -# define COPY_ARGS_1	COPY_ARGS_0 mov out0 = in0;

> -# define COPY_ARGS_2	COPY_ARGS_1 mov out1 = in1;

> -# define COPY_ARGS_3	COPY_ARGS_2 mov out2 = in2;

> -# define COPY_ARGS_4	COPY_ARGS_3 mov out3 = in3;

> -# define COPY_ARGS_5	COPY_ARGS_4 mov out4 = in4;

> -# define COPY_ARGS_6	COPY_ARGS_5 mov out5 = in5;

> -# define COPY_ARGS_7	COPY_ARGS_6 mov out6 = in6;

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P \

> +# define SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P \

> -  adds r14 = MULTIPLE_THREADS_OFFSET, r13 ;; ld4 r14 = [r14] ;; cmp4.ne p6, p7 = 0, r14

> -# endif

> -

> -#elif !defined __ASSEMBLER__

> -

> +#else

>  # define SINGLE_THREAD_P (1)

>  # define NO_CANCELLATION 1

> -

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> +#define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h

> index 9bc9e13..1603c5f 100644

> --- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h

> @@ -18,121 +18,21 @@

>  

>  #include <sysdep.h>

>  #include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> +#include <nptl/pthreadP.h>

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				      \

> -  .text;								      \

> -  ENTRY (name)								      \

> -    SINGLE_THREAD_P;							      \

> -    jne .Lpseudo_cancel;						      \

> -  .type __##syscall_name##_nocancel,@function;			              \

> -  .globl __##syscall_name##_nocancel;				 	      \

> -  __##syscall_name##_nocancel:					              \

> -    DO_CALL (syscall_name, args);					      \

> -    cmp.l &-4095, %d0;							      \

> -    jcc SYSCALL_ERROR_LABEL;						      \

> -    rts;								      \

> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

> -  .Lpseudo_cancel:							      \

> -    CENABLE;								      \

> -    DOCARGS_##args							      \

> -    move.l %d0, -(%sp); /* Save result of CENABLE.  */  		      \

> -    cfi_adjust_cfa_offset (4); \

> -    move.l &SYS_ify (syscall_name), %d0;				      \

> -    trap &0;								      \

> -    move.l %d0, %d2;							      \

> -    CDISABLE;								      \

> -    addq.l &4, %sp; /* Remove result of CENABLE from the stack.  */           \

> -    cfi_adjust_cfa_offset (-4); \

> -    move.l %d2, %d0;							      \

> -    UNDOCARGS_##args							      \

> -    cmp.l &-4095, %d0;							      \

> -    jcc SYSCALL_ERROR_LABEL

> -

> -/* Note: we use D2 to save syscall's return value as D0 will be clobbered in

> -   CDISABLE.  */

> -# define DOCARGS_0	move.l %d2, -(%sp);		\

> -  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d2, 0);

> -# define UNDOCARGS_0	move.l (%sp)+, %d2;	\

> -  cfi_adjust_cfa_offset (-4); cfi_restore (%d2);

> -

> -# define DOCARGS_1	_DOCARGS_1 (4); DOCARGS_0

> -# define _DOCARGS_1(n)	move.l n(%sp), %d1;

> -# define UNDOCARGS_1	UNDOCARGS_0

> -

> -# define DOCARGS_2	_DOCARGS_2 (8)

> -# define _DOCARGS_2(n)	DOCARGS_0 move.l n+4(%sp), %d2; _DOCARGS_1 (n)

> -# define UNDOCARGS_2	UNDOCARGS_0

> -

> -# define DOCARGS_3	_DOCARGS_3 (12)

> -# define _DOCARGS_3(n)	move.l %d3, -(%sp);				\

> -  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d3, 0);			\

> -  move.l n+4(%sp), %d3; _DOCARGS_2 (n)

> -# define UNDOCARGS_3	UNDOCARGS_2 move.l (%sp)+, %d3;		\

> -  cfi_adjust_cfa_offset (-4); cfi_restore (%d3);

> -

> -# define DOCARGS_4	_DOCARGS_4 (16)

> -# define _DOCARGS_4(n)	move.l %d4, -(%sp);			\

> -  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d4, 0);		\

> -  move.l n+4(%sp), %d4; _DOCARGS_3 (n)

> -# define UNDOCARGS_4	UNDOCARGS_3 move.l (%sp)+, %d4;	\

> -  cfi_adjust_cfa_offset (-4); cfi_restore (%d4);

> -

> -# define DOCARGS_5	_DOCARGS_5 (20)

> -# define _DOCARGS_5(n)	move.l %d5, -(%sp);			\

> -  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0);		\

> -  move.l n+4(%sp), %d5; _DOCARGS_4 (n)

> -# define UNDOCARGS_5	UNDOCARGS_4 move.l (%sp)+, %d5; \

> -  cfi_adjust_cfa_offset (-4); cfi_restore (%d5);

> -

> -# define DOCARGS_6	_DOCARGS_6 (24)

> -# define _DOCARGS_6(n)	move.l n(%sp), %a0; _DOCARGS_5 (n-4)

> -# define UNDOCARGS_6	UNDOCARGS_5

> -

> -# ifdef PIC

> -#  define PSEUDO_JMP(sym) jbsr sym ## @PLTPC

> -# else

> -#  define PSEUDO_JMP(sym) jbsr sym

> -# endif

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	PSEUDO_JMP (__pthread_enable_asynccancel)

> -#  define CDISABLE	PSEUDO_JMP (__pthread_disable_asynccancel)

> -# elif IS_IN (libc)

> -#  define CENABLE	PSEUDO_JMP (__libc_enable_asynccancel)

> -#  define CDISABLE	PSEUDO_JMP (__libc_disable_asynccancel)

> -# elif IS_IN (librt)

> -#  define CENABLE	PSEUDO_JMP (__librt_enable_asynccancel)

> -#  define CDISABLE	PSEUDO_JMP (__librt_disable_asynccancel)

> -# else

> -#  error Unsupported library

> -# endif

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P						\

> +# define SINGLE_THREAD_P						\

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

>  				   header.multiple_threads) == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P			\

> -  PSEUDO_JMP (__m68k_read_tp);		        \

> -  tst.l MULTIPLE_THREADS_OFFSET(%a0)

> -# endif

> -

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  # define SINGLE_THREAD_P (1)

>  # define NO_CANCELLATION (1)

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P					  \

> +#define RTLD_SINGLE_THREAD_P					  \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,			  \

>  				   header.multiple_threads) == 0, \

>  		    1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h

> index dbcc2b2..7fe030b 100644

> --- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h

> @@ -23,136 +23,28 @@

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -# if !IS_IN (librt) || !defined(PIC)

> -#  define AC_STACK_SIZE  16  /* space for r15, async_cancel arg and 2 temp words */

> -#  define AC_SET_GOT /* empty */

> -#  define AC_RESTORE_GOT /* empty */

> -# else

> -#  define AC_STACK_SIZE  20  /* extra 4 bytes for r20 */

> -#  define AC_SET_GOT                                                 \

> -    swi   r20, r1, AC_STACK_SIZE-4;                                  \

> -    mfs   r20, rpc;                                                  \

> -    addik r20, r20, _GLOBAL_OFFSET_TABLE_+8;

> -#  define AC_RESTORE_GOT                                             \

> -    lwi   r20, r1, AC_STACK_SIZE-4;

> -# endif

> -

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)                            \

> -  .text;                                                             \

> -  ENTRY (name)                                                       \

> -    SINGLE_THREAD_P(r12);                                            \

> -    bnei r12, L(pseudo_cancel);                                      \

> -  .globl __##syscall_name##_nocancel;                                \

> -  .type __##syscall_name##_nocancel,@function;                       \

> -__##syscall_name##_nocancel:                                         \

> -    DO_CALL (syscall_name, args);                                    \

> -    addik r4, r0, -4095;                                             \

> -    cmpu  r4, r4, r3;                                                \

> -    bgei  r4, SYSCALL_ERROR_LABEL;                                   \

> -    rtsd  r15, 8;                                                    \

> -    nop;                                                             \

> -  .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel;  \

> -L(pseudo_cancel):                                                    \

> -    addik r1, r1, -AC_STACK_SIZE;                                    \

> -    swi   r15, r1, 0;                                                \

> -    AC_SET_GOT                                                       \

> -    DOCARGS_##args                                                   \

> -    CENABLE;                                                         \

> -    swi   r3, r1, 8;                                                 \

> -    UNDOCARGS_##args                                                 \

> -    DO_CALL (syscall_name, args);                                    \

> -    swi   r3, r1, 12;                                                \

> -    lwi   r5, r1, 8;                                                 \

> -    CDISABLE;                                                        \

> -    lwi   r3, r1, 12;                                                \

> -    lwi   r15, r1, 0;                                                \

> -    AC_RESTORE_GOT                                                   \

> -    addik r1, r1, AC_STACK_SIZE;                                     \

> -    addik r4, r0, -4095;                                             \

> -    cmpu  r4, r4, r3;                                                \

> -    bgei  r4, SYSCALL_ERROR_LABEL;                                   \

> -    rtsd  r15, 8;                                                    \

> -    nop;

> -

> -/*

> - * Macros to save/restore syscall arguments across CENABLE

> - * The arguments are saved into the caller's stack (original r1 + 4)

> - */

> -

> -# define DOCARGS_0

> -# define DOCARGS_1  swi   r5, r1, AC_STACK_SIZE + 4;

> -# define DOCARGS_2  swi   r6, r1, AC_STACK_SIZE + 8; DOCARGS_1

> -# define DOCARGS_3  swi   r7, r1, AC_STACK_SIZE + 12; DOCARGS_2

> -# define DOCARGS_4  swi   r8, r1, AC_STACK_SIZE + 16; DOCARGS_3

> -# define DOCARGS_5  swi   r9, r1, AC_STACK_SIZE + 20; DOCARGS_4

> -# define DOCARGS_6  swi   r10, r1, AC_STACK_SIZE + 24; DOCARGS_5

> -

> -# define UNDOCARGS_0

> -# define UNDOCARGS_1  lwi   r5, r1, AC_STACK_SIZE + 4;

> -# define UNDOCARGS_2  UNDOCARGS_1 lwi   r6, r1, AC_STACK_SIZE + 8;

> -# define UNDOCARGS_3  UNDOCARGS_2 lwi   r7, r1, AC_STACK_SIZE + 12;

> -# define UNDOCARGS_4  UNDOCARGS_3 lwi   r8, r1, AC_STACK_SIZE + 16;

> -# define UNDOCARGS_5  UNDOCARGS_4 lwi   r9, r1, AC_STACK_SIZE + 20;

> -# define UNDOCARGS_6  UNDOCARGS_5 lwi   r10, r1, AC_STACK_SIZE + 24;

> -

> -# ifdef PIC

> -#  define PSEUDO_JMP(sym)  brlid r15, sym##@PLTPC; addk r0, r0, r0

> -# else

> -#  define PSEUDO_JMP(sym)  brlid r15, sym; addk r0, r0, r0

> -# endif

> -

>  # if IS_IN (libpthread)

> -#  define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)

> -#  define CDISABLE  PSEUDO_JMP (__pthread_disable_asynccancel)

>  #  define __local_multiple_threads __pthread_multiple_threads

>  # elif IS_IN (libc)

> -#  define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)

> -#  define CDISABLE  PSEUDO_JMP (__libc_disable_asynccancel)

>  #  define __local_multiple_threads __libc_multiple_threads

> -# elif IS_IN (librt)

> -#  define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)

> -#  define CDISABLE  PSEUDO_JMP (__librt_disable_asynccancel)

> -# else

> -#  error Unsupported library

>  # endif

>  

> -

>  # if IS_IN (libpthread) || IS_IN (libc)

> -#  ifndef __ASSEMBLER__

>  extern int __local_multiple_threads attribute_hidden;

> -#   define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

> -#  else

> -#   if !defined PIC

> -#    define SINGLE_THREAD_P(reg) lwi reg, r0, __local_multiple_threads;

> -#   else

> -#    define SINGLE_THREAD_P(reg)                                     \

> -      mfs   reg, rpc;                                                \

> -      addik reg, reg, _GLOBAL_OFFSET_TABLE_+8;                       \

> -      lwi   reg, reg, __local_multiple_threads@GOT;                  \

> -      lwi   reg, reg, 0;

> -#   endif

> -#  endif

> +#  define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

>  # else

> -#  ifndef __ASSEMBLER__

> -#   define SINGLE_THREAD_P                                           \

> +#  define SINGLE_THREAD_P                                           \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,                      \

>                                     header.multiple_threads) == 0, 1)

> -#  else

> -#   define SINGLE_THREAD_P(reg)                                      \

> -     lwi reg, r0, MULTIPLE_THREADS_OFFSET(reg)

> -#  endif

>  # endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  # define SINGLE_THREAD_P (1)

>  # define NO_CANCELLATION (1)

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P                                        \

> +#define RTLD_SINGLE_THREAD_P                                        \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,                      \

>                                     header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h

> deleted file mode 100644

> index 0ed3e3d..0000000

> --- a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h

> +++ /dev/null

> @@ -1,249 +0,0 @@

> -/* Copyright (C) 2003-2017 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

> -   <http://www.gnu.org/licenses/>.  */

> -

> -#include <sysdep.h>

> -#include <sysdeps/generic/sysdep.h>

> -#include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> -#include <sys/asm.h>

> -

> -/* Gas will put the initial save of $gp into the CIE, because it appears to

> -   happen before any instructions.  So we use cfi_same_value instead of

> -   cfi_restore.  */

> -

> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

> -

> -#ifdef __PIC__

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				      \

> -      .align 2;								      \

> -  L(pseudo_start):							      \

> -      cfi_startproc;							      \

> -      cfi_adjust_cfa_offset (STKSPACE);					      \

> -      cfi_rel_offset (gp, STKOFF_GP);					      \

> -  99: PTR_LA t9,__syscall_error;					      \

> -      /* manual cpreturn */						      \

> -      REG_L gp, STKOFF_GP(sp);						      \

> -      cfi_same_value (gp);						      \

> -      RESTORESTK;							      \

> -      jr t9;								      \

> -  .type __##syscall_name##_nocancel, @function;				      \

> -  .globl __##syscall_name##_nocancel;					      \

> -  __##syscall_name##_nocancel:						      \

> -    SAVESTK;								      \

> -    .cpsetup t9, STKOFF_GP, __##syscall_name##_nocancel;		      \

> -    cfi_rel_offset (gp, STKOFF_GP);					      \

> -    li v0, SYS_ify(syscall_name);					      \

> -    syscall;								      \

> -    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \

> -    /* manual cpreturn */						      \

> -    REG_L gp, STKOFF_GP(sp);						      \

> -    cfi_same_value (gp);						      \

> -    RESTORESTK;								      \

> -    ret;								      \

> -    cfi_endproc;							      \

> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

> -  ENTRY (name)								      \

> -    SAVESTK;								      \

> -    .cpsetup t9, STKOFF_GP, name;					      \

> -    cfi_rel_offset (gp, STKOFF_GP);					      \

> -    SINGLE_THREAD_P(v1);						      \

> -    bne zero, v1, L(pseudo_cancel);					      \

> -    .set noreorder;							      \

> -    li v0, SYS_ify(syscall_name);					      \

> -    syscall;								      \

> -    .set reorder;							      \

> -    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \

> -    /* manual cpreturn */						      \

> -    REG_L gp, STKOFF_GP(sp);						      \

> -    cfi_same_value (gp);						      \

> -    RESTORESTK;								      \

> -    ret;								      \

> -  L(pseudo_cancel):							      \

> -    cfi_adjust_cfa_offset (STKSPACE);					      \

> -    cfi_rel_offset (gp, STKOFF_GP);					      \

> -    REG_S ra, STKOFF_RA(sp);						      \

> -    cfi_rel_offset (ra, STKOFF_RA);					      \

> -    PUSHARGS_##args;			/* save syscall args */	      	      \

> -    CENABLE;								      \

> -    REG_S v0, STKOFF_SVMSK(sp);		/* save mask */			      \

> -    POPARGS_##args;			/* restore syscall args */	      \

> -    .set noreorder;							      \

> -    li v0, SYS_ify (syscall_name);				      	      \

> -    syscall;								      \

> -    .set reorder;							      \

> -    REG_S v0, STKOFF_SC_V0(sp);		/* save syscall result */             \

> -    REG_S a3, STKOFF_SC_ERR(sp);	/* save syscall error flag */	      \

> -    REG_L a0, STKOFF_SVMSK(sp);		/* pass mask as arg1 */		      \

> -    CDISABLE;								      \

> -    REG_L a3, STKOFF_SC_ERR(sp);	/* restore syscall error flag */      \

> -    REG_L ra, STKOFF_RA(sp);		/* restore return address */	      \

> -    REG_L v0, STKOFF_SC_V0(sp);		/* restore syscall result */          \

> -    bne a3, zero, SYSCALL_ERROR_LABEL;					      \

> -    /* manual cpreturn */						      \

> -    REG_L gp, STKOFF_GP(sp);						      \

> -    cfi_same_value (gp);						      \

> -    RESTORESTK;								      \

> -  L(pseudo_end):

> -#else

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				      \

> -      .align 2;								      \

> -  L(pseudo_start):							      \

> -      cfi_startproc;							      \

> -      cfi_adjust_cfa_offset (STKSPACE);					      \

> -  99: RESTORESTK;							      \

> -      j __syscall_error;						      \

> -  .type __##syscall_name##_nocancel, @function;				      \

> -  .globl __##syscall_name##_nocancel;					      \

> -  __##syscall_name##_nocancel:						      \

> -    SAVESTK;								      \

> -    li v0, SYS_ify(syscall_name);					      \

> -    syscall;								      \

> -    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \

> -    RESTORESTK;								      \

> -    ret;								      \

> -    cfi_endproc;							      \

> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

> -  ENTRY (name)								      \

> -    SAVESTK;								      \

> -    SINGLE_THREAD_P(v1);						      \

> -    bne zero, v1, L(pseudo_cancel);					      \

> -    .set noreorder;							      \

> -    li v0, SYS_ify(syscall_name);					      \

> -    syscall;								      \

> -    .set reorder;							      \

> -    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \

> -    RESTORESTK;								      \

> -    ret;								      \

> -  L(pseudo_cancel):							      \

> -    cfi_adjust_cfa_offset (STKSPACE);					      \

> -    REG_S ra, STKOFF_RA(sp);						      \

> -    cfi_rel_offset (ra, STKOFF_RA);					      \

> -    PUSHARGS_##args;			/* save syscall args */	      	      \

> -    CENABLE;								      \

> -    REG_S v0, STKOFF_SVMSK(sp);		/* save mask */			      \

> -    POPARGS_##args;			/* restore syscall args */	      \

> -    .set noreorder;							      \

> -    li v0, SYS_ify (syscall_name);				      	      \

> -    syscall;								      \

> -    .set reorder;							      \

> -    REG_S v0, STKOFF_SC_V0(sp);		/* save syscall result */             \

> -    REG_S a3, STKOFF_SC_ERR(sp);	/* save syscall error flag */	      \

> -    REG_L a0, STKOFF_SVMSK(sp);		/* pass mask as arg1 */		      \

> -    CDISABLE;								      \

> -    REG_L a3, STKOFF_SC_ERR(sp);	/* restore syscall error flag */      \

> -    REG_L ra, STKOFF_RA(sp);		/* restore return address */	      \

> -    REG_L v0, STKOFF_SC_V0(sp);		/* restore syscall result */          \

> -    bne a3, zero, SYSCALL_ERROR_LABEL;					      \

> -    RESTORESTK;								      \

> -  L(pseudo_end):

> -#endif

> -

> -# undef PSEUDO_END

> -# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym

> -

> -# define PUSHARGS_0	/* nothing to do */

> -# define PUSHARGS_1	PUSHARGS_0 REG_S a0, STKOFF_A0(sp); cfi_rel_offset (a0, STKOFF_A0);

> -# define PUSHARGS_2	PUSHARGS_1 REG_S a1, STKOFF_A1(sp); cfi_rel_offset (a1, STKOFF_A1);

> -# define PUSHARGS_3	PUSHARGS_2 REG_S a2, STKOFF_A2(sp); cfi_rel_offset (a2, STKOFF_A2);

> -# define PUSHARGS_4	PUSHARGS_3 REG_S a3, STKOFF_A3(sp); cfi_rel_offset (a3, STKOFF_A3);

> -# define PUSHARGS_5	PUSHARGS_4 REG_S a4, STKOFF_A4(sp); cfi_rel_offset (a3, STKOFF_A4);

> -# define PUSHARGS_6	PUSHARGS_5 REG_S a5, STKOFF_A5(sp); cfi_rel_offset (a3, STKOFF_A5);

> -

> -# define POPARGS_0	/* nothing to do */

> -# define POPARGS_1	POPARGS_0 REG_L a0, STKOFF_A0(sp);

> -# define POPARGS_2	POPARGS_1 REG_L a1, STKOFF_A1(sp);

> -# define POPARGS_3	POPARGS_2 REG_L a2, STKOFF_A2(sp);

> -# define POPARGS_4	POPARGS_3 REG_L a3, STKOFF_A3(sp);

> -# define POPARGS_5	POPARGS_4 REG_L a4, STKOFF_A4(sp);

> -# define POPARGS_6	POPARGS_5 REG_L a5, STKOFF_A5(sp);

> -

> -/* Save an even number of slots.  Should be 0 if an even number of slots

> -   are used below, or SZREG if an odd number are used.  */

> -# ifdef __PIC__

> -#  define STK_PAD	SZREG

> -# else

> -#  define STK_PAD	0

> -# endif

> -

> -/* Place values that we are more likely to use later in this sequence, i.e.

> -   closer to the SP at function entry.  If you do that, the are more

> -   likely to already be in your d-cache.  */

> -# define STKOFF_A5	(STK_PAD)

> -# define STKOFF_A4	(STKOFF_A5 + SZREG)

> -# define STKOFF_A3	(STKOFF_A4 + SZREG)

> -# define STKOFF_A2	(STKOFF_A3 + SZREG)	/* MT and more args.  */

> -# define STKOFF_A1	(STKOFF_A2 + SZREG)	/* MT and 2 args.  */

> -# define STKOFF_A0	(STKOFF_A1 + SZREG)	/* MT and 1 arg.  */

> -# define STKOFF_RA	(STKOFF_A0 + SZREG)	/* Used if MT.  */

> -# define STKOFF_SC_V0	(STKOFF_RA + SZREG)	/* Used if MT.  */

> -# define STKOFF_SC_ERR	(STKOFF_SC_V0 + SZREG)	/* Used if MT.  */

> -# define STKOFF_SVMSK	(STKOFF_SC_ERR + SZREG)	/* Used if MT.  */

> -

> -# ifdef __PIC__

> -#  define STKOFF_GP	(STKOFF_SVMSK + SZREG)	/* Always used.  */

> -#  define STKSPACE	(STKOFF_GP + SZREG)

> -# else

> -#  define STKSPACE	(STKOFF_SVMSK + SZREG)

> -# endif

> -

> -# define SAVESTK 	PTR_SUBU sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)

> -# define RESTORESTK 	PTR_ADDU sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)

> -

> -# ifdef __PIC__

> -#  define PSEUDO_JMP(sym) PTR_LA t9, sym; jalr t9

> -# else

> -#  define PSEUDO_JMP(sym) jal sym

> -# endif

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	PSEUDO_JMP (__pthread_enable_asynccancel)

> -#  define CDISABLE	PSEUDO_JMP (__pthread_disable_asynccancel)

> -# elif IS_IN (librt)

> -#  define CENABLE	PSEUDO_JMP (__librt_enable_asynccancel)

> -#  define CDISABLE	PSEUDO_JMP (__librt_disable_asynccancel)

> -# else

> -#  define CENABLE	PSEUDO_JMP (__libc_enable_asynccancel)

> -#  define CDISABLE	PSEUDO_JMP (__libc_disable_asynccancel)

> -# endif

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P						\

> -	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\

> -					 header.multiple_threads)	\

> -			  == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P(reg)						\

> -	READ_THREAD_POINTER(reg);					\

> -	lw reg, MULTIPLE_THREADS_OFFSET(reg)

> -#endif

> -

> -#elif !defined __ASSEMBLER__

> -

> -# define SINGLE_THREAD_P 1

> -# define NO_CANCELLATION 1

> -

> -#endif

> -

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

> -				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h

> index 0e45f00..fe9a3fc 100644

> --- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h

> @@ -18,173 +18,22 @@

>  #include <sysdep.h>

>  #include <sysdeps/generic/sysdep.h>

>  #include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> +#include <nptl/pthreadP.h>

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -# ifdef __PIC__

> -#  define PSEUDO_CPLOAD .cpload t9;

> -#  define PSEUDO_ERRJMP la t9, __syscall_error; jr t9;

> -#  define PSEUDO_SAVEGP sw gp, 32(sp); cfi_rel_offset (gp, 32);

> -#  define PSEUDO_LOADGP lw gp, 32(sp);

> -# else

> -#  define PSEUDO_CPLOAD

> -#  define PSEUDO_ERRJMP j __syscall_error;

> -#  define PSEUDO_SAVEGP

> -#  define PSEUDO_LOADGP

> -# endif

> -

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				      \

> -      .align 2;								      \

> -      .set nomips16;							      \

> -  L(pseudo_start):							      \

> -      cfi_startproc;							      \

> -  99: PSEUDO_ERRJMP							      \

> -  .type __##syscall_name##_nocancel, @function;				      \

> -  .globl __##syscall_name##_nocancel;					      \

> -  __##syscall_name##_nocancel:						      \

> -    .set noreorder;							      \

> -    PSEUDO_CPLOAD							      \

> -    li v0, SYS_ify(syscall_name);					      \

> -    syscall;								      \

> -    .set reorder;							      \

> -    bne a3, zero, 99b;					       		      \

> -    ret;								      \

> -    cfi_endproc;							      \

> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

> -  ENTRY (name)								      \

> -    .set noreorder;							      \

> -    PSEUDO_CPLOAD							      \

> -    .set reorder;							      \

> -    SINGLE_THREAD_P(v1);						      \

> -    bne zero, v1, L(pseudo_cancel);					      \

> -    .set noreorder;							      \

> -    li v0, SYS_ify(syscall_name);					      \

> -    syscall;								      \

> -    .set reorder;							      \

> -    bne a3, zero, 99b;					       		      \

> -    ret;								      \

> -  L(pseudo_cancel):							      \

> -    SAVESTK_##args;						              \

> -    sw ra, 28(sp);							      \

> -    cfi_rel_offset (ra, 28);						      \

> -    PSEUDO_SAVEGP							      \

> -    PUSHARGS_##args;			/* save syscall args */	      	      \

> -    CENABLE;								      \

> -    PSEUDO_LOADGP							      \

> -    sw v0, 44(sp);			/* save mask */			      \

> -    POPARGS_##args;			/* restore syscall args */	      \

> -    .set noreorder;							      \

> -    li v0, SYS_ify (syscall_name);				      	      \

> -    syscall;								      \

> -    .set reorder;							      \

> -    sw v0, 36(sp);			/* save syscall result */             \

> -    sw a3, 40(sp);			/* save syscall error flag */	      \

> -    lw a0, 44(sp);			/* pass mask as arg1 */		      \

> -    CDISABLE;								      \

> -    PSEUDO_LOADGP							      \

> -    lw v0, 36(sp);			/* restore syscall result */          \

> -    lw a3, 40(sp);			/* restore syscall error flag */      \

> -    lw ra, 28(sp);			/* restore return address */	      \

> -    .set noreorder;							      \

> -    bne a3, zero, 99b;							      \

> -     RESTORESTK;						              \

> -  L(pseudo_end):							      \

> -    .set reorder;

> -

> -# undef PSEUDO_END

> -# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym

> -

> -# define PUSHARGS_0	/* nothing to do */

> -# define PUSHARGS_1	PUSHARGS_0 sw a0, 0(sp); cfi_rel_offset (a0, 0);

> -# define PUSHARGS_2	PUSHARGS_1 sw a1, 4(sp); cfi_rel_offset (a1, 4);

> -# define PUSHARGS_3	PUSHARGS_2 sw a2, 8(sp); cfi_rel_offset (a2, 8);

> -# define PUSHARGS_4	PUSHARGS_3 sw a3, 12(sp); cfi_rel_offset (a3, 12);

> -# define PUSHARGS_5	PUSHARGS_4 /* handled by SAVESTK_## */

> -# define PUSHARGS_6	PUSHARGS_5

> -# define PUSHARGS_7	PUSHARGS_6

> -

> -# define POPARGS_0	/* nothing to do */

> -# define POPARGS_1	POPARGS_0 lw a0, 0(sp);

> -# define POPARGS_2	POPARGS_1 lw a1, 4(sp);

> -# define POPARGS_3	POPARGS_2 lw a2, 8(sp);

> -# define POPARGS_4	POPARGS_3 lw a3, 12(sp);

> -# define POPARGS_5	POPARGS_4 /* args already in new stackframe */

> -# define POPARGS_6	POPARGS_5

> -# define POPARGS_7	POPARGS_6

> -

> -

> -# define STKSPACE	48

> -# define SAVESTK_0 	subu sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)

> -# define SAVESTK_1      SAVESTK_0

> -# define SAVESTK_2      SAVESTK_1

> -# define SAVESTK_3      SAVESTK_2

> -# define SAVESTK_4      SAVESTK_3

> -# define SAVESTK_5      lw t0, 16(sp);		\

> -			SAVESTK_0;		\

> -			sw t0, 16(sp)

> -

> -# define SAVESTK_6      lw t0, 16(sp);		\

> -			lw t1, 20(sp);		\

> -			SAVESTK_0;		\

> -			sw t0, 16(sp);		\

> -			sw t1, 20(sp)

> -

> -# define SAVESTK_7      lw t0, 16(sp);		\

> -			lw t1, 20(sp);		\

> -			lw t2, 24(sp);		\

> -			SAVESTK_0;		\

> -			sw t0, 16(sp);		\

> -			sw t1, 20(sp);		\

> -			sw t2, 24(sp)

> -

> -# define RESTORESTK 	addu sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)

> -

> -

> -# ifdef __PIC__

> -/* We use jalr rather than jal.  This means that the assembler will not

> -   automatically restore $gp (in case libc has multiple GOTs) so we must

> -   do it manually - which we have to do anyway since we don't use .cprestore.

> -   It also shuts up the assembler warning about not using .cprestore.  */

> -#  define PSEUDO_JMP(sym) la t9, sym; jalr t9;

> -# else

> -#  define PSEUDO_JMP(sym) jal sym;

> -# endif

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	PSEUDO_JMP (__pthread_enable_asynccancel)

> -#  define CDISABLE	PSEUDO_JMP (__pthread_disable_asynccancel)

> -# elif IS_IN (librt)

> -#  define CENABLE	PSEUDO_JMP (__librt_enable_asynccancel)

> -#  define CDISABLE	PSEUDO_JMP (__librt_disable_asynccancel)

> -# else

> -#  define CENABLE	PSEUDO_JMP (__libc_enable_asynccancel)

> -#  define CDISABLE	PSEUDO_JMP (__libc_disable_asynccancel)

> -# endif

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P						\

> +# define SINGLE_THREAD_P						\

>  	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\

>  					 header.multiple_threads)	\

>  			  == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P(reg)						\

> -	READ_THREAD_POINTER(reg);					\

> -	lw reg, MULTIPLE_THREADS_OFFSET(reg)

> -#endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  # define SINGLE_THREAD_P 1

>  # define NO_CANCELLATION 1

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> +#define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h

> index 47b92d9..7647363 100644

> --- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h

> @@ -18,124 +18,22 @@

>  

>  #include <sysdep.h>

>  #include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> +#include <nptl/pthreadP.h>

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				      \

> -  .type __##syscall_name##_nocancel, @function;				      \

> -  .globl __##syscall_name##_nocancel;					      \

> -  __##syscall_name##_nocancel:						      \

> -    cfi_startproc;                                                            \

> -    DO_CALL (syscall_name, args);                                             \

> -    bne r7, zero, SYSCALL_ERROR_LABEL;                                        \

> -    ret;                                                                      \

> -    cfi_endproc;                                                              \

> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

> -  ENTRY (name)								      \

> -    SINGLE_THREAD_P(r2);						      \

> -    bne r2, zero, pseudo_cancel;					      \

> -    DO_CALL (syscall_name, args);					      \

> -    bne r7, zero, SYSCALL_ERROR_LABEL;                                        \

> -    ret;								      \

> -  pseudo_cancel:							      \

> -    SAVESTK_##args;                 /* save syscall args and adjust stack */  \

> -    SAVEREG(ra, 0);                     /* save return address */             \

> -    SAVEREG(r22, 4);                    /* save GOT pointer */                \

> -    nextpc r22;                                                               \

> -1:  movhi r2, %hiadj(_gp_got - 1b);					      \

> -    addi r2, r2, %lo(_gp_got - 1b);					      \

> -    add r22, r22, r2;                                                         \

> -    CENABLE;                                                                  \

> -    callr r3;                                                                 \

> -    stw r2, 8(sp);                      /* save mask */                       \

> -    LOADARGS_##args;                                                          \

> -    movi r2, SYS_ify(syscall_name);                                           \

> -    trap;                                                                     \

> -    stw r2, 12(sp);                     /* save syscall result */             \

> -    stw r7, 16(sp);                     /* save syscall error flag */         \

> -    ldw r4, 8(sp);                      /* pass mask as argument 1 */         \

> -    CDISABLE;                                                                 \

> -    callr r3;                                                                 \

> -    ldw r7, 16(sp);                     /* restore syscall error flag */      \

> -    ldw r2, 12(sp);                     /* restore syscall result */          \

> -    ldw ra, 0(sp);                      /* restore return address */          \

> -    ldw r22, 4(sp);                     /* restore GOT pointer */             \

> -    RESTORESTK_##args;                                                        \

> -    bne r7, zero, SYSCALL_ERROR_LABEL;

> -

> -

> -# undef PSEUDO_END

> -# define PSEUDO_END(sym) \

> -  SYSCALL_ERROR_HANDLER \

> -  END (sym)

> -

> -#define SAVEREG(REG, LOC) stw REG, LOC(sp); cfi_rel_offset (REG, LOC)

> -#define SAVESTK(X) subi sp, sp, X; cfi_adjust_cfa_offset(X)

> -#define SAVESTK_0 SAVESTK(20)

> -#define SAVEARG_1 SAVEREG(r4, 20)

> -#define SAVESTK_1 SAVESTK(24); SAVEARG_1

> -#define SAVEARG_2 SAVEREG(r5, 24); SAVEARG_1

> -#define SAVESTK_2 SAVESTK(28); SAVEARG_2

> -#define SAVEARG_3 SAVEREG(r6, 28); SAVEARG_2

> -#define SAVESTK_3 SAVESTK(32); SAVEARG_3

> -#define SAVEARG_4 SAVEREG(r7, 32); SAVEARG_3

> -#define SAVESTK_4 SAVESTK(36); SAVEARG_4

> -#define SAVESTK_5 SAVESTK_4

> -#define SAVESTK_6 SAVESTK_5

> -

> -#define LOADARGS_0

> -#define LOADARGS_1 ldw r4, 20(sp)

> -#define LOADARGS_2 LOADARGS_1; ldw r5, 24(sp)

> -#define LOADARGS_3 LOADARGS_2; ldw r6, 28(sp)

> -#define LOADARGS_4 LOADARGS_3; ldw r7, 32(sp)

> -#define LOADARGS_5 LOADARGS_4; ldw r8, 36(sp)

> -#define LOADARGS_6 LOADARGS_5; ldw r9, 40(sp)

> -

> -#define RESTORESTK(X) addi sp, sp, X; cfi_adjust_cfa_offset(-X)

> -#define RESTORESTK_0 RESTORESTK(20)

> -#define RESTORESTK_1 RESTORESTK(24)

> -#define RESTORESTK_2 RESTORESTK(28)

> -#define RESTORESTK_3 RESTORESTK(32)

> -#define RESTORESTK_4 RESTORESTK(36)

> -#define RESTORESTK_5 RESTORESTK(36)

> -#define RESTORESTK_6 RESTORESTK(36)

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	ldw r3, %call(__pthread_enable_asynccancel)(r22)

> -#  define CDISABLE	ldw r3, %call(__pthread_disable_asynccancel)(r22)

> -# elif IS_IN (librt)

> -#  define CENABLE	ldw r3, %call(__librt_enable_asynccancel)(r22)

> -#  define CDISABLE	ldw r3, %call(__librt_disable_asynccancel)(r22)

> -# elif IS_IN (libc)

> -#  define CENABLE	ldw r3, %call(__libc_enable_asynccancel)(r22)

> -#  define CDISABLE	ldw r3, %call(__libc_disable_asynccancel)(r22)

> -# else

> -#  error Unsupported library

> -# endif

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P						\

> +# define SINGLE_THREAD_P						\

>  	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\

>  					 header.multiple_threads)	\

>  			  == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P(reg)						\

> -	ldw reg, MULTIPLE_THREADS_OFFSET(r23)

> -#endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  # define SINGLE_THREAD_P 1

>  # define NO_CANCELLATION 1

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> +#define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h

> deleted file mode 100644

> index 35d3f05..0000000

> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h

> +++ /dev/null

> @@ -1,118 +0,0 @@

> -/* Cancellable system call stubs.  Linux/PowerPC version.

> -   Copyright (C) 2003-2017 Free Software Foundation, Inc.

> -   This file is part of the GNU C Library.

> -   Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.

> -

> -   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

> -   <http://www.gnu.org/licenses/>.  */

> -

> -#include <sysdep.h>

> -#include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> -

> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

> -

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				\

> -  .section ".text";							\

> -  ENTRY (name)								\

> -    SINGLE_THREAD_P;							\

> -    bne- .Lpseudo_cancel;						\

> -  .type __##syscall_name##_nocancel,@function;				\

> -  .globl __##syscall_name##_nocancel;					\

> -  __##syscall_name##_nocancel:						\

> -    DO_CALL (SYS_ify (syscall_name));					\

> -    PSEUDO_RET;								\

> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	\

> -  .Lpseudo_cancel:							\

> -    stwu 1,-48(1);							\

> -    cfi_adjust_cfa_offset (48);						\

> -    mflr 9;								\

> -    stw 9,52(1);							\

> -    cfi_offset (lr, 4);							\

> -    DOCARGS_##args;	/* save syscall args around CENABLE.  */	\

> -    CENABLE;								\

> -    stw 3,16(1);	/* store CENABLE return value (MASK).  */	\

> -    UNDOCARGS_##args;	/* restore syscall args.  */			\

> -    DO_CALL (SYS_ify (syscall_name));					\

> -    mfcr 0;		/* save CR/R3 around CDISABLE.  */		\

> -    stw 3,8(1);								\

> -    stw 0,12(1);							\

> -    lwz 3,16(1);	/* pass MASK to CDISABLE.  */			\

> -    CDISABLE;								\

> -    lwz 4,52(1);							\

> -    lwz 0,12(1);	/* restore CR/R3. */				\

> -    lwz 3,8(1);								\

> -    mtlr 4;								\

> -    mtcr 0;								\

> -    addi 1,1,48;

> -

> -# define DOCARGS_0

> -# define UNDOCARGS_0

> -

> -# define DOCARGS_1	stw 3,20(1); DOCARGS_0

> -# define UNDOCARGS_1	lwz 3,20(1); UNDOCARGS_0

> -

> -# define DOCARGS_2	stw 4,24(1); DOCARGS_1

> -# define UNDOCARGS_2	lwz 4,24(1); UNDOCARGS_1

> -

> -# define DOCARGS_3	stw 5,28(1); DOCARGS_2

> -# define UNDOCARGS_3	lwz 5,28(1); UNDOCARGS_2

> -

> -# define DOCARGS_4	stw 6,32(1); DOCARGS_3

> -# define UNDOCARGS_4	lwz 6,32(1); UNDOCARGS_3

> -

> -# define DOCARGS_5	stw 7,36(1); DOCARGS_4

> -# define UNDOCARGS_5	lwz 7,36(1); UNDOCARGS_4

> -

> -# define DOCARGS_6	stw 8,40(1); DOCARGS_5

> -# define UNDOCARGS_6	lwz 8,40(1); UNDOCARGS_5

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	bl __pthread_enable_asynccancel@local

> -#  define CDISABLE	bl __pthread_disable_asynccancel@local

> -# elif IS_IN (libc)

> -#  define CENABLE	bl __libc_enable_asynccancel@local

> -#  define CDISABLE	bl __libc_disable_asynccancel@local

> -# elif IS_IN (librt)

> -#  define CENABLE	bl __librt_enable_asynccancel@local

> -#  define CDISABLE	bl __librt_disable_asynccancel@local

> -# else

> -#  error Unsupported library

> -# endif

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P						\

> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

> -				   header.multiple_threads) == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P						\

> -  lwz 10,MULTIPLE_THREADS_OFFSET(2);					\

> -  cmpwi 10,0

> -# endif

> -

> -#elif !defined __ASSEMBLER__

> -

> -# define SINGLE_THREAD_P (1)

> -# define NO_CANCELLATION 1

> -

> -#endif

> -

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

> -				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h

> deleted file mode 100644

> index cad13da..0000000

> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h

> +++ /dev/null

> @@ -1,147 +0,0 @@

> -/* Cancellable system call stubs.  Linux/PowerPC64 version.

> -   Copyright (C) 2003-2017 Free Software Foundation, Inc.

> -   This file is part of the GNU C Library.

> -   Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.

> -

> -   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

> -   <http://www.gnu.org/licenses/>.  */

> -

> -#include <sysdep.h>

> -#include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> -

> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

> -

> -# define DASHDASHPFX(str) __##str

> -

> -#if _CALL_ELF == 2

> -#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16+48)

> -#define CANCEL_PARM_SAVE (FRAME_MIN_SIZE+16)

> -#else

> -#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16)

> -#define CANCEL_PARM_SAVE (CANCEL_FRAMESIZE+FRAME_PARM_SAVE)

> -#endif

> -

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				\

> -  .section ".text";							\

> -  ENTRY (name)								\

> -    SINGLE_THREAD_P;							\

> -    bne- .Lpseudo_cancel;						\

> -  .type DASHDASHPFX(syscall_name##_nocancel),@function;			\

> -  .globl DASHDASHPFX(syscall_name##_nocancel);				\

> -  DASHDASHPFX(syscall_name##_nocancel):					\

> -    DO_CALL (SYS_ify (syscall_name));					\

> -    PSEUDO_RET;								\

> -  .size DASHDASHPFX(syscall_name##_nocancel),.-DASHDASHPFX(syscall_name##_nocancel);	\

> -  .Lpseudo_cancel:							\

> -    stdu 1,-CANCEL_FRAMESIZE(1);					\

> -    cfi_adjust_cfa_offset (CANCEL_FRAMESIZE);				\

> -    mflr 9;								\

> -    std  9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1);				\

> -    cfi_offset (lr, FRAME_LR_SAVE);					\

> -    DOCARGS_##args;	/* save syscall args around CENABLE.  */	\

> -    CENABLE;								\

> -    std  3,FRAME_MIN_SIZE(1); /* store CENABLE return value (MASK).  */	\

> -    UNDOCARGS_##args;	/* restore syscall args.  */			\

> -    DO_CALL (SYS_ify (syscall_name));					\

> -    mfcr 0;		/* save CR/R3 around CDISABLE.  */		\

> -    std  3,FRAME_MIN_SIZE+8(1);						\

> -    std  0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1);				\

> -    cfi_offset (cr, FRAME_CR_SAVE);					\

> -    ld   3,FRAME_MIN_SIZE(1); /* pass MASK to CDISABLE.  */		\

> -    CDISABLE;								\

> -    ld   9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1);				\

> -    ld   0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); /* restore CR/R3. */	\

> -    ld   3,FRAME_MIN_SIZE+8(1);						\

> -    mtlr 9;								\

> -    mtcr 0;								\

> -    addi 1,1,CANCEL_FRAMESIZE;						\

> -    cfi_adjust_cfa_offset (-CANCEL_FRAMESIZE);				\

> -    cfi_restore (lr);							\

> -    cfi_restore (cr)

> -

> -# define DOCARGS_0

> -# define UNDOCARGS_0

> -

> -# define DOCARGS_1	std 3,CANCEL_PARM_SAVE(1); DOCARGS_0

> -# define UNDOCARGS_1	ld 3,CANCEL_PARM_SAVE(1); UNDOCARGS_0

> -

> -# define DOCARGS_2	std 4,CANCEL_PARM_SAVE+8(1); DOCARGS_1

> -# define UNDOCARGS_2	ld 4,CANCEL_PARM_SAVE+8(1); UNDOCARGS_1

> -

> -# define DOCARGS_3	std 5,CANCEL_PARM_SAVE+16(1); DOCARGS_2

> -# define UNDOCARGS_3	ld 5,CANCEL_PARM_SAVE+16(1); UNDOCARGS_2

> -

> -# define DOCARGS_4	std 6,CANCEL_PARM_SAVE+24(1); DOCARGS_3

> -# define UNDOCARGS_4	ld 6,CANCEL_PARM_SAVE+24(1); UNDOCARGS_3

> -

> -# define DOCARGS_5	std 7,CANCEL_PARM_SAVE+32(1); DOCARGS_4

> -# define UNDOCARGS_5	ld 7,CANCEL_PARM_SAVE+32(1); UNDOCARGS_4

> -

> -# define DOCARGS_6	std 8,CANCEL_PARM_SAVE+40(1); DOCARGS_5

> -# define UNDOCARGS_6	ld 8,CANCEL_PARM_SAVE+40(1); UNDOCARGS_5

> -

> -# if IS_IN (libpthread)

> -#  ifdef SHARED

> -#   define CENABLE	bl JUMPTARGET(__pthread_enable_asynccancel)

> -#   define CDISABLE	bl JUMPTARGET(__pthread_disable_asynccancel)

> -#  else

> -#   define CENABLE	bl JUMPTARGET(__pthread_enable_asynccancel); nop

> -#   define CDISABLE	bl JUMPTARGET(__pthread_disable_asynccancel); nop

> -#  endif

> -# elif IS_IN (libc)

> -#  ifdef SHARED

> -#   define CENABLE	bl JUMPTARGET(__libc_enable_asynccancel)

> -#   define CDISABLE	bl JUMPTARGET(__libc_disable_asynccancel)

> -#  else

> -#   define CENABLE	bl JUMPTARGET(__libc_enable_asynccancel); nop

> -#   define CDISABLE	bl JUMPTARGET(__libc_disable_asynccancel); nop

> -#  endif

> -# elif IS_IN (librt)

> -#  ifdef SHARED

> -#   define CENABLE	bl JUMPTARGET(__librt_enable_asynccancel)

> -#   define CDISABLE	bl JUMPTARGET(__librt_disable_asynccancel)

> -#  else

> -#   define CENABLE	bl JUMPTARGET(__librt_enable_asynccancel); nop

> -#   define CDISABLE	bl JUMPTARGET(__librt_disable_asynccancel); nop

> -#  endif

> -# else

> -#  error Unsupported library

> -# endif

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P						\

> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

> -				   header.multiple_threads) == 0, 1)

> -# else

> -#   define SINGLE_THREAD_P						\

> -  lwz   10,MULTIPLE_THREADS_OFFSET(13);				\

> -  cmpwi 10,0

> -# endif

> -

> -#elif !defined __ASSEMBLER__

> -

> -# define SINGLE_THREAD_P (1)

> -# define NO_CANCELLATION 1

> -

> -#endif

> -

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

> -				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h

> new file mode 100644

> index 0000000..85af880

> --- /dev/null

> +++ b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h

> @@ -0,0 +1,38 @@

> +/* Cancellable system call stubs.  Linux/PowerPC version.

> +   Copyright (C) 2015 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

> +   <http://www.gnu.org/licenses/>.  */

> +

> +#include <sysdep.h>

> +#include <tls.h>

> +#include <nptl/pthreadP.h>

> +

> +#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

> +

> +# define SINGLE_THREAD_P						\

> +  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

> +				   header.multiple_threads) == 0, 1)

> +

> +#else

> +

> +# define SINGLE_THREAD_P (1)

> +# define NO_CANCELLATION 1

> +

> +#endif

> +

> +#define RTLD_SINGLE_THREAD_P \

> +  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

> +				   header.multiple_threads) == 0, 1)

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h

> index b1e80bc..82763b7 100644

> --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h

> @@ -24,116 +24,17 @@

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				      \

> -	.text;								      \

> -L(pseudo_cancel):							      \

> -	cfi_startproc;							      \

> -	STM_##args							      \

> -	stm	%r12,%r15,48(%r15);					      \

> -	cfi_offset (%r15, -36);						      \

> -	cfi_offset (%r14, -40);						      \

> -	cfi_offset (%r13, -44);						      \

> -	cfi_offset (%r12, -48);						      \

> -	lr	%r14,%r15;						      \

> -	ahi	%r15,-96;						      \

> -	cfi_adjust_cfa_offset (96);					      \

> -	st	%r14,0(%r15);						      \

> -	basr    %r13,0;							      \

> -0:	l	%r1,1f-0b(%r13);					      \

> -	bas	%r14,0(%r1,%r13);					      \

> -	lr	%r0,%r2;						      \

> -	LM_##args							      \

> -	.if SYS_ify (syscall_name) < 256;				      \

> -	svc SYS_ify (syscall_name);					      \

> -	.else;								      \

> -	lhi %r1,SYS_ify (syscall_name);					      \

> -	svc 0;								      \

> -	.endif;								      \

> -	LR7_##args							      \

> -	l	%r1,2f-0b(%r13);					      \

> -	lr	%r12,%r2;						      \

> -	lr	%r2,%r0;						      \

> -	bas	%r14,0(%r1,%r13);					      \

> -	lr	%r2,%r12;						      \

> -	lm	%r12,%r15,48+96(%r15);					      \

> -	cfi_endproc;							      \

> -	j	L(pseudo_check);					      \

> -1:	.long	CENABLE-0b;						      \

> -2:	.long	CDISABLE-0b;						      \

> -ENTRY(name)								      \

> -	SINGLE_THREAD_P(%r1)						      \

> -	jne	L(pseudo_cancel);					      \

> -.type	__##syscall_name##_nocancel,@function;				      \

> -.globl	__##syscall_name##_nocancel;					      \

> -__##syscall_name##_nocancel:						      \

> -	DO_CALL(syscall_name, args);					      \

> -L(pseudo_check):							      \

> -	lhi	%r4,-4095;						      \

> -	clr	%r2,%r4;						      \

> -	jnl	SYSCALL_ERROR_LABEL;					      \

> -.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

> -L(pseudo_end):

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	__pthread_enable_asynccancel

> -#  define CDISABLE	__pthread_disable_asynccancel

> -# elif IS_IN (libc)

> -#  define CENABLE	__libc_enable_asynccancel

> -#  define CDISABLE	__libc_disable_asynccancel

> -# elif IS_IN (librt)

> -#  define CENABLE	__librt_enable_asynccancel

> -#  define CDISABLE	__librt_disable_asynccancel

> -# else

> -#  error Unsupported library

> -# endif

> -

> -#define STM_0		/* Nothing */

> -#define STM_1		st %r2,8(%r15);

> -#define STM_2		stm %r2,%r3,8(%r15);

> -#define STM_3		stm %r2,%r4,8(%r15);

> -#define STM_4		stm %r2,%r5,8(%r15);

> -#define STM_5		stm %r2,%r5,8(%r15);

> -#define STM_6		stm %r2,%r7,8(%r15);

> -

> -#define LM_0		/* Nothing */

> -#define LM_1		l %r2,8+96(%r15);

> -#define LM_2		lm %r2,%r3,8+96(%r15);

> -#define LM_3		lm %r2,%r4,8+96(%r15);

> -#define LM_4		lm %r2,%r5,8+96(%r15);

> -#define LM_5		lm %r2,%r5,8+96(%r15);

> -#define LM_6		lm %r2,%r5,8+96(%r15); \

> -			cfi_offset (%r7, -68); \

> -			l %r7,96+96(%r15);

> -

> -#define LR7_0		/* Nothing */

> -#define LR7_1		/* Nothing */

> -#define LR7_2		/* Nothing */

> -#define LR7_3		/* Nothing */

> -#define LR7_4		/* Nothing */

> -#define LR7_5		/* Nothing */

> -#define LR7_6		l %r7,28+96(%r15); \

> -			cfi_restore (%r7);

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P \

> +# define SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \

>  				   header.multiple_threads) == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P(reg) \

> -	ear	reg,%a0;						      \

> -	icm	reg,15,MULTIPLE_THREADS_OFFSET(reg);

> -# endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  # define SINGLE_THREAD_P (1)

>  # define NO_CANCELLATION 1

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> +#define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h

> index 9b2c546..952d2af 100644

> --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h

> @@ -18,135 +18,36 @@

>  

>  #include <sysdep.h>

>  #include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> +#include <nptl/pthreadP.h>

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				      \

> -	.text;								      \

> -L(pseudo_cancel):							      \

> -	cfi_startproc;							      \

> -	STM_##args							      \

> -	stmg	%r13,%r15,104(%r15);					      \

> -	cfi_offset (%r15,-40);						      \

> -	cfi_offset (%r14,-48);						      \

> -	cfi_offset (%r13,-56);						      \

> -	lgr	%r14,%r15;						      \

> -	aghi	%r15,-160;						      \

> -	cfi_adjust_cfa_offset (160);					      \

> -	stg	%r14,0(%r15);						      \

> -	brasl	%r14,CENABLE;						      \

> -	lgr	%r0,%r2;						      \

> -	LM_##args							      \

> -	.if SYS_ify (syscall_name) < 256;				      \

> -	svc SYS_ify (syscall_name);					      \

> -	.else;								      \

> -	lghi %r1,SYS_ify (syscall_name);				      \

> -	svc 0;								      \

> -	.endif;								      \

> -	LR7_##args							      \

> -	lgr	%r13,%r2;						      \

> -	lgr	%r2,%r0;						      \

> -	brasl	%r14,CDISABLE;						      \

> -	lgr	%r2,%r13;						      \

> -	lmg	%r13,%r15,104+160(%r15);				      \

> -	cfi_endproc;							      \

> -	j	L(pseudo_check);					      \

> -ENTRY(name)								      \

> -	SINGLE_THREAD_P							      \

> -	jne	L(pseudo_cancel);					      \

> -.type	__##syscall_name##_nocancel,@function;				      \

> -.globl	__##syscall_name##_nocancel;					      \

> -__##syscall_name##_nocancel:						      \

> -	DO_CALL(syscall_name, args);					      \

> -L(pseudo_check):							      \

> -	lghi	%r4,-4095;						      \

> -	clgr	%r2,%r4;						      \

> -	jgnl	SYSCALL_ERROR_LABEL;					      \

> -.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

> -L(pseudo_end):

> -

>  # if IS_IN (libpthread)

> -#  define CENABLE	__pthread_enable_asynccancel

> -#  define CDISABLE	__pthread_disable_asynccancel

>  #  define __local_multiple_threads	__pthread_multiple_threads

>  # elif IS_IN (libc)

> -#  define CENABLE	__libc_enable_asynccancel

> -#  define CDISABLE	__libc_disable_asynccancel

>  #  define __local_multiple_threads	__libc_multiple_threads

> -# elif IS_IN (librt)

> -#  define CENABLE	__librt_enable_asynccancel

> -#  define CDISABLE	__librt_disable_asynccancel

> -# else

> -#  error Unsupported library

>  # endif

>  

> -#define STM_0		/* Nothing */

> -#define STM_1		stg %r2,16(%r15);

> -#define STM_2		stmg %r2,%r3,16(%r15);

> -#define STM_3		stmg %r2,%r4,16(%r15);

> -#define STM_4		stmg %r2,%r5,16(%r15);

> -#define STM_5		stmg %r2,%r5,16(%r15);

> -#define STM_6		stmg %r2,%r7,16(%r15);

> -

> -#define LM_0		/* Nothing */

> -#define LM_1		lg %r2,16+160(%r15);

> -#define LM_2		lmg %r2,%r3,16+160(%r15);

> -#define LM_3		lmg %r2,%r4,16+160(%r15);

> -#define LM_4		lmg %r2,%r5,16+160(%r15);

> -#define LM_5		lmg %r2,%r5,16+160(%r15);

> -#define LM_6		lmg %r2,%r5,16+160(%r15); \

> -			cfi_offset (%r7, -104); \

> -			lg %r7,160+160(%r15);

> -

> -#define LR7_0		/* Nothing */

> -#define LR7_1		/* Nothing */

> -#define LR7_2		/* Nothing */

> -#define LR7_3		/* Nothing */

> -#define LR7_4		/* Nothing */

> -#define LR7_5		/* Nothing */

> -#define LR7_6		lg %r7,56+160(%r15); \

> -			cfi_restore (%r7);

> -

>  # if IS_IN (libpthread) || IS_IN (libc)

> -#  ifndef __ASSEMBLER__

>  extern int __local_multiple_threads attribute_hidden;

> -#   define SINGLE_THREAD_P \

> +#  define SINGLE_THREAD_P \

>    __builtin_expect (__local_multiple_threads == 0, 1)

> -#  else

> -#   define SINGLE_THREAD_P \

> -	larl	%r1,__local_multiple_threads;				      \

> -	icm	%r0,15,0(%r1);

> -#  endif

>  

>  # else

>  

> -#  ifndef __ASSEMBLER__

> -#   define SINGLE_THREAD_P \

> +#  define SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \

>  				   header.multiple_threads) == 0, 1)

> -#  else

> -#   define SINGLE_THREAD_P \

> -	ear	%r1,%a0;						      \

> -	sllg	%r1,%r1,32;						      \

> -	ear	%r1,%a1;						      \

> -	icm	%r1,15,MULTIPLE_THREADS_OFFSET(%r1);

> -#  endif

>  

>  # endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  # define SINGLE_THREAD_P (1)

>  # define NO_CANCELLATION 1

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> +#define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h

> index 5645cad..1ea501b 100644

> --- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h

> @@ -23,147 +23,17 @@

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -# define _IMM12 #-12

> -# define _IMM16 #-16

> -# define _IMP16 #16

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args) \

> -  .text; \

> -  ENTRY (name); \

> -  .Lpseudo_start: \

> -    SINGLE_THREAD_P; \

> -    bf .Lpseudo_cancel; \

> -    .type __##syscall_name##_nocancel,@function; \

> -    .globl __##syscall_name##_nocancel; \

> -    __##syscall_name##_nocancel: \

> -    DO_CALL (syscall_name, args); \

> -    mov r0,r1; \

> -    mov _IMM12,r2; \

> -    shad r2,r1; \

> -    not r1,r1; \

> -    tst r1,r1; \

> -    bt .Lsyscall_error; \

> -    bra .Lpseudo_end; \

> -     nop; \

> -    .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \

> - .Lpseudo_cancel: \

> -    sts.l pr,@-r15; \

> -    cfi_adjust_cfa_offset (4); \

> -    cfi_rel_offset (pr, 0); \

> -    add _IMM16,r15; \

> -    cfi_adjust_cfa_offset (16); \

> -    SAVE_ARGS_##args; \

> -    CENABLE; \

> -    LOAD_ARGS_##args; \

> -    add _IMP16,r15; \

> -    cfi_adjust_cfa_offset (-16); \

> -    lds.l @r15+,pr; \

> -    cfi_adjust_cfa_offset (-4); \

> -    cfi_restore (pr); \

> -    DO_CALL(syscall_name, args); \

> -    SYSCALL_INST_PAD; \

> -    sts.l pr,@-r15; \

> -    cfi_adjust_cfa_offset (4); \

> -    cfi_rel_offset (pr, 0); \

> -    mov.l r0,@-r15; \

> -    cfi_adjust_cfa_offset (4); \

> -    cfi_rel_offset (r0, 0); \

> -    CDISABLE; \

> -    mov.l @r15+,r0; \

> -    cfi_adjust_cfa_offset (-4); \

> -    cfi_restore (r0); \

> -    lds.l @r15+,pr; \

> -    cfi_adjust_cfa_offset (-4); \

> -    cfi_restore (pr); \

> -    mov r0,r1; \

> -    mov _IMM12,r2; \

> -    shad r2,r1; \

> -    not r1,r1; \

> -    tst r1,r1; \

> -    bf .Lpseudo_end; \

> - .Lsyscall_error: \

> -    SYSCALL_ERROR_HANDLER; \

> - .Lpseudo_end:

> -

> -# undef PSEUDO_END

> -# define PSEUDO_END(sym) \

> -  END (sym)

> -

> -# define SAVE_ARGS_0	/* Nothing.  */

> -# define SAVE_ARGS_1	SAVE_ARGS_0; mov.l r4,@(0,r15); cfi_offset (r4,-4)

> -# define SAVE_ARGS_2	SAVE_ARGS_1; mov.l r5,@(4,r15); cfi_offset (r5,-8)

> -# define SAVE_ARGS_3	SAVE_ARGS_2; mov.l r6,@(8,r15); cfi_offset (r6,-12)

> -# define SAVE_ARGS_4	SAVE_ARGS_3; mov.l r7,@(12,r15); cfi_offset (r7,-16)

> -# define SAVE_ARGS_5	SAVE_ARGS_4

> -# define SAVE_ARGS_6	SAVE_ARGS_5

> -

> -# define LOAD_ARGS_0	/* Nothing.  */

> -# define LOAD_ARGS_1	LOAD_ARGS_0; mov.l @(0,r15),r4; cfi_restore (r4)

> -# define LOAD_ARGS_2	LOAD_ARGS_1; mov.l @(4,r15),r5; cfi_restore (r5)

> -# define LOAD_ARGS_3	LOAD_ARGS_2; mov.l @(8,r15),r6; cfi_restore (r6)

> -# define LOAD_ARGS_4	LOAD_ARGS_3; mov.l @(12,r15),r7; cfi_restore (r7)

> -# define LOAD_ARGS_5	LOAD_ARGS_4

> -# define LOAD_ARGS_6	LOAD_ARGS_5

> -

> -# if IS_IN (libpthread)

> -#  define __local_enable_asynccancel	__pthread_enable_asynccancel

> -#  define __local_disable_asynccancel	__pthread_disable_asynccancel

> -# elif IS_IN (libc)

> -#  define __local_enable_asynccancel	__libc_enable_asynccancel

> -#  define __local_disable_asynccancel	__libc_disable_asynccancel

> -# elif IS_IN (librt)

> -#  define __local_enable_asynccancel	__librt_enable_asynccancel

> -#  define __local_disable_asynccancel	__librt_disable_asynccancel

> -# else

> -#  error Unsupported library

> -# endif

> -

> -# define CENABLE \

> -	mov.l 1f,r0; \

> -	bsrf r0; \

> -	 nop; \

> -     0: bra 2f; \

> -	 mov r0,r2; \

> -	.align 2; \

> -     1: .long __local_enable_asynccancel - 0b; \

> -     2:

> -

> -# define CDISABLE \

> -	mov.l 1f,r0; \

> -	bsrf r0; \

> -	 mov r2,r4; \

> -     0: bra 2f; \

> -	 nop; \

> -	.align 2; \

> -     1: .long __local_disable_asynccancel - 0b; \

> -     2:

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P \

> +# define SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P \

> -	stc gbr,r0; \

> -	mov.w 0f,r1; \

> -	sub r1,r0; \

> -	mov.l @(MULTIPLE_THREADS_OFFSET,r0),r0; \

> -	bra 1f; \

> -	 tst r0,r0; \

> -     0: .word TLS_PRE_TCB_SIZE; \

> -     1:

> -

> -# endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  # define SINGLE_THREAD_P (1)

>  # define NO_CANCELLATION 1

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> +#define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h

> deleted file mode 100644

> index c513212..0000000

> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h

> +++ /dev/null

> @@ -1,111 +0,0 @@

> -/* Copyright (C) 2002-2017 Free Software Foundation, Inc.

> -   This file is part of the GNU C Library.

> -   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.

> -

> -   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

> -   <http://www.gnu.org/licenses/>.  */

> -

> -#include <sysdep.h>

> -#include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> -

> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

> -

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)	\

> -	.text;					\

> -	.globl		__syscall_error;	\

> -ENTRY(name)					\

> -	ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\

> -	cmp %g1, 0;				\

> -	bne 1f;					\

> -.type	__##syscall_name##_nocancel,@function;	\

> -.globl	__##syscall_name##_nocancel;		\

> -__##syscall_name##_nocancel:			\

> -	 mov SYS_ify(syscall_name), %g1;	\

> -	ta 0x10;				\

> -	bcc 8f;					\

> -	 mov %o7, %g1;				\

> -	call __syscall_error;			\

> -	 mov %g1, %o7;				\

> -8:	jmpl %o7 + 8, %g0;			\

> -	 nop;					\

> -.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\

> -1:	save %sp, -96, %sp;			\

> -	cfi_def_cfa_register(%fp);		\

> -	cfi_window_save;			\

> -	cfi_register(%o7, %i7);			\

> -	CENABLE;				\

> -	 nop;					\

> -	mov %o0, %l0;				\

> -	COPY_ARGS_##args			\

> -	mov SYS_ify(syscall_name), %g1;		\

> -	ta 0x10;				\

> -	bcc 1f;					\

> -	 mov %o0, %l1;				\

> -	CDISABLE;				\

> -	 mov %l0, %o0;				\

> -	call __syscall_error;			\

> -	 mov %l1, %o0;				\

> -	b 2f;					\

> -	 mov -1, %l1;				\

> -1:	CDISABLE;				\

> -	 mov %l0, %o0;				\

> -2:	jmpl %i7 + 8, %g0;			\

> -	 restore %g0, %l1, %o0;

> -

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	call __pthread_enable_asynccancel

> -#  define CDISABLE	call __pthread_disable_asynccancel

> -# elif IS_IN (libc)

> -#  define CENABLE	call __libc_enable_asynccancel

> -#  define CDISABLE	call __libc_disable_asynccancel

> -# elif IS_IN (librt)

> -#  define CENABLE	call __librt_enable_asynccancel

> -#  define CDISABLE	call __librt_disable_asynccancel

> -# else

> -#  error Unsupported library

> -# endif

> -

> -#define COPY_ARGS_0	/* Nothing */

> -#define COPY_ARGS_1	COPY_ARGS_0 mov %i0, %o0;

> -#define COPY_ARGS_2	COPY_ARGS_1 mov %i1, %o1;

> -#define COPY_ARGS_3	COPY_ARGS_2 mov %i2, %o2;

> -#define COPY_ARGS_4	COPY_ARGS_3 mov %i3, %o3;

> -#define COPY_ARGS_5	COPY_ARGS_4 mov %i4, %o4;

> -#define COPY_ARGS_6	COPY_ARGS_5 mov %i5, %o5;

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P \

> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \

> -				   header.multiple_threads) == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1

> -# endif

> -

> -#elif !defined __ASSEMBLER__

> -

> -# define SINGLE_THREAD_P (1)

> -# define NO_CANCELLATION 1

> -

> -#endif

> -

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

> -				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h

> deleted file mode 100644

> index 45fbd73..0000000

> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h

> +++ /dev/null

> @@ -1,109 +0,0 @@

> -/* Copyright (C) 2002-2017 Free Software Foundation, Inc.

> -   This file is part of the GNU C Library.

> -   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.

> -

> -   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

> -   <http://www.gnu.org/licenses/>.  */

> -

> -#include <sysdep.h>

> -#include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> -

> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

> -

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)	\

> -	.text;					\

> -	.globl		__syscall_error;	\

> -ENTRY(name)					\

> -	ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\

> -	brnz,pn %g1, 1f;			\

> -.type	__##syscall_name##_nocancel,@function;	\

> -.globl	__##syscall_name##_nocancel;		\

> -__##syscall_name##_nocancel:			\

> -	 mov SYS_ify(syscall_name), %g1;	\

> -	ta 0x6d;				\

> -	bcc,pt %xcc, 8f;			\

> -	 mov %o7, %g1;				\

> -	call __syscall_error;			\

> -	 mov %g1, %o7;				\

> -8:	jmpl %o7 + 8, %g0;			\

> -	 nop;					\

> -.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\

> -1:	save %sp, -192, %sp;			\

> -	cfi_def_cfa_register(%fp);		\

> -	cfi_window_save;			\

> -	cfi_register(%o7, %i7);			\

> -	CENABLE;				\

> -	 nop;					\

> -	mov %o0, %l0;				\

> -	COPY_ARGS_##args			\

> -	mov SYS_ify(syscall_name), %g1;		\

> -	ta 0x6d;				\

> -	bcc,pt %xcc, 1f;			\

> -	 mov %o0, %l1;				\

> -	CDISABLE;				\

> -	 mov %l0, %o0;				\

> -	call __syscall_error;			\

> -	 mov %l1, %o0;				\

> -	ba,pt %xcc, 2f;				\

> -	 mov -1, %l1;				\

> -1:	CDISABLE;				\

> -	 mov %l0, %o0;				\

> -2:	jmpl %i7 + 8, %g0;			\

> -	 restore %g0, %l1, %o0;

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	call __pthread_enable_asynccancel

> -#  define CDISABLE	call __pthread_disable_asynccancel

> -# elif IS_IN (libc)

> -#  define CENABLE	call __libc_enable_asynccancel

> -#  define CDISABLE	call __libc_disable_asynccancel

> -# elif IS_IN (librt)

> -#  define CENABLE	call __librt_enable_asynccancel

> -#  define CDISABLE	call __librt_disable_asynccancel

> -# else

> -#  error Unsupported library

> -# endif

> -

> -#define COPY_ARGS_0	/* Nothing */

> -#define COPY_ARGS_1	COPY_ARGS_0 mov %i0, %o0;

> -#define COPY_ARGS_2	COPY_ARGS_1 mov %i1, %o1;

> -#define COPY_ARGS_3	COPY_ARGS_2 mov %i2, %o2;

> -#define COPY_ARGS_4	COPY_ARGS_3 mov %i3, %o3;

> -#define COPY_ARGS_5	COPY_ARGS_4 mov %i4, %o4;

> -#define COPY_ARGS_6	COPY_ARGS_5 mov %i5, %o5;

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P \

> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \

> -				   header.multiple_threads) == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1

> -# endif

> -

> -#elif !defined __ASSEMBLER__

> -

> -# define SINGLE_THREAD_P (1)

> -# define NO_CANCELLATION 1

> -

> -#endif

> -

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

> -				   header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h

> new file mode 100644

> index 0000000..61bfa33

> --- /dev/null

> +++ b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h

> @@ -0,0 +1,38 @@

> +/* Copyright (C) 2002-2015 Free Software Foundation, Inc.

> +   This file is part of the GNU C Library.

> +   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.

> +

> +   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

> +   <http://www.gnu.org/licenses/>.  */

> +

> +#include <sysdep.h>

> +#include <tls.h>

> +#include <nptl/pthreadP.h>

> +

> +#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

> +

> +# define SINGLE_THREAD_P \

> +  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \

> +				   header.multiple_threads) == 0, 1)

> +

> +#else

> +

> +# define SINGLE_THREAD_P (1)

> +# define NO_CANCELLATION 1

> +

> +#endif

> +

> +#define RTLD_SINGLE_THREAD_P \

> +  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

> +				   header.multiple_threads) == 0, 1)

> diff --git a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h

> index 092a90c..c8994db 100644

> --- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h

> @@ -18,137 +18,22 @@

>  

>  #include <sysdep.h>

>  #include <tls.h>

> -#ifndef __ASSEMBLER__

> -# include <nptl/pthreadP.h>

> -#endif

> +#include <nptl/pthreadP.h>

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -/* Allow hacking in some extra code if desired. */

> -#ifndef PSEUDO_EXTRA

> -#define PSEUDO_EXTRA

> -#endif

> -

> -#undef PSEUDO

> -#define PSEUDO(name, syscall_name, args)				      \

> -  ENTRY(__##syscall_name##_nocancel);					      \

> -    PSEUDO_EXTRA							      \

> -    moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name);			      \

> -    swint1;								      \

> -    BNEZ r1, 0f;							      \

> -    jrp lr;								      \

> -  END(__##syscall_name##_nocancel);					      \

> -  ENTRY (name)								      \

> -    SINGLE_THREAD_P(r11);						      \

> -    BEQZ r11, L(pseudo_cancel);						      \

> -    PSEUDO_EXTRA							      \

> -    moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name);			      \

> -    swint1;								      \

> -    BNEZ r1, 0f;							      \

> -    jrp lr;								      \

> -  L(pseudo_cancel):							      \

> -    {									      \

> -     move r11, sp;							      \

> -     ST sp, lr;								      \

> -     ADDI_PTR sp, sp, -STKSPACE;					      \

> -    };									      \

> -    cfi_offset (lr, 0);							      \

> -    cfi_def_cfa_offset (STKSPACE);					      \

> -    {									      \

> -     ADDI_PTR r12, sp, REGSIZE;						      \

> -     ADDI_PTR r13, sp, 2 * REGSIZE;	/* set up for PUSHARGS_0 */	      \

> -    };									      \

> -    ST r12, r11;							      \

> -    PUSHARGS_##args			/* save syscall args */	      	      \

> -    CENABLE;								      \

> -    ADDI_PTR r12, sp, 10 * REGSIZE;					      \

> -    {									      \

> -     ST r12, r0;			/* save mask */			      \

> -     ADDI_PTR r13, sp, 2 * REGSIZE;	/* set up for POPARGS_0 */	      \

> -    };									      \

> -    POPARGS_##args			/* restore syscall args */	      \

> -    PSEUDO_EXTRA							      \

> -    moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name);			      \

> -    swint1;								      \

> -    ADDI_PTR r12, sp, 12 * REGSIZE;					      \

> -    {									      \

> -     ST r12, r1;			/* save syscall result */             \

> -     ADDI_PTR r12, sp, 11 * REGSIZE;					      \

> -    };									      \

> -    {									      \

> -     ST r12, r0;			                                      \

> -     ADDI_PTR r13, sp, 10 * REGSIZE;					      \

> -    };									      \

> -    LD r0, r13;				/* pass mask as arg1 */		      \

> -    CDISABLE;								      \

> -    {									      \

> -     ADDI_PTR lr, sp, STKSPACE;						      \

> -     ADDI_PTR r0, sp, 11 * REGSIZE;					      \

> -    };									      \

> -    {									      \

> -     LD r0, r0;								      \

> -     ADDI_PTR r1, sp, 12 * REGSIZE;					      \

> -    };									      \

> -    LD r1, r1;								      \

> -    {									      \

> -     LD lr, lr;								      \

> -     ADDI_PTR sp, sp, STKSPACE;						      \

> -    };									      \

> -    cfi_def_cfa_offset (0);						      \

> -    BNEZ r1, 0f

> -

> -# define PUSHARGS_0 /* nothing to do */

> -# define PUSHARGS_1 PUSHARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; ST r13, r0 };

> -# define PUSHARGS_2 PUSHARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; ST r14, r1 };

> -# define PUSHARGS_3 PUSHARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; ST r13, r2 };

> -# define PUSHARGS_4 PUSHARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; ST r14, r3 };

> -# define PUSHARGS_5 PUSHARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; ST r13, r4 };

> -# define PUSHARGS_6 PUSHARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; ST r14, r5 };

> -# define PUSHARGS_7 PUSHARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; ST r13, r6 };

> -

> -# define POPARGS_0  /* nothing to do */

> -# define POPARGS_1  POPARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; LD r0, r13 };

> -# define POPARGS_2  POPARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; LD r1, r14 };

> -# define POPARGS_3  POPARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; LD r2, r13 };

> -# define POPARGS_4  POPARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; LD r3, r14 };

> -# define POPARGS_5  POPARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; LD r4, r13 };

> -# define POPARGS_6  POPARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; LD r5, r14 };

> -# define POPARGS_7  POPARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; LD r6, r13 };

> -

> -# define STKSPACE	(13 * REGSIZE)

> -

> -# if IS_IN (libpthread)

> -#  define CENABLE	jal __pthread_enable_asynccancel

> -#  define CDISABLE	jal __pthread_disable_asynccancel

> -# elif IS_IN (librt)

> -#  define CENABLE	jal __librt_enable_asynccancel

> -#  define CDISABLE	jal __librt_disable_asynccancel

> -# else

> -#  define CENABLE	jal __libc_enable_asynccancel

> -#  define CDISABLE	jal __libc_disable_asynccancel

> -# endif

> -

> -# ifndef __ASSEMBLER__

> -#  define SINGLE_THREAD_P						\

> +# define SINGLE_THREAD_P						\

>  	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\

>  					 header.multiple_threads)	\

>  			  == 0, 1)

> -# else

> -#  define SINGLE_THREAD_P(reg)						\

> -  ADDLI_PTR reg, tp, MULTIPLE_THREADS_OFFSET;                           \

> -  LD reg, reg;                                                          \

> -  CMPEQI reg, reg, 0

> -#endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  # define SINGLE_THREAD_P 1

>  # define NO_CANCELLATION 1

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P                                           \

> +#define RTLD_SINGLE_THREAD_P                                           \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,                         \

>                                     header.multiple_threads) == 0, 1)

> -#endif

> diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h

> index 6598010..0979bde 100644

> --- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h

> +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h

> @@ -24,86 +24,32 @@

>  

>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>  

> -/* The code to disable cancellation depends on the fact that the called

> -   functions are special.  They don't modify registers other than %rax

> -   and %r11 if they return.  Therefore we don't have to preserve other

> -   registers around these calls.  */

> -# undef PSEUDO

> -# define PSEUDO(name, syscall_name, args)				      \

> -  .text;								      \

> -  ENTRY (name)								      \

> -    SINGLE_THREAD_P;							      \

> -    jne L(pseudo_cancel);						      \

> -  .type __##syscall_name##_nocancel,@function;				      \

> -  .globl __##syscall_name##_nocancel;					      \

> -  __##syscall_name##_nocancel:						      \

> -    DO_CALL (syscall_name, args);					      \

> -    cmpq $-4095, %rax;							      \

> -    jae SYSCALL_ERROR_LABEL;						      \

> -    ret;								      \

> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

> -  L(pseudo_cancel):							      \

> -    /* We always have to align the stack before calling a function.  */	      \

> -    subq $8, %rsp; cfi_adjust_cfa_offset (8);				      \

> -    CENABLE								      \

> -    /* The return value from CENABLE is argument for CDISABLE.  */	      \

> -    movq %rax, (%rsp);							      \

> -    DO_CALL (syscall_name, args);					      \

> -    movq (%rsp), %rdi;							      \

> -    /* Save %rax since it's the error code from the syscall.  */	      \

> -    movq %rax, %rdx;							      \

> -    CDISABLE								      \

> -    movq %rdx, %rax;							      \

> -    addq $8,%rsp; cfi_adjust_cfa_offset (-8);				      \

> -    cmpq $-4095, %rax;							      \

> -    jae SYSCALL_ERROR_LABEL

> -

> -

>  # if IS_IN (libpthread)

> -#  define CENABLE	call __pthread_enable_asynccancel;

> -#  define CDISABLE	call __pthread_disable_asynccancel;

>  #  define __local_multiple_threads __pthread_multiple_threads

>  # elif IS_IN (libc)

> -#  define CENABLE	call __libc_enable_asynccancel;

> -#  define CDISABLE	call __libc_disable_asynccancel;

>  #  define __local_multiple_threads __libc_multiple_threads

>  # elif IS_IN (librt)

> -#  define CENABLE	call __librt_enable_asynccancel;

> -#  define CDISABLE	call __librt_disable_asynccancel;

>  # else

>  #  error Unsupported library

>  # endif

>  

>  # if IS_IN (libpthread) || IS_IN (libc)

> -#  ifndef __ASSEMBLER__

>  extern int __local_multiple_threads attribute_hidden;

> -#   define SINGLE_THREAD_P \

> +#  define SINGLE_THREAD_P \

>    __builtin_expect (__local_multiple_threads == 0, 1)

> -#  else

> -#   define SINGLE_THREAD_P cmpl $0, __local_multiple_threads(%rip)

> -#  endif

> -

>  # else

> -

> -#  ifndef __ASSEMBLER__

> -#   define SINGLE_THREAD_P \

> +#  define SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#  else

> -#   define SINGLE_THREAD_P cmpl $0, %fs:MULTIPLE_THREADS_OFFSET

> -#  endif

> -

>  # endif

>  

> -#elif !defined __ASSEMBLER__

> +#else

>  

>  # define SINGLE_THREAD_P (1)

>  # define NO_CANCELLATION 1

>  

>  #endif

>  

> -#ifndef __ASSEMBLER__

> -# define RTLD_SINGLE_THREAD_P \

> +#define RTLD_SINGLE_THREAD_P \

>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>  				   header.multiple_threads) == 0, 1)

> -#endif

>
Adhemerval Zanella Aug. 24, 2017, 6:03 p.m. UTC | #2
I pushed the below just some minor cleanups:

  * __builtin_expect replaced by __glibc_likely;
  * Adjusted comment in syscall-template.S about cancellable syscall;
  * Fixed new files description and dates.

I also updated the syscall wiki [1] to reflect current code convention
and examples.

[1] https://sourceware.org/glibc/wiki/SyscallWrappers

On 23/08/2017 14:23, Adhemerval Zanella wrote:
> Now with both 78ca091cdd2 and b70b6026a05 pushed upstream no linux port

> actually uess the sysdep-cancel.h assembly macro for syscall generation, 

> so it should be safe to remove all their definition and just define 

> cancellable syscalls using SYSCALL_CANCEL C macro.

> 

> I have tested this patch with build-many-glibc.py for the all affected 

> ports and it shows not build failures.  I take this is an extensive patch,

> but it a cleanup one that aims to code simplicity.

> 

> I plan to commit this shortly if no one opposes it.

> 

> On 03/08/2017 10:11, Adhemerval Zanella wrote:

>> This patch removes the cancellation mark from the auto-generation syscall

>> script.  Now all the cancellable syscalls are done throught C code using

>> the SYSCALL_CANCEL macro.  It simplifies the assembly required to each

>> architecture port, since the SYSCALL_CANCEL uses the already defined

>> INLINE_SYSCALL macros, and allows a more straigh fix on cancellation

>> machanism (since no more specific assembly fixes will be required).

>>

>> Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,

>> aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.

>>

>> 	* sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for

>> 	syscall definitions.

>> 	* sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove

>> 	definition.

>> 	* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.

>> 	[IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.

>> 	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.

>> 	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.

>> 	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.

>> 	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.

>> 	(CENABLE): Likewise.

>> 	(CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove

>> 	defintion.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):

>> 	Remove definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	(SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.

>> 	* sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.

>> 	* sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.

>> 	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.

>> 	* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.

>> 	* sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.

>> 	* sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> 	* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove

>> 	definition.

>> 	(PSEUDO_END): Likewise.

>> 	[IS_IN (libpthread)] (CENABLE): Likewise.

>> 	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (libc)] (CENABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[IS_IN (librt)] (CDISABLE): Likewise.

>> 	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> ---

>>  ChangeLog                                          | 173 ++++++++++++++

>>  sysdeps/unix/make-syscalls.sh                      |   4 -

>>  sysdeps/unix/syscall-template.S                    |   7 +-

>>  sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h    |  87 +------

>>  sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h      | 131 +----------

>>  sysdeps/unix/sysv/linux/arm/sysdep-cancel.h        | 197 +---------------

>>  sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h       | 225 +------------------

>>  sysdeps/unix/sysv/linux/i386/sysdep-cancel.h       | 119 +---------

>>  sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h       | 194 +---------------

>>  sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h       | 108 +--------

>>  sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 116 +---------

>>  .../unix/sysv/linux/mips/mips64/sysdep-cancel.h    | 249 ---------------------

>>  sysdeps/unix/sysv/linux/mips/sysdep-cancel.h       | 159 +------------

>>  sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h      | 110 +--------

>>  .../sysv/linux/powerpc/powerpc32/sysdep-cancel.h   | 118 ----------

>>  .../sysv/linux/powerpc/powerpc64/sysdep-cancel.h   | 147 ------------

>>  sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h    |  38 ++++

>>  .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h   | 105 +--------

>>  .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h   | 109 +--------

>>  sysdeps/unix/sysv/linux/sh/sysdep-cancel.h         | 136 +----------

>>  .../unix/sysv/linux/sparc/sparc32/sysdep-cancel.h  | 111 ---------

>>  .../unix/sysv/linux/sparc/sparc64/sysdep-cancel.h  | 109 ---------

>>  sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h      |  38 ++++

>>  sysdeps/unix/sysv/linux/tile/sysdep-cancel.h       | 123 +---------

>>  sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h     |  62 +----

>>  25 files changed, 305 insertions(+), 2670 deletions(-)

>>  delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h

>>  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h

>>  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h

>>  create mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h

>>  delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h

>>  delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h

>>  create mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h

>>

>> diff --git a/ChangeLog b/ChangeLog

>> index d0a78a1..a84bd55 100644

>> --- a/ChangeLog

>> +++ b/ChangeLog

>> @@ -1,5 +1,178 @@

>>  2017-08-02  Adhemerval Zanella  <adhemerval.zanella@linaro.org>

>>  

>> +	* sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for

>> +	syscall definitions.

>> +	* sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove

>> +	definition.

>> +	* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.

>> +	[IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.

>> +	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.

>> +	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.

>> +	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.

>> +	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.

>> +	(CENABLE): Likewise.

>> +	(CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove

>> +	defintion.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):

>> +	Remove definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	(SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.

>> +	* sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.

>> +	* sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.

>> +	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.

>> +	* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.

>> +	* sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.

>> +	* sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +	* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove

>> +	definition.

>> +	(PSEUDO_END): Likewise.

>> +	[IS_IN (libpthread)] (CENABLE): Likewise.

>> +	[IS_IN (libpthread)] (CDISABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (libc)] (CENABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[IS_IN (librt)] (CDISABLE): Likewise.

>> +	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.

>> +

>>  	* sysdeps/unix/sysv/linux/x86_64/syscalls.list (pread64): Remove.

>>  	(preadv64): Likewise.

>>  	(pwrite64(: Likewise.

>> diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh

>> index 123553c..042cfac 100644

>> --- a/sysdeps/unix/make-syscalls.sh

>> +++ b/sysdeps/unix/make-syscalls.sh

>> @@ -12,7 +12,6 @@

>>  #

>>  # Syscall Signature Prefixes:

>>  #

>> -# C: cancellable (i.e., this syscall is a cancellation point)

>>  # E: errno and return value are not set by the call

>>  # V: errno is not set, but errno or zero (success) is returned from the call

>>  #

>> @@ -171,11 +170,9 @@ while read file srcfile caller syscall args strong weak; do

>>    ;;

>>    esac

>>  

>> -  cancellable=0

>>    noerrno=0

>>    errval=0

>>    case $args in

>> -  C*) cancellable=1; args=`echo $args | sed 's/C:\?//'`;;

>>    E*) noerrno=1; args=`echo $args | sed 's/E:\?//'`;;

>>    V*) errval=1; args=`echo $args | sed 's/V:\?//'`;;

>>    esac

>> @@ -258,7 +255,6 @@ while read file srcfile caller syscall args strong weak; do

>>  	(echo '#define SYSCALL_NAME $syscall'; \\

>>  	 echo '#define SYSCALL_NARGS $nargs'; \\

>>  	 echo '#define SYSCALL_SYMBOL $strong'; \\

>> -	 echo '#define SYSCALL_CANCELLABLE $cancellable'; \\

>>  	 echo '#define SYSCALL_NOERRNO $noerrno'; \\

>>  	 echo '#define SYSCALL_ERRVAL $errval'; \\

>>  	 echo '#include <syscall-template.S>'; \\"

>> diff --git a/sysdeps/unix/syscall-template.S b/sysdeps/unix/syscall-template.S

>> index 4993ff5..d4584a9 100644

>> --- a/sysdeps/unix/syscall-template.S

>> +++ b/sysdeps/unix/syscall-template.S

>> @@ -27,7 +27,6 @@

>>  	SYSCALL_NAME		syscall name

>>  	SYSCALL_NARGS		number of arguments this call takes

>>  	SYSCALL_SYMBOL		primary symbol name

>> -	SYSCALL_CANCELLABLE	1 if the call is a cancelation point

>>  	SYSCALL_NOERRNO		1 to define a no-errno version (see below)

>>  	SYSCALL_ERRVAL		1 to define an error-value version (see below)

>>  

>> @@ -41,11 +40,7 @@

>>     instructions long and the untrained eye might not distinguish them from

>>     some compiled code that inexplicably lacks source line information.  */

>>  

>> -#if SYSCALL_CANCELLABLE

>> -# include <sysdep-cancel.h>

>> -#else

>> -# include <sysdep.h>

>> -#endif

>> +#include <sysdep.h>

>>  

>>  /* This indirection is needed so that SYMBOL gets macro-expanded.  */

>>  #define syscall_hidden_def(SYMBOL)		hidden_def (SYMBOL)

>> diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h

>> index 4be2259..d39b6a2 100644

>> --- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h

>> @@ -24,102 +24,23 @@

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				\

>> -	.section ".text";						\

>> -ENTRY (__##syscall_name##_nocancel);					\

>> -.Lpseudo_nocancel:							\

>> -	DO_CALL (syscall_name, args);					\

>> -.Lpseudo_finish:							\

>> -	cmn	x0, 4095;						\

>> -	b.cs	.Lsyscall_error;					\

>> -	.subsection 2;							\

>> -	.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \

>> -ENTRY (name);								\

>> -	SINGLE_THREAD_P(16);						\

>> -	cbz	w16, .Lpseudo_nocancel;					\

>> -	/* Setup common stack frame no matter the number of args.	\

>> -	   Also save the first arg, since it's basically free.  */	\

>> -	stp	x30, x0, [sp, -64]!;					\

>> -	cfi_adjust_cfa_offset (64);					\

>> -	cfi_rel_offset (x30, 0);					\

>> -	DOCARGS_##args;		/* save syscall args around CENABLE.  */ \

>> -	CENABLE;							\

>> -	mov	x16, x0;	/* save mask around syscall.  */	\

>> -	UNDOCARGS_##args;	/* restore syscall args.  */		\

>> -	DO_CALL (syscall_name, args);					\

>> -	str	x0, [sp, 8];	/* save result around CDISABLE.  */	\

>> -	mov	x0, x16;	/* restore mask for CDISABLE.  */	\

>> -	CDISABLE;							\

>> -	/* Break down the stack frame, restoring result at once.  */	\

>> -	ldp	x30, x0, [sp], 64;					\

>> -	cfi_adjust_cfa_offset (-64);					\

>> -	cfi_restore (x30);						\

>> -	b	.Lpseudo_finish;					\

>> -	cfi_endproc;							\

>> -	.size	name, .-name;						\

>> -	.previous

>> -

>> -# undef PSEUDO_END

>> -# define PSEUDO_END(name)						\

>> -	SYSCALL_ERROR_HANDLER;						\

>> -	cfi_endproc

>> -

>> -# define DOCARGS_0

>> -# define DOCARGS_1

>> -# define DOCARGS_2	str x1, [sp, 16]

>> -# define DOCARGS_3	stp x1, x2, [sp, 16]

>> -# define DOCARGS_4	DOCARGS_3; str x3, [sp, 32]

>> -# define DOCARGS_5	DOCARGS_3; stp x3, x4, [sp, 32]

>> -# define DOCARGS_6	DOCARGS_5; str x5, [sp, 48]

>> -

>> -# define UNDOCARGS_0

>> -# define UNDOCARGS_1	ldr x0, [sp, 8]

>> -# define UNDOCARGS_2	ldp x0, x1, [sp, 8]

>> -# define UNDOCARGS_3	UNDOCARGS_1; ldp x1, x2, [sp, 16]

>> -# define UNDOCARGS_4	UNDOCARGS_2; ldp x2, x3, [sp, 24]

>> -# define UNDOCARGS_5	UNDOCARGS_3; ldp x3, x4, [sp, 32]

>> -# define UNDOCARGS_6	UNDOCARGS_4; ldp x4, x5, [sp, 40]

>> -

>>  # if IS_IN (libpthread)

>> -#  define CENABLE	bl __pthread_enable_asynccancel

>> -#  define CDISABLE	bl __pthread_disable_asynccancel

>>  #  define __local_multiple_threads __pthread_multiple_threads

>>  # elif IS_IN (libc)

>> -#  define CENABLE	bl __libc_enable_asynccancel

>> -#  define CDISABLE	bl __libc_disable_asynccancel

>>  #  define __local_multiple_threads __libc_multiple_threads

>> -# elif IS_IN (librt)

>> -#  define CENABLE	bl __librt_enable_asynccancel

>> -#  define CDISABLE	bl __librt_disable_asynccancel

>> -# else

>> -#  error Unsupported library

>>  # endif

>>  

>>  # if IS_IN (libpthread) || IS_IN (libc)

>> -#  ifndef __ASSEMBLER__

>>  extern int __local_multiple_threads attribute_hidden;

>> -#   define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

>> -#  else

>> -#   define SINGLE_THREAD_P(R)						\

>> -	adrp	x##R, __local_multiple_threads;				\

>> -	ldr	w##R, [x##R, :lo12:__local_multiple_threads]

>> -#  endif

>> +#  define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

>>  # else

>>  /*  There is no __local_multiple_threads for librt, so use the TCB.  */

>> -#  ifndef __ASSEMBLER__

>> -#   define SINGLE_THREAD_P						\

>> +#  define SINGLE_THREAD_P						\

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

>>  				   header.multiple_threads) == 0, 1)

>> -#  else

>> -#   define SINGLE_THREAD_P(R)						\

>> -	mrs     x##R, tpidr_el0;					\

>> -	sub	x##R, x##R, PTHREAD_SIZEOF;				\

>> -	ldr	w##R, [x##R, PTHREAD_MULTIPLE_THREADS_OFFSET]

>> -#  endif

>>  # endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  /* For rtld, et cetera.  */

>>  # define SINGLE_THREAD_P 1

>> @@ -127,8 +48,6 @@ extern int __local_multiple_threads attribute_hidden;

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>>  # define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h

>> index 66d6962..366cf31 100644

>> --- a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h

>> @@ -17,147 +17,24 @@

>>  

>>  #include <sysdep.h>

>>  #include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> +#include <nptl/pthreadP.h>

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -/* ??? Assumes that nothing comes between PSEUDO and PSEUDO_END

>> -   besides "ret".  */

>> -

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)			\

>> -	.globl	__##syscall_name##_nocancel;			\

>> -	.type	__##syscall_name##_nocancel, @function;		\

>> -	.usepv	__##syscall_name##_nocancel, std;		\

>> -	.align 4;						\

>> -	cfi_startproc;						\

>> -__LABEL(__##syscall_name##_nocancel)				\

>> -	ldgp	gp, 0(pv);					\

>> -	PSEUDO_PROF;						\

>> -__LABEL($pseudo_nocancel)					\

>> -	PSEUDO_PREPARE_ARGS;					\

>> -	lda	v0, SYS_ify(syscall_name);			\

>> -	call_pal PAL_callsys;					\

>> -	bne	a3, SYSCALL_ERROR_LABEL;			\

>> -__LABEL($pseudo_ret)						\

>> -	.subsection 2;						\

>> -	.size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \

>> -	.globl	name;						\

>> -	.type	name, @function;				\

>> -	.usepv	name, std;					\

>> -	.align 4;						\

>> -	cfi_startproc;						\

>> -__LABEL(name)							\

>> -	ldgp	gp, 0(pv);					\

>> -	PSEUDO_PROF;						\

>> -	SINGLE_THREAD_P(t0);					\

>> -	beq	t0, $pseudo_nocancel;				\

>> -	subq	sp, 64, sp;					\

>> -	cfi_def_cfa_offset(64);					\

>> -	stq	ra, 0(sp);					\

>> -	cfi_offset(ra, -64);					\

>> -	SAVE_ARGS_##args;					\

>> -	CENABLE;						\

>> -	LOAD_ARGS_##args;					\

>> -	/* Save the CENABLE return value in RA.  That register	\

>> -	   is preserved across syscall and the real return 	\

>> -	   address is saved on the stack.  */			\

>> -	mov	v0, ra;						\

>> -	lda	v0, SYS_ify(syscall_name);			\

>> -	call_pal PAL_callsys;					\

>> -	stq	v0, 8(sp);					\

>> -	mov	ra, a0;						\

>> -	bne	a3, $multi_error;				\

>> -	CDISABLE;						\

>> -	ldq	ra, 0(sp);					\

>> -	ldq	v0, 8(sp);					\

>> -	addq	sp, 64, sp;					\

>> -	cfi_remember_state;					\

>> -	cfi_restore(ra);					\

>> -	cfi_def_cfa_offset(0);					\

>> -	ret;							\

>> -	cfi_restore_state;					\

>> -__LABEL($multi_error)						\

>> -	CDISABLE;						\

>> -	ldq	ra, 0(sp);					\

>> -	ldq	v0, 8(sp);					\

>> -	addq	sp, 64, sp;					\

>> -	cfi_restore(ra);					\

>> -	cfi_def_cfa_offset(0);					\

>> -	SYSCALL_ERROR_FALLTHRU;					\

>> -	SYSCALL_ERROR_HANDLER;					\

>> -	cfi_endproc;						\

>> -	.previous

>> -

>> -# undef PSEUDO_END

>> -# define PSEUDO_END(sym)					\

>> -	cfi_endproc;						\

>> -	.subsection 2;						\

>> -	.size sym, .-sym

>> -

>> -# define SAVE_ARGS_0	/* Nothing.  */

>> -# define SAVE_ARGS_1	SAVE_ARGS_0; stq a0, 8(sp)

>> -# define SAVE_ARGS_2	SAVE_ARGS_1; stq a1, 16(sp)

>> -# define SAVE_ARGS_3	SAVE_ARGS_2; stq a2, 24(sp)

>> -# define SAVE_ARGS_4	SAVE_ARGS_3; stq a3, 32(sp)

>> -# define SAVE_ARGS_5	SAVE_ARGS_4; stq a4, 40(sp)

>> -# define SAVE_ARGS_6	SAVE_ARGS_5; stq a5, 48(sp)

>> -

>> -# define LOAD_ARGS_0	/* Nothing.  */

>> -# define LOAD_ARGS_1	LOAD_ARGS_0; ldq a0, 8(sp)

>> -# define LOAD_ARGS_2	LOAD_ARGS_1; ldq a1, 16(sp)

>> -# define LOAD_ARGS_3	LOAD_ARGS_2; ldq a2, 24(sp)

>> -# define LOAD_ARGS_4	LOAD_ARGS_3; ldq a3, 32(sp)

>> -# define LOAD_ARGS_5	LOAD_ARGS_4; ldq a4, 40(sp)

>> -# define LOAD_ARGS_6	LOAD_ARGS_5; ldq a5, 48(sp)

>> -

>>  # if IS_IN (libpthread)

>> -#  define __local_enable_asynccancel	__pthread_enable_asynccancel

>> -#  define __local_disable_asynccancel	__pthread_disable_asynccancel

>>  #  define __local_multiple_threads	__pthread_multiple_threads

>>  # elif IS_IN (libc)

>> -#  define __local_enable_asynccancel	__libc_enable_asynccancel

>> -#  define __local_disable_asynccancel	__libc_disable_asynccancel

>>  #  define __local_multiple_threads	__libc_multiple_threads

>> -# elif IS_IN (librt)

>> -#  define __local_enable_asynccancel	__librt_enable_asynccancel

>> -#  define __local_disable_asynccancel	__librt_disable_asynccancel

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>> -# ifdef PIC

>> -#  define CENABLE	bsr ra, __local_enable_asynccancel !samegp

>> -#  define CDISABLE	bsr ra, __local_disable_asynccancel !samegp

>> -# else

>> -#  define CENABLE	jsr ra, __local_enable_asynccancel; ldgp ra, 0(gp)

>> -#  define CDISABLE	jsr ra, __local_disable_asynccancel; ldgp ra, 0(gp)

>>  # endif

>>  

>>  # if IS_IN (libpthread) || IS_IN (libc)

>> -#  ifndef __ASSEMBLER__

>>  extern int __local_multiple_threads attribute_hidden;

>> -#   define SINGLE_THREAD_P \

>> +#  define SINGLE_THREAD_P \

>>  	__builtin_expect (__local_multiple_threads == 0, 1)

>> -#  elif defined(PIC)

>> -#   define SINGLE_THREAD_P(reg)  ldl reg, __local_multiple_threads(gp) !gprel

>> -#  else

>> -#   define SINGLE_THREAD_P(reg)					\

>> -	ldah	reg, __local_multiple_threads(gp) !gprelhigh;	\

>> -	ldl	reg, __local_multiple_threads(reg) !gprellow

>> -#  endif

>>  # else

>> -#  ifndef __ASSEMBLER__

>> -#   define SINGLE_THREAD_P \

>> +#  define SINGLE_THREAD_P \

>>  	__builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#  else

>> -#   define SINGLE_THREAD_P(reg)					\

>> -	call_pal PAL_rduniq;					\

>> -	ldl reg, MULTIPLE_THREADS_OFFSET($0)

>> -#  endif

>>  # endif

>>  

>>  #else

>> @@ -167,8 +44,6 @@ extern int __local_multiple_threads attribute_hidden;

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>>  # define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h

>> index de12acf..738e749 100644

>> --- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h

>> @@ -23,210 +23,23 @@

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -/* NOTE: We do mark syscalls with unwind annotations, for the benefit of

>> -   cancellation; but they're really only accurate at the point of the

>> -   syscall.  The ARM unwind directives are not rich enough without adding

>> -   a custom personality function.  */

>> -

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				\

>> -	.text;								\

>> -  ENTRY (__##syscall_name##_nocancel);					\

>> -	CFI_SECTIONS;							\

>> -	DO_CALL (syscall_name, args);					\

>> -	cmn	r0, $4096;						\

>> -	PSEUDO_RET;							\

>> -  END (__##syscall_name##_nocancel);					\

>> -  ENTRY (name);								\

>> -	SINGLE_THREAD_P;						\

>> -	DOARGS_##args;							\

>> -	bne .Lpseudo_cancel;						\

>> -	cfi_remember_state;						\

>> -	ldr	r7, =SYS_ify (syscall_name);				\

>> -	swi	0x0;							\

>> -	UNDOARGS_##args;						\

>> -	cmn	r0, $4096;						\

>> -	PSEUDO_RET;							\

>> -	cfi_restore_state;						\

>> -  .Lpseudo_cancel:							\

>> -	.fnstart;	/* matched by the .fnend in UNDOARGS below.  */	\

>> -	DOCARGS_##args;	/* save syscall args etc. around CENABLE.  */	\

>> -	CENABLE;							\

>> -	mov ip, r0;		/* put mask in safe place.  */		\

>> -	UNDOCARGS_##args;	/* restore syscall args.  */		\

>> -	ldr	r7, =SYS_ify (syscall_name);				\

>> -	swi	0x0;		/* do the call.  */			\

>> -	mov	r7, r0;		/* save syscall return value.  */	\

>> -	mov	r0, ip;		/* get mask back.  */			\

>> -	CDISABLE;							\

>> -	mov	r0, r7;		/* retrieve return value.  */		\

>> -	RESTORE_LR_##args;						\

>> -	UNDOARGS_##args;						\

>> -	cmn	r0, $4096

>> -

>> -/* DOARGS pushes eight bytes on the stack for five arguments, twelve bytes for

>> -   six arguments, and four bytes for fewer.  In order to preserve doubleword

>> -   alignment, sometimes we must save an extra register.  */

>> -

>> -# define RESTART_UNWIND				\

>> -	.fnend;					\

>> -	.fnstart;				\

>> -	.save	{r7};				\

>> -	.save	{lr}

>> -

>> -# define DOCARGS_0				\

>> -	.save {r7};				\

>> -	push	{lr};				\

>> -	cfi_adjust_cfa_offset (4);		\

>> -	cfi_rel_offset (lr, 0);			\

>> -	.save	{lr}

>> -# define UNDOCARGS_0

>> -# define RESTORE_LR_0				\

>> -	pop	{lr};				\

>> -	cfi_adjust_cfa_offset (-4);		\

>> -	cfi_restore (lr)

>> -

>> -# define DOCARGS_1				\

>> -	.save	{r7};				\

>> -	push	{r0, r1, lr};			\

>> -	cfi_adjust_cfa_offset (12);		\

>> -	cfi_rel_offset (lr, 8);			\

>> -	.save	{lr};				\

>> -	.pad	#8

>> -# define UNDOCARGS_1				\

>> -	ldr r0, [sp], #8;			\

>> -	cfi_adjust_cfa_offset (-8);		\

>> -	RESTART_UNWIND

>> -# define RESTORE_LR_1				\

>> -	RESTORE_LR_0

>> -

>> -# define DOCARGS_2				\

>> -	.save	{r7};				\

>> -	push	{r0, r1, lr};			\

>> -	cfi_adjust_cfa_offset (12);		\

>> -	cfi_rel_offset (lr, 8);			\

>> -	.save	{lr};				\

>> -	.pad	#8

>> -# define UNDOCARGS_2				\

>> -	pop	{r0, r1};			\

>> -	cfi_adjust_cfa_offset (-8);		\

>> -	RESTART_UNWIND

>> -# define RESTORE_LR_2				\

>> -	RESTORE_LR_0

>> -

>> -# define DOCARGS_3				\

>> -	.save	{r7};				\

>> -	push	{r0, r1, r2, r3, lr};		\

>> -	cfi_adjust_cfa_offset (20);		\

>> -	cfi_rel_offset (lr, 16);		\

>> -	.save	{lr};				\

>> -	.pad	#16

>> -# define UNDOCARGS_3				\

>> -	pop	{r0, r1, r2, r3};		\

>> -	cfi_adjust_cfa_offset (-16);		\

>> -	RESTART_UNWIND

>> -# define RESTORE_LR_3				\

>> -	RESTORE_LR_0

>> -

>> -# define DOCARGS_4				\

>> -	.save	{r7};				\

>> -	push	{r0, r1, r2, r3, lr};		\

>> -	cfi_adjust_cfa_offset (20);		\

>> -	cfi_rel_offset (lr, 16);		\

>> -	.save	{lr};				\

>> -	.pad	#16

>> -# define UNDOCARGS_4				\

>> -	pop	{r0, r1, r2, r3};		\

>> -	cfi_adjust_cfa_offset (-16);		\

>> -	RESTART_UNWIND

>> -# define RESTORE_LR_4				\

>> -	RESTORE_LR_0

>> -

>> -/* r4 is only stmfd'ed for correct stack alignment.  */

>> -# define DOCARGS_5				\

>> -	.save	{r4, r7};			\

>> -	push	{r0, r1, r2, r3, r4, lr};	\

>> -	cfi_adjust_cfa_offset (24);		\

>> -	cfi_rel_offset (lr, 20);		\

>> -	.save	{lr};				\

>> -	.pad	#20

>> -# define UNDOCARGS_5				\

>> -	pop	{r0, r1, r2, r3};		\

>> -	cfi_adjust_cfa_offset (-16);		\

>> -	.fnend;					\

>> -	.fnstart;				\

>> -	.save	{r4, r7};			\

>> -	.save	{lr};				\

>> -	.pad	#4

>> -# define RESTORE_LR_5				\

>> -	pop	{r4, lr};			\

>> -	cfi_adjust_cfa_offset (-8);		\

>> -	/* r4 will be marked as restored later.  */ \

>> -	cfi_restore (lr)

>> -

>> -# define DOCARGS_6				\

>> -	.save	{r4, r5, r7};			\

>> -	push	{r0, r1, r2, r3, lr};		\

>> -	cfi_adjust_cfa_offset (20);		\

>> -	cfi_rel_offset (lr, 16);		\

>> -	.save	{lr};				\

>> -	.pad	#16

>> -# define UNDOCARGS_6				\

>> -	pop	{r0, r1, r2, r3};		\

>> -	cfi_adjust_cfa_offset (-16);		\

>> -	.fnend;					\

>> -	.fnstart;				\

>> -	.save	{r4, r5, r7};			\

>> -	.save	{lr};

>> -# define RESTORE_LR_6				\

>> -	RESTORE_LR_0

>> -

>>  # if IS_IN (libpthread)

>> -#  define CENABLE	bl PLTJMP(__pthread_enable_asynccancel)

>> -#  define CDISABLE	bl PLTJMP(__pthread_disable_asynccancel)

>>  #  define __local_multiple_threads __pthread_multiple_threads

>>  # elif IS_IN (libc)

>> -#  define CENABLE	bl PLTJMP(__libc_enable_asynccancel)

>> -#  define CDISABLE	bl PLTJMP(__libc_disable_asynccancel)

>>  #  define __local_multiple_threads __libc_multiple_threads

>> -# elif IS_IN (librt)

>> -#  define CENABLE	bl PLTJMP(__librt_enable_asynccancel)

>> -#  define CDISABLE	bl PLTJMP(__librt_disable_asynccancel)

>> -# else

>> -#  error Unsupported library

>>  # endif

>>  

>>  # if IS_IN (libpthread) || IS_IN (libc)

>> -#  ifndef __ASSEMBLER__

>>  extern int __local_multiple_threads attribute_hidden;

>> -#   define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

>> -#  else

>> -#   define SINGLE_THREAD_P						\

>> -	LDST_PCREL(ldr, ip, ip, __local_multiple_threads);		\

>> -	teq ip, #0

>> -#  endif

>> +#  define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

>>  # else

>>  /*  There is no __local_multiple_threads for librt, so use the TCB.  */

>> -#  ifndef __ASSEMBLER__

>> -#   define SINGLE_THREAD_P						\

>> +#  define SINGLE_THREAD_P						\

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

>>  				   header.multiple_threads) == 0, 1)

>> -#  else

>> -#   define SINGLE_THREAD_P						\

>> -	push	{r0, lr};						\

>> -	cfi_adjust_cfa_offset (8);					\

>> -	cfi_rel_offset (lr, 4);						\

>> -	GET_TLS (lr);							\

>> -	NEGOFF_ADJ_BASE (r0, MULTIPLE_THREADS_OFFSET);			\

>> -	ldr	ip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET);		\

>> -	pop	{r0, lr};						\

>> -	cfi_adjust_cfa_offset (-8);					\

>> -	cfi_restore (lr);						\

>> -	teq	ip, #0

>> -#  endif

>>  # endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  /* For rtld, et cetera.  */

>>  # define SINGLE_THREAD_P 1

>> @@ -234,8 +47,6 @@ extern int __local_multiple_threads attribute_hidden;

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> +#define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h

>> index 8b7f2b2..a6189a7 100644

>> --- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h

>> @@ -23,215 +23,6 @@

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -# ifndef NO_ERROR

>> -#  define NO_ERROR -0x1000

>> -# endif

>> -

>> -/* The syscall cancellation mechanism requires userspace

>> -   assistance, the following code does roughly this:

>> -

>> -	do arguments (read arg5 and arg6 to registers)

>> -	setup frame

>> -

>> -	check if there are threads, yes jump to pseudo_cancel

>> -

>> -	unthreaded:

>> -		syscall

>> -		check syscall return (jump to pre_end)

>> -		set errno

>> -		set return to -1

>> -		(jump to pre_end)

>> -

>> -	pseudo_cancel:

>> -		cenable

>> -		syscall

>> -		cdisable

>> -		check syscall return (jump to pre_end)

>> -		set errno

>> -		set return to -1

>> -

>> -	pre_end

>> -		restore stack

>> -

>> -	It is expected that 'ret' and 'END' macros will

>> -	append an 'undo arguments' and 'return' to the

>> -	this PSEUDO macro. */

>> -

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				\

>> -	ENTRY (__##syscall_name##_nocancel)				\

>> -	DOARGS_##args					ASM_LINE_SEP	\

>> -	stwm TREG, 64(%sp)				ASM_LINE_SEP	\

>> -	.cfi_def_cfa_offset -64				ASM_LINE_SEP	\

>> -	.cfi_offset TREG, 0				ASM_LINE_SEP	\

>> -	stw %sp, -4(%sp)				ASM_LINE_SEP	\

>> -	stw %r19, -32(%sp)				ASM_LINE_SEP	\

>> -	.cfi_offset 19, 32				ASM_LINE_SEP	\

>> -	/* Save r19 */					ASM_LINE_SEP	\

>> -	SAVE_PIC(TREG)					ASM_LINE_SEP	\

>> -	/* Do syscall, delay loads # */			ASM_LINE_SEP	\

>> -	ble  0x100(%sr2,%r0)				ASM_LINE_SEP	\

>> -	ldi SYS_ify (syscall_name), %r20 /* delay */	ASM_LINE_SEP	\

>> -	ldi NO_ERROR,%r1				ASM_LINE_SEP	\

>> -	cmpb,>>=,n %r1,%ret0,L(pre_nc_end)		ASM_LINE_SEP	\

>> -	/* Restore r19 from TREG */			ASM_LINE_SEP	\

>> -	LOAD_PIC(TREG) /* delay */			ASM_LINE_SEP	\

>> -	SYSCALL_ERROR_HANDLER				ASM_LINE_SEP	\

>> -	/* Use TREG for temp storage */			ASM_LINE_SEP	\

>> -	copy %ret0, TREG /* delay */			ASM_LINE_SEP	\

>> -	/* OPTIMIZE: Don't reload r19 */		ASM_LINE_SEP	\

>> -	/* do a -1*syscall_ret0 */			ASM_LINE_SEP	\

>> -	sub %r0, TREG, TREG				ASM_LINE_SEP	\

>> -	/* Store into errno location */			ASM_LINE_SEP	\

>> -	stw TREG, 0(%sr0,%ret0)				ASM_LINE_SEP	\

>> -	/* return -1 as error */			ASM_LINE_SEP	\

>> -	ldi -1, %ret0					ASM_LINE_SEP	\

>> -L(pre_nc_end):						ASM_LINE_SEP	\

>> -	/* No need to LOAD_PIC */			ASM_LINE_SEP	\

>> -	/* Undo frame */				ASM_LINE_SEP	\

>> -	ldwm -64(%sp),TREG				ASM_LINE_SEP	\

>> -	/* Restore rp before exit */			ASM_LINE_SEP	\

>> -	ldw -20(%sp), %rp				ASM_LINE_SEP	\

>> -	ret						ASM_LINE_SEP	\

>> -	END(__##syscall_name##_nocancel)		ASM_LINE_SEP	\

>> -	/**********************************************/ASM_LINE_SEP	\

>> -	ENTRY (name)							\

>> -	DOARGS_##args					ASM_LINE_SEP	\

>> -	stwm TREG, 64(%sp)				ASM_LINE_SEP	\

>> -	.cfi_def_cfa_offset -64				ASM_LINE_SEP	\

>> -	.cfi_offset TREG, 0				ASM_LINE_SEP	\

>> -	stw %sp, -4(%sp)				ASM_LINE_SEP	\

>> -	stw %r19, -32(%sp)				ASM_LINE_SEP	\

>> -	.cfi_offset 19, 32				ASM_LINE_SEP	\

>> -	/* Done setting up frame, continue... */	ASM_LINE_SEP	\

>> -	SINGLE_THREAD_P					ASM_LINE_SEP	\

>> -	cmpib,<>,n 0,%ret0,L(pseudo_cancel)		ASM_LINE_SEP	\

>> -L(unthreaded):						ASM_LINE_SEP	\

>> -	/* Save r19 */					ASM_LINE_SEP	\

>> -	SAVE_PIC(TREG)					ASM_LINE_SEP	\

>> -	/* Do syscall, delay loads # */			ASM_LINE_SEP	\

>> -	ble  0x100(%sr2,%r0)				ASM_LINE_SEP	\

>> -	ldi SYS_ify (syscall_name), %r20 /* delay */	ASM_LINE_SEP	\

>> -	ldi NO_ERROR,%r1				ASM_LINE_SEP	\

>> -	cmpb,>>=,n %r1,%ret0,L(pre_end)			ASM_LINE_SEP	\

>> -	/* Restore r19 from TREG */			ASM_LINE_SEP	\

>> -	LOAD_PIC(TREG) /* delay */			ASM_LINE_SEP	\

>> -	SYSCALL_ERROR_HANDLER				ASM_LINE_SEP	\

>> -	/* Use TREG for temp storage */			ASM_LINE_SEP	\

>> -	copy %ret0, TREG /* delay */			ASM_LINE_SEP	\

>> -	/* OPTIMIZE: Don't reload r19 */		ASM_LINE_SEP	\

>> -	/* do a -1*syscall_ret0 */			ASM_LINE_SEP	\

>> -	sub %r0, TREG, TREG				ASM_LINE_SEP	\

>> -	/* Store into errno location */			ASM_LINE_SEP	\

>> -	stw TREG, 0(%sr0,%ret0)				ASM_LINE_SEP	\

>> -	b L(pre_end)					ASM_LINE_SEP	\

>> -	/* return -1 as error */			ASM_LINE_SEP	\

>> -	ldi -1, %ret0 /* delay */			ASM_LINE_SEP	\

>> -L(pseudo_cancel):					ASM_LINE_SEP	\

>> -	PUSHARGS_##args /* Save args */			ASM_LINE_SEP	\

>> -	/* Save r19 into TREG */			ASM_LINE_SEP	\

>> -	CENABLE /* FUNC CALL */				ASM_LINE_SEP	\

>> -	SAVE_PIC(TREG) /* delay */			ASM_LINE_SEP	\

>> -	/* restore syscall args */			ASM_LINE_SEP	\

>> -	POPARGS_##args					ASM_LINE_SEP	\

>> -	/* save mask from cenable (use stub rp slot) */	ASM_LINE_SEP	\

>> -	stw %ret0, -24(%sp)				ASM_LINE_SEP	\

>> -	/* ... SYSCALL ... */				ASM_LINE_SEP	\

>> -	ble 0x100(%sr2,%r0)				ASM_LINE_SEP    \

>> -	ldi SYS_ify (syscall_name), %r20 /* delay */	ASM_LINE_SEP	\

>> -	/* ............... */				ASM_LINE_SEP	\

>> -	LOAD_PIC(TREG)					ASM_LINE_SEP	\

>> -	/* pass mask as arg0 to cdisable */		ASM_LINE_SEP	\

>> -	ldw -24(%sp), %r26				ASM_LINE_SEP	\

>> -	CDISABLE					ASM_LINE_SEP	\

>> -	stw %ret0, -24(%sp) /* delay */			ASM_LINE_SEP	\

>> -	/* Restore syscall return */			ASM_LINE_SEP	\

>> -	ldw -24(%sp), %ret0				ASM_LINE_SEP	\

>> -	/* compare error */				ASM_LINE_SEP	\

>> -	ldi NO_ERROR,%r1				ASM_LINE_SEP	\

>> -	/* branch if no error */			ASM_LINE_SEP	\

>> -	cmpb,>>=,n %r1,%ret0,L(pre_end)			ASM_LINE_SEP	\

>> -	LOAD_PIC(TREG)	/* cond. nullify */		ASM_LINE_SEP	\

>> -	copy %ret0, TREG /* save syscall return */	ASM_LINE_SEP	\

>> -	SYSCALL_ERROR_HANDLER				ASM_LINE_SEP	\

>> -	/* make syscall res value positive */		ASM_LINE_SEP	\

>> -	sub %r0, TREG, TREG	/* delay */		ASM_LINE_SEP	\

>> -	/* No need to LOAD_PIC */			ASM_LINE_SEP	\

>> -	/* store into errno location */			ASM_LINE_SEP	\

>> -	stw TREG, 0(%sr0,%ret0)				ASM_LINE_SEP	\

>> -	/* return -1 */					ASM_LINE_SEP	\

>> -	ldi -1, %ret0					ASM_LINE_SEP	\

>> -L(pre_end):						ASM_LINE_SEP	\

>> -	/* No need to LOAD_PIC */			ASM_LINE_SEP	\

>> -	/* Undo frame */				ASM_LINE_SEP	\

>> -	ldwm -64(%sp),TREG				ASM_LINE_SEP	\

>> -	/* Restore rp before exit */			ASM_LINE_SEP	\

>> -	ldw -20(%sp), %rp				ASM_LINE_SEP

>> -

>> -/* Save arguments into our frame */

>> -# define PUSHARGS_0	/* nothing to do */

>> -# define PUSHARGS_1	PUSHARGS_0 stw %r26, -36(%sr0,%sp)	ASM_LINE_SEP	\

>> -			.cfi_offset 26, 28			ASM_LINE_SEP

>> -# define PUSHARGS_2	PUSHARGS_1 stw %r25, -40(%sr0,%sp)	ASM_LINE_SEP	\

>> -			.cfi_offset 25, 24			ASM_LINE_SEP

>> -# define PUSHARGS_3	PUSHARGS_2 stw %r24, -44(%sr0,%sp)	ASM_LINE_SEP	\

>> -			.cfi_offset 24, 20			ASM_LINE_SEP

>> -# define PUSHARGS_4	PUSHARGS_3 stw %r23, -48(%sr0,%sp)	ASM_LINE_SEP	\

>> -			.cfi_offset 23, 16			ASM_LINE_SEP

>> -# define PUSHARGS_5	PUSHARGS_4 stw %r22, -52(%sr0,%sp)	ASM_LINE_SEP	\

>> -			.cfi_offset 22, 12			ASM_LINE_SEP

>> -# define PUSHARGS_6	PUSHARGS_5 stw %r21, -56(%sr0,%sp)	ASM_LINE_SEP	\

>> -			.cfi_offset 21, 8			ASM_LINE_SEP

>> -

>> -/* Bring them back from the stack */

>> -# define POPARGS_0	/* nothing to do */

>> -# define POPARGS_1	POPARGS_0 ldw -36(%sr0,%sp), %r26	ASM_LINE_SEP

>> -# define POPARGS_2	POPARGS_1 ldw -40(%sr0,%sp), %r25	ASM_LINE_SEP

>> -# define POPARGS_3	POPARGS_2 ldw -44(%sr0,%sp), %r24	ASM_LINE_SEP

>> -# define POPARGS_4	POPARGS_3 ldw -48(%sr0,%sp), %r23	ASM_LINE_SEP

>> -# define POPARGS_5	POPARGS_4 ldw -52(%sr0,%sp), %r22	ASM_LINE_SEP

>> -# define POPARGS_6	POPARGS_5 ldw -56(%sr0,%sp), %r21	ASM_LINE_SEP

>> -

>> -# if IS_IN (libpthread)

>> -#  ifdef PIC

>> -#   define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \

>> -			bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP

>> -#   define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \

>> -			bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP

>> -#  else

>> -#   define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \

>> -			bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP

>> -#   define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \

>> -			bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP

>> -#  endif

>> -# elif IS_IN (libc)

>> -#  ifdef PIC

>> -#   define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \

>> -			bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP

>> -#   define CDISABLE	.import __libc_disable_asynccancel,code ASM_LINE_SEP \

>> -			bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP

>> -#  else

>> -#   define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \

>> -			bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP

>> -#   define CDISABLE	.import __libc_disable_asynccancel,code ASM_LINE_SEP \

>> -			bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP

>> -#  endif

>> -# elif IS_IN (librt)

>> -#  ifdef PIC

>> -#   define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \

>> -			bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP

>> -#   define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \

>> -			bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP

>> -#  else

>> -#   define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \

>> -			bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP

>> -#   define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \

>> -			bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP

>> -#  endif

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>>  # if IS_IN (libpthread)

>>  #  define __local_multiple_threads __pthread_multiple_threads

>>  # elif IS_IN (libc)

>> @@ -242,17 +33,11 @@ L(pre_end):						ASM_LINE_SEP	\

>>  #  error Unsupported library

>>  # endif

>>  

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P \

>> +# define SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -# else

>> -/* Read the value of header.multiple_threads from the thread pointer */

>> -#  define SINGLE_THREAD_P							\

>> -	mfctl %cr27, %ret0					ASM_LINE_SEP	\

>> -	ldw MULTIPLE_THREADS_THREAD_OFFSET(%sr0,%ret0),%ret0	ASM_LINE_SEP

>> -# endif

>> -#elif !defined __ASSEMBLER__

>> +

>> +#else

>>  

>>  /* This code should never be used but we define it anyhow.  */

>>  # define SINGLE_THREAD_P (1)

>> @@ -261,8 +46,6 @@ L(pre_end):						ASM_LINE_SEP	\

>>  #endif

>>  /* IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) */

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> +#define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h

>> index ebf6019..34e2b6f 100644

>> --- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h

>> @@ -24,130 +24,17 @@

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				      \

>> -  .text;								      \

>> -  ENTRY (name)								      \

>> -    cmpl $0, %gs:MULTIPLE_THREADS_OFFSET;				      \

>> -    jne L(pseudo_cancel);						      \

>> -  .type __##syscall_name##_nocancel,@function;				      \

>> -  .globl __##syscall_name##_nocancel;					      \

>> -  __##syscall_name##_nocancel:						      \

>> -    DO_CALL (syscall_name, args);					      \

>> -    cmpl $-4095, %eax;							      \

>> -    jae SYSCALL_ERROR_LABEL;						      \

>> -    ret;								      \

>> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

>> -  L(pseudo_cancel):							      \

>> -    CENABLE								      \

>> -    SAVE_OLDTYPE_##args							      \

>> -    PUSHCARGS_##args							      \

>> -    DOCARGS_##args							      \

>> -    movl $SYS_ify (syscall_name), %eax;					      \

>> -    ENTER_KERNEL;							      \

>> -    POPCARGS_##args;							      \

>> -    POPSTATE_##args							      \

>> -    cmpl $-4095, %eax;							      \

>> -    jae SYSCALL_ERROR_LABEL

>> -

>> -# define SAVE_OLDTYPE_0	movl %eax, %ecx;

>> -# define SAVE_OLDTYPE_1	SAVE_OLDTYPE_0

>> -# define SAVE_OLDTYPE_2	pushl %eax; cfi_adjust_cfa_offset (4);

>> -# define SAVE_OLDTYPE_3	SAVE_OLDTYPE_2

>> -# define SAVE_OLDTYPE_4	SAVE_OLDTYPE_2

>> -# define SAVE_OLDTYPE_5	SAVE_OLDTYPE_2

>> -# define SAVE_OLDTYPE_6	SAVE_OLDTYPE_2

>> -

>> -# define PUSHCARGS_0	/* No arguments to push.  */

>> -# define DOCARGS_0	/* No arguments to frob.  */

>> -# define POPCARGS_0	/* No arguments to pop.  */

>> -# define _PUSHCARGS_0	/* No arguments to push.  */

>> -# define _POPCARGS_0	/* No arguments to pop.  */

>> -

>> -# define PUSHCARGS_1	movl %ebx, %edx; cfi_register (ebx, edx); PUSHCARGS_0

>> -# define DOCARGS_1	_DOARGS_1 (4)

>> -# define POPCARGS_1	POPCARGS_0; movl %edx, %ebx; cfi_restore (ebx);

>> -# define _PUSHCARGS_1	pushl %ebx; cfi_adjust_cfa_offset (4); \

>> -			cfi_rel_offset (ebx, 0); _PUSHCARGS_0

>> -# define _POPCARGS_1	_POPCARGS_0; popl %ebx; \

>> -			cfi_adjust_cfa_offset (-4); cfi_restore (ebx);

>> -

>> -# define PUSHCARGS_2	PUSHCARGS_1

>> -# define DOCARGS_2	_DOARGS_2 (12)

>> -# define POPCARGS_2	POPCARGS_1

>> -# define _PUSHCARGS_2	_PUSHCARGS_1

>> -# define _POPCARGS_2	_POPCARGS_1

>> -

>> -# define PUSHCARGS_3	_PUSHCARGS_2

>> -# define DOCARGS_3	_DOARGS_3 (20)

>> -# define POPCARGS_3	_POPCARGS_3

>> -# define _PUSHCARGS_3	_PUSHCARGS_2

>> -# define _POPCARGS_3	_POPCARGS_2

>> -

>> -# define PUSHCARGS_4	_PUSHCARGS_4

>> -# define DOCARGS_4	_DOARGS_4 (28)

>> -# define POPCARGS_4	_POPCARGS_4

>> -# define _PUSHCARGS_4	pushl %esi; cfi_adjust_cfa_offset (4); \

>> -			cfi_rel_offset (esi, 0); _PUSHCARGS_3

>> -# define _POPCARGS_4	_POPCARGS_3; popl %esi; \

>> -			cfi_adjust_cfa_offset (-4); cfi_restore (esi);

>> -

>> -# define PUSHCARGS_5	_PUSHCARGS_5

>> -# define DOCARGS_5	_DOARGS_5 (36)

>> -# define POPCARGS_5	_POPCARGS_5

>> -# define _PUSHCARGS_5	pushl %edi; cfi_adjust_cfa_offset (4); \

>> -			cfi_rel_offset (edi, 0); _PUSHCARGS_4

>> -# define _POPCARGS_5	_POPCARGS_4; popl %edi; \

>> -			cfi_adjust_cfa_offset (-4); cfi_restore (edi);

>> -

>> -# define PUSHCARGS_6	_PUSHCARGS_6

>> -# define DOCARGS_6	_DOARGS_6 (44)

>> -# define POPCARGS_6	_POPCARGS_6

>> -# define _PUSHCARGS_6	pushl %ebp; cfi_adjust_cfa_offset (4); \

>> -			cfi_rel_offset (ebp, 0); _PUSHCARGS_5

>> -# define _POPCARGS_6	_POPCARGS_5; popl %ebp; \

>> -			cfi_adjust_cfa_offset (-4); cfi_restore (ebp);

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	call __pthread_enable_asynccancel;

>> -#  define CDISABLE	call __pthread_disable_asynccancel

>> -# elif IS_IN (libc)

>> -#  define CENABLE	call __libc_enable_asynccancel;

>> -#  define CDISABLE	call __libc_disable_asynccancel

>> -# elif IS_IN (librt)

>> -#  define CENABLE	call __librt_enable_asynccancel;

>> -#  define CDISABLE	call __librt_disable_asynccancel

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -# define POPSTATE_0 \

>> - pushl %eax; cfi_adjust_cfa_offset (4); movl %ecx, %eax; \

>> - CDISABLE; popl %eax; cfi_adjust_cfa_offset (-4);

>> -# define POPSTATE_1	POPSTATE_0

>> -# define POPSTATE_2	xchgl (%esp), %eax; CDISABLE; popl %eax; \

>> -			cfi_adjust_cfa_offset (-4);

>> -# define POPSTATE_3	POPSTATE_2

>> -# define POPSTATE_4	POPSTATE_3

>> -# define POPSTATE_5	POPSTATE_4

>> -# define POPSTATE_6	POPSTATE_5

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P \

>> +# define SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P cmpl $0, %gs:MULTIPLE_THREADS_OFFSET

>> -# endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  # define SINGLE_THREAD_P (1)

>>  # define NO_CANCELLATION 1

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> +#define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h

>> index 7c7f619..96d04de 100644

>> --- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h

>> @@ -23,201 +23,13 @@

>>  #endif

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>> -

>> -# undef PSEUDO

>> -

>> -# if IS_IN (libc)

>> -#  define SYSDEP_CANCEL_ERRNO __libc_errno

>> -# else

>> -#  define SYSDEP_CANCEL_ERRNO errno

>> -# endif

>> -# define SYSDEP_CANCEL_ERROR(args)					      \

>> -.section .gnu.linkonce.t.__syscall_error_##args, "ax";			      \

>> -     .align 32;								      \

>> -     .proc __syscall_error_##args;					      \

>> -     .global __syscall_error_##args;					      \

>> -     .hidden __syscall_error_##args;					      \

>> -     .size __syscall_error_##args, 64;					      \

>> -__syscall_error_##args:							      \

>> -     .prologue;								      \

>> -     .regstk args, 5, args, 0;						      \

>> -     .save ar.pfs, loc0;						      \

>> -     .save rp, loc1;							      \

>> -     .body;								      \

>> -     addl loc4 = @ltoff(@tprel(SYSDEP_CANCEL_ERRNO)), gp;;		      \

>> -     ld8 loc4 = [loc4];							      \

>> -     mov rp = loc1;;							      \

>> -     mov r8 = -1;							      \

>> -     add loc4 = loc4, r13;;						      \

>> -     st4 [loc4] = loc3;							      \

>> -     mov ar.pfs = loc0

>> -

>> -# ifndef USE_DL_SYSINFO

>> -

>> -#  define PSEUDO(name, syscall_name, args)				      \

>> -.text;									      \

>> -ENTRY (name)								      \

>> -     adds r14 = MULTIPLE_THREADS_OFFSET, r13;;				      \

>> -     ld4 r14 = [r14];							      \

>> -     mov r15 = SYS_ify(syscall_name);;					      \

>> -     cmp4.ne p6, p7 = 0, r14;						      \

>> -(p6) br.cond.spnt .Lpseudo_cancel;;					      \

>> -     break __BREAK_SYSCALL;;						      \

>> -     cmp.eq p6,p0=-1,r10;						      \

>> -(p6) br.cond.spnt.few __syscall_error;					      \

>> -     ret;;								      \

>> -     .endp name;							      \

>> -     .proc __GC_##name;							      \

>> -     .globl __GC_##name;						      \

>> -     .hidden __GC_##name;						      \

>> -__GC_##name:								      \

>> -.Lpseudo_cancel:							      \

>> -     .prologue;								      \

>> -     .regstk args, 5, args, 0;						      \

>> -     .save ar.pfs, loc0;						      \

>> -     alloc loc0 = ar.pfs, args, 5, args, 0;				      \

>> -     .save rp, loc1;							      \

>> -     mov loc1 = rp;;							      \

>> -     .body;								      \

>> -     CENABLE;;								      \

>> -     mov loc2 = r8;							      \

>> -     COPY_ARGS_##args							      \

>> -     mov r15 = SYS_ify(syscall_name);					      \

>> -     break __BREAK_SYSCALL;;						      \

>> -     mov loc3 = r8;							      \

>> -     mov loc4 = r10;							      \

>> -     mov out0 = loc2;							      \

>> -     CDISABLE;;								      \

>> -     cmp.eq p6,p0=-1,loc4;						      \

>> -(p6) br.cond.spnt.few __syscall_error_##args;				      \

>> -     mov r8 = loc3;							      \

>> -     mov rp = loc1;							      \

>> -     mov ar.pfs = loc0;							      \

>> -.Lpseudo_end:								      \

>> -     ret;								      \

>> -     .endp __GC_##name;							      \

>> -     SYSDEP_CANCEL_ERROR(args)

>> -

>> -# else /* USE_DL_SYSINFO */

>> -

>> -#  define PSEUDO(name, syscall_name, args)				      \

>> -.text;									      \

>> -ENTRY (name)								      \

>> -     .prologue;								      \

>> -     adds r2 = SYSINFO_OFFSET, r13;					      \

>> -     adds r14 = MULTIPLE_THREADS_OFFSET, r13;				      \

>> -     .save ar.pfs, r11;							      \

>> -     mov r11 = ar.pfs;;							      \

>> -     .body;								      \

>> -     ld4 r14 = [r14];							      \

>> -     ld8 r2 = [r2];							      \

>> -     mov r15 = SYS_ify(syscall_name);;					      \

>> -     cmp4.ne p6, p7 = 0, r14;						      \

>> -     mov b7 = r2;							      \

>> -(p6) br.cond.spnt .Lpseudo_cancel;					      \

>> -     br.call.sptk.many b6 = b7;;					      \

>> -     mov ar.pfs = r11;							      \

>> -     cmp.eq p6,p0 = -1, r10;						      \

>> -(p6) br.cond.spnt.few __syscall_error;					      \

>> -     ret;;								      \

>> -     .endp name;							      \

>> -									      \

>> -      .proc __##syscall_name##_nocancel;				      \

>> -     .globl __##syscall_name##_nocancel;				      \

>> -__##syscall_name##_nocancel:						      \

>> -     .prologue;								      \

>> -     adds r2 = SYSINFO_OFFSET, r13;					      \

>> -     .save ar.pfs, r11;							      \

>> -     mov r11 = ar.pfs;;							      \

>> -     .body;								      \

>> -     ld8 r2 = [r2];							      \

>> -     mov r15 = SYS_ify(syscall_name);;					      \

>> -     mov b7 = r2;							      \

>> -     br.call.sptk.many b6 = b7;;					      \

>> -     mov ar.pfs = r11;							      \

>> -     cmp.eq p6,p0 = -1, r10;						      \

>> -(p6) br.cond.spnt.few __syscall_error;					      \

>> -     ret;;								      \

>> -     .endp __##syscall_name##_nocancel;					      \

>> -									      \

>> -     .proc __GC_##name;							      \

>> -     .globl __GC_##name;						      \

>> -     .hidden __GC_##name;						      \

>> -__GC_##name:								      \

>> -.Lpseudo_cancel:							      \

>> -     .prologue;								      \

>> -     .regstk args, 5, args, 0;						      \

>> -     .save ar.pfs, loc0;						      \

>> -     alloc loc0 = ar.pfs, args, 5, args, 0;				      \

>> -     adds loc4 = SYSINFO_OFFSET, r13;					      \

>> -     .save rp, loc1;							      \

>> -     mov loc1 = rp;;							      \

>> -     .body;								      \

>> -     ld8 loc4 = [loc4];							      \

>> -     CENABLE;;								      \

>> -     mov loc2 = r8;							      \

>> -     mov b7 = loc4;							      \

>> -     COPY_ARGS_##args							      \

>> -     mov r15 = SYS_ify(syscall_name);					      \

>> -     br.call.sptk.many b6 = b7;;					      \

>> -     mov loc3 = r8;							      \

>> -     mov loc4 = r10;							      \

>> -     mov out0 = loc2;							      \

>> -     CDISABLE;;								      \

>> -     cmp.eq p6,p0=-1,loc4;						      \

>> -(p6) br.cond.spnt.few __syscall_error_##args;				      \

>> -     mov r8 = loc3;							      \

>> -     mov rp = loc1;							      \

>> -     mov ar.pfs = loc0;							      \

>> -.Lpseudo_end:								      \

>> -     ret;								      \

>> -     .endp __GC_##name;							      \

>> -     SYSDEP_CANCEL_ERROR(args)

>> -

>> -# endif /* USE_DL_SYSINFO */

>> -

>> -# undef PSEUDO_END

>> -# define PSEUDO_END(name) .endp

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	br.call.sptk.many b0 = __pthread_enable_asynccancel

>> -#  define CDISABLE	br.call.sptk.many b0 = __pthread_disable_asynccancel

>> -# elif IS_IN (libc)

>> -#  define CENABLE	br.call.sptk.many b0 = __libc_enable_asynccancel

>> -#  define CDISABLE	br.call.sptk.many b0 = __libc_disable_asynccancel

>> -# elif IS_IN (librt)

>> -#  define CENABLE	br.call.sptk.many b0 = __librt_enable_asynccancel

>> -#  define CDISABLE	br.call.sptk.many b0 = __librt_disable_asynccancel

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>> -# define COPY_ARGS_0	/* Nothing */

>> -# define COPY_ARGS_1	COPY_ARGS_0 mov out0 = in0;

>> -# define COPY_ARGS_2	COPY_ARGS_1 mov out1 = in1;

>> -# define COPY_ARGS_3	COPY_ARGS_2 mov out2 = in2;

>> -# define COPY_ARGS_4	COPY_ARGS_3 mov out3 = in3;

>> -# define COPY_ARGS_5	COPY_ARGS_4 mov out4 = in4;

>> -# define COPY_ARGS_6	COPY_ARGS_5 mov out5 = in5;

>> -# define COPY_ARGS_7	COPY_ARGS_6 mov out6 = in6;

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P \

>> +# define SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P \

>> -  adds r14 = MULTIPLE_THREADS_OFFSET, r13 ;; ld4 r14 = [r14] ;; cmp4.ne p6, p7 = 0, r14

>> -# endif

>> -

>> -#elif !defined __ASSEMBLER__

>> -

>> +#else

>>  # define SINGLE_THREAD_P (1)

>>  # define NO_CANCELLATION 1

>> -

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> +#define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h

>> index 9bc9e13..1603c5f 100644

>> --- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h

>> @@ -18,121 +18,21 @@

>>  

>>  #include <sysdep.h>

>>  #include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> +#include <nptl/pthreadP.h>

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				      \

>> -  .text;								      \

>> -  ENTRY (name)								      \

>> -    SINGLE_THREAD_P;							      \

>> -    jne .Lpseudo_cancel;						      \

>> -  .type __##syscall_name##_nocancel,@function;			              \

>> -  .globl __##syscall_name##_nocancel;				 	      \

>> -  __##syscall_name##_nocancel:					              \

>> -    DO_CALL (syscall_name, args);					      \

>> -    cmp.l &-4095, %d0;							      \

>> -    jcc SYSCALL_ERROR_LABEL;						      \

>> -    rts;								      \

>> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

>> -  .Lpseudo_cancel:							      \

>> -    CENABLE;								      \

>> -    DOCARGS_##args							      \

>> -    move.l %d0, -(%sp); /* Save result of CENABLE.  */  		      \

>> -    cfi_adjust_cfa_offset (4); \

>> -    move.l &SYS_ify (syscall_name), %d0;				      \

>> -    trap &0;								      \

>> -    move.l %d0, %d2;							      \

>> -    CDISABLE;								      \

>> -    addq.l &4, %sp; /* Remove result of CENABLE from the stack.  */           \

>> -    cfi_adjust_cfa_offset (-4); \

>> -    move.l %d2, %d0;							      \

>> -    UNDOCARGS_##args							      \

>> -    cmp.l &-4095, %d0;							      \

>> -    jcc SYSCALL_ERROR_LABEL

>> -

>> -/* Note: we use D2 to save syscall's return value as D0 will be clobbered in

>> -   CDISABLE.  */

>> -# define DOCARGS_0	move.l %d2, -(%sp);		\

>> -  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d2, 0);

>> -# define UNDOCARGS_0	move.l (%sp)+, %d2;	\

>> -  cfi_adjust_cfa_offset (-4); cfi_restore (%d2);

>> -

>> -# define DOCARGS_1	_DOCARGS_1 (4); DOCARGS_0

>> -# define _DOCARGS_1(n)	move.l n(%sp), %d1;

>> -# define UNDOCARGS_1	UNDOCARGS_0

>> -

>> -# define DOCARGS_2	_DOCARGS_2 (8)

>> -# define _DOCARGS_2(n)	DOCARGS_0 move.l n+4(%sp), %d2; _DOCARGS_1 (n)

>> -# define UNDOCARGS_2	UNDOCARGS_0

>> -

>> -# define DOCARGS_3	_DOCARGS_3 (12)

>> -# define _DOCARGS_3(n)	move.l %d3, -(%sp);				\

>> -  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d3, 0);			\

>> -  move.l n+4(%sp), %d3; _DOCARGS_2 (n)

>> -# define UNDOCARGS_3	UNDOCARGS_2 move.l (%sp)+, %d3;		\

>> -  cfi_adjust_cfa_offset (-4); cfi_restore (%d3);

>> -

>> -# define DOCARGS_4	_DOCARGS_4 (16)

>> -# define _DOCARGS_4(n)	move.l %d4, -(%sp);			\

>> -  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d4, 0);		\

>> -  move.l n+4(%sp), %d4; _DOCARGS_3 (n)

>> -# define UNDOCARGS_4	UNDOCARGS_3 move.l (%sp)+, %d4;	\

>> -  cfi_adjust_cfa_offset (-4); cfi_restore (%d4);

>> -

>> -# define DOCARGS_5	_DOCARGS_5 (20)

>> -# define _DOCARGS_5(n)	move.l %d5, -(%sp);			\

>> -  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0);		\

>> -  move.l n+4(%sp), %d5; _DOCARGS_4 (n)

>> -# define UNDOCARGS_5	UNDOCARGS_4 move.l (%sp)+, %d5; \

>> -  cfi_adjust_cfa_offset (-4); cfi_restore (%d5);

>> -

>> -# define DOCARGS_6	_DOCARGS_6 (24)

>> -# define _DOCARGS_6(n)	move.l n(%sp), %a0; _DOCARGS_5 (n-4)

>> -# define UNDOCARGS_6	UNDOCARGS_5

>> -

>> -# ifdef PIC

>> -#  define PSEUDO_JMP(sym) jbsr sym ## @PLTPC

>> -# else

>> -#  define PSEUDO_JMP(sym) jbsr sym

>> -# endif

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	PSEUDO_JMP (__pthread_enable_asynccancel)

>> -#  define CDISABLE	PSEUDO_JMP (__pthread_disable_asynccancel)

>> -# elif IS_IN (libc)

>> -#  define CENABLE	PSEUDO_JMP (__libc_enable_asynccancel)

>> -#  define CDISABLE	PSEUDO_JMP (__libc_disable_asynccancel)

>> -# elif IS_IN (librt)

>> -#  define CENABLE	PSEUDO_JMP (__librt_enable_asynccancel)

>> -#  define CDISABLE	PSEUDO_JMP (__librt_disable_asynccancel)

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P						\

>> +# define SINGLE_THREAD_P						\

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

>>  				   header.multiple_threads) == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P			\

>> -  PSEUDO_JMP (__m68k_read_tp);		        \

>> -  tst.l MULTIPLE_THREADS_OFFSET(%a0)

>> -# endif

>> -

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  # define SINGLE_THREAD_P (1)

>>  # define NO_CANCELLATION (1)

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P					  \

>> +#define RTLD_SINGLE_THREAD_P					  \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,			  \

>>  				   header.multiple_threads) == 0, \

>>  		    1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h

>> index dbcc2b2..7fe030b 100644

>> --- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h

>> @@ -23,136 +23,28 @@

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -# if !IS_IN (librt) || !defined(PIC)

>> -#  define AC_STACK_SIZE  16  /* space for r15, async_cancel arg and 2 temp words */

>> -#  define AC_SET_GOT /* empty */

>> -#  define AC_RESTORE_GOT /* empty */

>> -# else

>> -#  define AC_STACK_SIZE  20  /* extra 4 bytes for r20 */

>> -#  define AC_SET_GOT                                                 \

>> -    swi   r20, r1, AC_STACK_SIZE-4;                                  \

>> -    mfs   r20, rpc;                                                  \

>> -    addik r20, r20, _GLOBAL_OFFSET_TABLE_+8;

>> -#  define AC_RESTORE_GOT                                             \

>> -    lwi   r20, r1, AC_STACK_SIZE-4;

>> -# endif

>> -

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)                            \

>> -  .text;                                                             \

>> -  ENTRY (name)                                                       \

>> -    SINGLE_THREAD_P(r12);                                            \

>> -    bnei r12, L(pseudo_cancel);                                      \

>> -  .globl __##syscall_name##_nocancel;                                \

>> -  .type __##syscall_name##_nocancel,@function;                       \

>> -__##syscall_name##_nocancel:                                         \

>> -    DO_CALL (syscall_name, args);                                    \

>> -    addik r4, r0, -4095;                                             \

>> -    cmpu  r4, r4, r3;                                                \

>> -    bgei  r4, SYSCALL_ERROR_LABEL;                                   \

>> -    rtsd  r15, 8;                                                    \

>> -    nop;                                                             \

>> -  .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel;  \

>> -L(pseudo_cancel):                                                    \

>> -    addik r1, r1, -AC_STACK_SIZE;                                    \

>> -    swi   r15, r1, 0;                                                \

>> -    AC_SET_GOT                                                       \

>> -    DOCARGS_##args                                                   \

>> -    CENABLE;                                                         \

>> -    swi   r3, r1, 8;                                                 \

>> -    UNDOCARGS_##args                                                 \

>> -    DO_CALL (syscall_name, args);                                    \

>> -    swi   r3, r1, 12;                                                \

>> -    lwi   r5, r1, 8;                                                 \

>> -    CDISABLE;                                                        \

>> -    lwi   r3, r1, 12;                                                \

>> -    lwi   r15, r1, 0;                                                \

>> -    AC_RESTORE_GOT                                                   \

>> -    addik r1, r1, AC_STACK_SIZE;                                     \

>> -    addik r4, r0, -4095;                                             \

>> -    cmpu  r4, r4, r3;                                                \

>> -    bgei  r4, SYSCALL_ERROR_LABEL;                                   \

>> -    rtsd  r15, 8;                                                    \

>> -    nop;

>> -

>> -/*

>> - * Macros to save/restore syscall arguments across CENABLE

>> - * The arguments are saved into the caller's stack (original r1 + 4)

>> - */

>> -

>> -# define DOCARGS_0

>> -# define DOCARGS_1  swi   r5, r1, AC_STACK_SIZE + 4;

>> -# define DOCARGS_2  swi   r6, r1, AC_STACK_SIZE + 8; DOCARGS_1

>> -# define DOCARGS_3  swi   r7, r1, AC_STACK_SIZE + 12; DOCARGS_2

>> -# define DOCARGS_4  swi   r8, r1, AC_STACK_SIZE + 16; DOCARGS_3

>> -# define DOCARGS_5  swi   r9, r1, AC_STACK_SIZE + 20; DOCARGS_4

>> -# define DOCARGS_6  swi   r10, r1, AC_STACK_SIZE + 24; DOCARGS_5

>> -

>> -# define UNDOCARGS_0

>> -# define UNDOCARGS_1  lwi   r5, r1, AC_STACK_SIZE + 4;

>> -# define UNDOCARGS_2  UNDOCARGS_1 lwi   r6, r1, AC_STACK_SIZE + 8;

>> -# define UNDOCARGS_3  UNDOCARGS_2 lwi   r7, r1, AC_STACK_SIZE + 12;

>> -# define UNDOCARGS_4  UNDOCARGS_3 lwi   r8, r1, AC_STACK_SIZE + 16;

>> -# define UNDOCARGS_5  UNDOCARGS_4 lwi   r9, r1, AC_STACK_SIZE + 20;

>> -# define UNDOCARGS_6  UNDOCARGS_5 lwi   r10, r1, AC_STACK_SIZE + 24;

>> -

>> -# ifdef PIC

>> -#  define PSEUDO_JMP(sym)  brlid r15, sym##@PLTPC; addk r0, r0, r0

>> -# else

>> -#  define PSEUDO_JMP(sym)  brlid r15, sym; addk r0, r0, r0

>> -# endif

>> -

>>  # if IS_IN (libpthread)

>> -#  define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)

>> -#  define CDISABLE  PSEUDO_JMP (__pthread_disable_asynccancel)

>>  #  define __local_multiple_threads __pthread_multiple_threads

>>  # elif IS_IN (libc)

>> -#  define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)

>> -#  define CDISABLE  PSEUDO_JMP (__libc_disable_asynccancel)

>>  #  define __local_multiple_threads __libc_multiple_threads

>> -# elif IS_IN (librt)

>> -#  define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)

>> -#  define CDISABLE  PSEUDO_JMP (__librt_disable_asynccancel)

>> -# else

>> -#  error Unsupported library

>>  # endif

>>  

>> -

>>  # if IS_IN (libpthread) || IS_IN (libc)

>> -#  ifndef __ASSEMBLER__

>>  extern int __local_multiple_threads attribute_hidden;

>> -#   define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

>> -#  else

>> -#   if !defined PIC

>> -#    define SINGLE_THREAD_P(reg) lwi reg, r0, __local_multiple_threads;

>> -#   else

>> -#    define SINGLE_THREAD_P(reg)                                     \

>> -      mfs   reg, rpc;                                                \

>> -      addik reg, reg, _GLOBAL_OFFSET_TABLE_+8;                       \

>> -      lwi   reg, reg, __local_multiple_threads@GOT;                  \

>> -      lwi   reg, reg, 0;

>> -#   endif

>> -#  endif

>> +#  define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)

>>  # else

>> -#  ifndef __ASSEMBLER__

>> -#   define SINGLE_THREAD_P                                           \

>> +#  define SINGLE_THREAD_P                                           \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,                      \

>>                                     header.multiple_threads) == 0, 1)

>> -#  else

>> -#   define SINGLE_THREAD_P(reg)                                      \

>> -     lwi reg, r0, MULTIPLE_THREADS_OFFSET(reg)

>> -#  endif

>>  # endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  # define SINGLE_THREAD_P (1)

>>  # define NO_CANCELLATION (1)

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P                                        \

>> +#define RTLD_SINGLE_THREAD_P                                        \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,                      \

>>                                     header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h

>> deleted file mode 100644

>> index 0ed3e3d..0000000

>> --- a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h

>> +++ /dev/null

>> @@ -1,249 +0,0 @@

>> -/* Copyright (C) 2003-2017 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

>> -   <http://www.gnu.org/licenses/>.  */

>> -

>> -#include <sysdep.h>

>> -#include <sysdeps/generic/sysdep.h>

>> -#include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> -#include <sys/asm.h>

>> -

>> -/* Gas will put the initial save of $gp into the CIE, because it appears to

>> -   happen before any instructions.  So we use cfi_same_value instead of

>> -   cfi_restore.  */

>> -

>> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>> -

>> -#ifdef __PIC__

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				      \

>> -      .align 2;								      \

>> -  L(pseudo_start):							      \

>> -      cfi_startproc;							      \

>> -      cfi_adjust_cfa_offset (STKSPACE);					      \

>> -      cfi_rel_offset (gp, STKOFF_GP);					      \

>> -  99: PTR_LA t9,__syscall_error;					      \

>> -      /* manual cpreturn */						      \

>> -      REG_L gp, STKOFF_GP(sp);						      \

>> -      cfi_same_value (gp);						      \

>> -      RESTORESTK;							      \

>> -      jr t9;								      \

>> -  .type __##syscall_name##_nocancel, @function;				      \

>> -  .globl __##syscall_name##_nocancel;					      \

>> -  __##syscall_name##_nocancel:						      \

>> -    SAVESTK;								      \

>> -    .cpsetup t9, STKOFF_GP, __##syscall_name##_nocancel;		      \

>> -    cfi_rel_offset (gp, STKOFF_GP);					      \

>> -    li v0, SYS_ify(syscall_name);					      \

>> -    syscall;								      \

>> -    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \

>> -    /* manual cpreturn */						      \

>> -    REG_L gp, STKOFF_GP(sp);						      \

>> -    cfi_same_value (gp);						      \

>> -    RESTORESTK;								      \

>> -    ret;								      \

>> -    cfi_endproc;							      \

>> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

>> -  ENTRY (name)								      \

>> -    SAVESTK;								      \

>> -    .cpsetup t9, STKOFF_GP, name;					      \

>> -    cfi_rel_offset (gp, STKOFF_GP);					      \

>> -    SINGLE_THREAD_P(v1);						      \

>> -    bne zero, v1, L(pseudo_cancel);					      \

>> -    .set noreorder;							      \

>> -    li v0, SYS_ify(syscall_name);					      \

>> -    syscall;								      \

>> -    .set reorder;							      \

>> -    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \

>> -    /* manual cpreturn */						      \

>> -    REG_L gp, STKOFF_GP(sp);						      \

>> -    cfi_same_value (gp);						      \

>> -    RESTORESTK;								      \

>> -    ret;								      \

>> -  L(pseudo_cancel):							      \

>> -    cfi_adjust_cfa_offset (STKSPACE);					      \

>> -    cfi_rel_offset (gp, STKOFF_GP);					      \

>> -    REG_S ra, STKOFF_RA(sp);						      \

>> -    cfi_rel_offset (ra, STKOFF_RA);					      \

>> -    PUSHARGS_##args;			/* save syscall args */	      	      \

>> -    CENABLE;								      \

>> -    REG_S v0, STKOFF_SVMSK(sp);		/* save mask */			      \

>> -    POPARGS_##args;			/* restore syscall args */	      \

>> -    .set noreorder;							      \

>> -    li v0, SYS_ify (syscall_name);				      	      \

>> -    syscall;								      \

>> -    .set reorder;							      \

>> -    REG_S v0, STKOFF_SC_V0(sp);		/* save syscall result */             \

>> -    REG_S a3, STKOFF_SC_ERR(sp);	/* save syscall error flag */	      \

>> -    REG_L a0, STKOFF_SVMSK(sp);		/* pass mask as arg1 */		      \

>> -    CDISABLE;								      \

>> -    REG_L a3, STKOFF_SC_ERR(sp);	/* restore syscall error flag */      \

>> -    REG_L ra, STKOFF_RA(sp);		/* restore return address */	      \

>> -    REG_L v0, STKOFF_SC_V0(sp);		/* restore syscall result */          \

>> -    bne a3, zero, SYSCALL_ERROR_LABEL;					      \

>> -    /* manual cpreturn */						      \

>> -    REG_L gp, STKOFF_GP(sp);						      \

>> -    cfi_same_value (gp);						      \

>> -    RESTORESTK;								      \

>> -  L(pseudo_end):

>> -#else

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				      \

>> -      .align 2;								      \

>> -  L(pseudo_start):							      \

>> -      cfi_startproc;							      \

>> -      cfi_adjust_cfa_offset (STKSPACE);					      \

>> -  99: RESTORESTK;							      \

>> -      j __syscall_error;						      \

>> -  .type __##syscall_name##_nocancel, @function;				      \

>> -  .globl __##syscall_name##_nocancel;					      \

>> -  __##syscall_name##_nocancel:						      \

>> -    SAVESTK;								      \

>> -    li v0, SYS_ify(syscall_name);					      \

>> -    syscall;								      \

>> -    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \

>> -    RESTORESTK;								      \

>> -    ret;								      \

>> -    cfi_endproc;							      \

>> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

>> -  ENTRY (name)								      \

>> -    SAVESTK;								      \

>> -    SINGLE_THREAD_P(v1);						      \

>> -    bne zero, v1, L(pseudo_cancel);					      \

>> -    .set noreorder;							      \

>> -    li v0, SYS_ify(syscall_name);					      \

>> -    syscall;								      \

>> -    .set reorder;							      \

>> -    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \

>> -    RESTORESTK;								      \

>> -    ret;								      \

>> -  L(pseudo_cancel):							      \

>> -    cfi_adjust_cfa_offset (STKSPACE);					      \

>> -    REG_S ra, STKOFF_RA(sp);						      \

>> -    cfi_rel_offset (ra, STKOFF_RA);					      \

>> -    PUSHARGS_##args;			/* save syscall args */	      	      \

>> -    CENABLE;								      \

>> -    REG_S v0, STKOFF_SVMSK(sp);		/* save mask */			      \

>> -    POPARGS_##args;			/* restore syscall args */	      \

>> -    .set noreorder;							      \

>> -    li v0, SYS_ify (syscall_name);				      	      \

>> -    syscall;								      \

>> -    .set reorder;							      \

>> -    REG_S v0, STKOFF_SC_V0(sp);		/* save syscall result */             \

>> -    REG_S a3, STKOFF_SC_ERR(sp);	/* save syscall error flag */	      \

>> -    REG_L a0, STKOFF_SVMSK(sp);		/* pass mask as arg1 */		      \

>> -    CDISABLE;								      \

>> -    REG_L a3, STKOFF_SC_ERR(sp);	/* restore syscall error flag */      \

>> -    REG_L ra, STKOFF_RA(sp);		/* restore return address */	      \

>> -    REG_L v0, STKOFF_SC_V0(sp);		/* restore syscall result */          \

>> -    bne a3, zero, SYSCALL_ERROR_LABEL;					      \

>> -    RESTORESTK;								      \

>> -  L(pseudo_end):

>> -#endif

>> -

>> -# undef PSEUDO_END

>> -# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym

>> -

>> -# define PUSHARGS_0	/* nothing to do */

>> -# define PUSHARGS_1	PUSHARGS_0 REG_S a0, STKOFF_A0(sp); cfi_rel_offset (a0, STKOFF_A0);

>> -# define PUSHARGS_2	PUSHARGS_1 REG_S a1, STKOFF_A1(sp); cfi_rel_offset (a1, STKOFF_A1);

>> -# define PUSHARGS_3	PUSHARGS_2 REG_S a2, STKOFF_A2(sp); cfi_rel_offset (a2, STKOFF_A2);

>> -# define PUSHARGS_4	PUSHARGS_3 REG_S a3, STKOFF_A3(sp); cfi_rel_offset (a3, STKOFF_A3);

>> -# define PUSHARGS_5	PUSHARGS_4 REG_S a4, STKOFF_A4(sp); cfi_rel_offset (a3, STKOFF_A4);

>> -# define PUSHARGS_6	PUSHARGS_5 REG_S a5, STKOFF_A5(sp); cfi_rel_offset (a3, STKOFF_A5);

>> -

>> -# define POPARGS_0	/* nothing to do */

>> -# define POPARGS_1	POPARGS_0 REG_L a0, STKOFF_A0(sp);

>> -# define POPARGS_2	POPARGS_1 REG_L a1, STKOFF_A1(sp);

>> -# define POPARGS_3	POPARGS_2 REG_L a2, STKOFF_A2(sp);

>> -# define POPARGS_4	POPARGS_3 REG_L a3, STKOFF_A3(sp);

>> -# define POPARGS_5	POPARGS_4 REG_L a4, STKOFF_A4(sp);

>> -# define POPARGS_6	POPARGS_5 REG_L a5, STKOFF_A5(sp);

>> -

>> -/* Save an even number of slots.  Should be 0 if an even number of slots

>> -   are used below, or SZREG if an odd number are used.  */

>> -# ifdef __PIC__

>> -#  define STK_PAD	SZREG

>> -# else

>> -#  define STK_PAD	0

>> -# endif

>> -

>> -/* Place values that we are more likely to use later in this sequence, i.e.

>> -   closer to the SP at function entry.  If you do that, the are more

>> -   likely to already be in your d-cache.  */

>> -# define STKOFF_A5	(STK_PAD)

>> -# define STKOFF_A4	(STKOFF_A5 + SZREG)

>> -# define STKOFF_A3	(STKOFF_A4 + SZREG)

>> -# define STKOFF_A2	(STKOFF_A3 + SZREG)	/* MT and more args.  */

>> -# define STKOFF_A1	(STKOFF_A2 + SZREG)	/* MT and 2 args.  */

>> -# define STKOFF_A0	(STKOFF_A1 + SZREG)	/* MT and 1 arg.  */

>> -# define STKOFF_RA	(STKOFF_A0 + SZREG)	/* Used if MT.  */

>> -# define STKOFF_SC_V0	(STKOFF_RA + SZREG)	/* Used if MT.  */

>> -# define STKOFF_SC_ERR	(STKOFF_SC_V0 + SZREG)	/* Used if MT.  */

>> -# define STKOFF_SVMSK	(STKOFF_SC_ERR + SZREG)	/* Used if MT.  */

>> -

>> -# ifdef __PIC__

>> -#  define STKOFF_GP	(STKOFF_SVMSK + SZREG)	/* Always used.  */

>> -#  define STKSPACE	(STKOFF_GP + SZREG)

>> -# else

>> -#  define STKSPACE	(STKOFF_SVMSK + SZREG)

>> -# endif

>> -

>> -# define SAVESTK 	PTR_SUBU sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)

>> -# define RESTORESTK 	PTR_ADDU sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)

>> -

>> -# ifdef __PIC__

>> -#  define PSEUDO_JMP(sym) PTR_LA t9, sym; jalr t9

>> -# else

>> -#  define PSEUDO_JMP(sym) jal sym

>> -# endif

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	PSEUDO_JMP (__pthread_enable_asynccancel)

>> -#  define CDISABLE	PSEUDO_JMP (__pthread_disable_asynccancel)

>> -# elif IS_IN (librt)

>> -#  define CENABLE	PSEUDO_JMP (__librt_enable_asynccancel)

>> -#  define CDISABLE	PSEUDO_JMP (__librt_disable_asynccancel)

>> -# else

>> -#  define CENABLE	PSEUDO_JMP (__libc_enable_asynccancel)

>> -#  define CDISABLE	PSEUDO_JMP (__libc_disable_asynccancel)

>> -# endif

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P						\

>> -	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\

>> -					 header.multiple_threads)	\

>> -			  == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P(reg)						\

>> -	READ_THREAD_POINTER(reg);					\

>> -	lw reg, MULTIPLE_THREADS_OFFSET(reg)

>> -#endif

>> -

>> -#elif !defined __ASSEMBLER__

>> -

>> -# define SINGLE_THREAD_P 1

>> -# define NO_CANCELLATION 1

>> -

>> -#endif

>> -

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>> -				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h

>> index 0e45f00..fe9a3fc 100644

>> --- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h

>> @@ -18,173 +18,22 @@

>>  #include <sysdep.h>

>>  #include <sysdeps/generic/sysdep.h>

>>  #include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> +#include <nptl/pthreadP.h>

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -# ifdef __PIC__

>> -#  define PSEUDO_CPLOAD .cpload t9;

>> -#  define PSEUDO_ERRJMP la t9, __syscall_error; jr t9;

>> -#  define PSEUDO_SAVEGP sw gp, 32(sp); cfi_rel_offset (gp, 32);

>> -#  define PSEUDO_LOADGP lw gp, 32(sp);

>> -# else

>> -#  define PSEUDO_CPLOAD

>> -#  define PSEUDO_ERRJMP j __syscall_error;

>> -#  define PSEUDO_SAVEGP

>> -#  define PSEUDO_LOADGP

>> -# endif

>> -

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				      \

>> -      .align 2;								      \

>> -      .set nomips16;							      \

>> -  L(pseudo_start):							      \

>> -      cfi_startproc;							      \

>> -  99: PSEUDO_ERRJMP							      \

>> -  .type __##syscall_name##_nocancel, @function;				      \

>> -  .globl __##syscall_name##_nocancel;					      \

>> -  __##syscall_name##_nocancel:						      \

>> -    .set noreorder;							      \

>> -    PSEUDO_CPLOAD							      \

>> -    li v0, SYS_ify(syscall_name);					      \

>> -    syscall;								      \

>> -    .set reorder;							      \

>> -    bne a3, zero, 99b;					       		      \

>> -    ret;								      \

>> -    cfi_endproc;							      \

>> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

>> -  ENTRY (name)								      \

>> -    .set noreorder;							      \

>> -    PSEUDO_CPLOAD							      \

>> -    .set reorder;							      \

>> -    SINGLE_THREAD_P(v1);						      \

>> -    bne zero, v1, L(pseudo_cancel);					      \

>> -    .set noreorder;							      \

>> -    li v0, SYS_ify(syscall_name);					      \

>> -    syscall;								      \

>> -    .set reorder;							      \

>> -    bne a3, zero, 99b;					       		      \

>> -    ret;								      \

>> -  L(pseudo_cancel):							      \

>> -    SAVESTK_##args;						              \

>> -    sw ra, 28(sp);							      \

>> -    cfi_rel_offset (ra, 28);						      \

>> -    PSEUDO_SAVEGP							      \

>> -    PUSHARGS_##args;			/* save syscall args */	      	      \

>> -    CENABLE;								      \

>> -    PSEUDO_LOADGP							      \

>> -    sw v0, 44(sp);			/* save mask */			      \

>> -    POPARGS_##args;			/* restore syscall args */	      \

>> -    .set noreorder;							      \

>> -    li v0, SYS_ify (syscall_name);				      	      \

>> -    syscall;								      \

>> -    .set reorder;							      \

>> -    sw v0, 36(sp);			/* save syscall result */             \

>> -    sw a3, 40(sp);			/* save syscall error flag */	      \

>> -    lw a0, 44(sp);			/* pass mask as arg1 */		      \

>> -    CDISABLE;								      \

>> -    PSEUDO_LOADGP							      \

>> -    lw v0, 36(sp);			/* restore syscall result */          \

>> -    lw a3, 40(sp);			/* restore syscall error flag */      \

>> -    lw ra, 28(sp);			/* restore return address */	      \

>> -    .set noreorder;							      \

>> -    bne a3, zero, 99b;							      \

>> -     RESTORESTK;						              \

>> -  L(pseudo_end):							      \

>> -    .set reorder;

>> -

>> -# undef PSEUDO_END

>> -# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym

>> -

>> -# define PUSHARGS_0	/* nothing to do */

>> -# define PUSHARGS_1	PUSHARGS_0 sw a0, 0(sp); cfi_rel_offset (a0, 0);

>> -# define PUSHARGS_2	PUSHARGS_1 sw a1, 4(sp); cfi_rel_offset (a1, 4);

>> -# define PUSHARGS_3	PUSHARGS_2 sw a2, 8(sp); cfi_rel_offset (a2, 8);

>> -# define PUSHARGS_4	PUSHARGS_3 sw a3, 12(sp); cfi_rel_offset (a3, 12);

>> -# define PUSHARGS_5	PUSHARGS_4 /* handled by SAVESTK_## */

>> -# define PUSHARGS_6	PUSHARGS_5

>> -# define PUSHARGS_7	PUSHARGS_6

>> -

>> -# define POPARGS_0	/* nothing to do */

>> -# define POPARGS_1	POPARGS_0 lw a0, 0(sp);

>> -# define POPARGS_2	POPARGS_1 lw a1, 4(sp);

>> -# define POPARGS_3	POPARGS_2 lw a2, 8(sp);

>> -# define POPARGS_4	POPARGS_3 lw a3, 12(sp);

>> -# define POPARGS_5	POPARGS_4 /* args already in new stackframe */

>> -# define POPARGS_6	POPARGS_5

>> -# define POPARGS_7	POPARGS_6

>> -

>> -

>> -# define STKSPACE	48

>> -# define SAVESTK_0 	subu sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)

>> -# define SAVESTK_1      SAVESTK_0

>> -# define SAVESTK_2      SAVESTK_1

>> -# define SAVESTK_3      SAVESTK_2

>> -# define SAVESTK_4      SAVESTK_3

>> -# define SAVESTK_5      lw t0, 16(sp);		\

>> -			SAVESTK_0;		\

>> -			sw t0, 16(sp)

>> -

>> -# define SAVESTK_6      lw t0, 16(sp);		\

>> -			lw t1, 20(sp);		\

>> -			SAVESTK_0;		\

>> -			sw t0, 16(sp);		\

>> -			sw t1, 20(sp)

>> -

>> -# define SAVESTK_7      lw t0, 16(sp);		\

>> -			lw t1, 20(sp);		\

>> -			lw t2, 24(sp);		\

>> -			SAVESTK_0;		\

>> -			sw t0, 16(sp);		\

>> -			sw t1, 20(sp);		\

>> -			sw t2, 24(sp)

>> -

>> -# define RESTORESTK 	addu sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)

>> -

>> -

>> -# ifdef __PIC__

>> -/* We use jalr rather than jal.  This means that the assembler will not

>> -   automatically restore $gp (in case libc has multiple GOTs) so we must

>> -   do it manually - which we have to do anyway since we don't use .cprestore.

>> -   It also shuts up the assembler warning about not using .cprestore.  */

>> -#  define PSEUDO_JMP(sym) la t9, sym; jalr t9;

>> -# else

>> -#  define PSEUDO_JMP(sym) jal sym;

>> -# endif

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	PSEUDO_JMP (__pthread_enable_asynccancel)

>> -#  define CDISABLE	PSEUDO_JMP (__pthread_disable_asynccancel)

>> -# elif IS_IN (librt)

>> -#  define CENABLE	PSEUDO_JMP (__librt_enable_asynccancel)

>> -#  define CDISABLE	PSEUDO_JMP (__librt_disable_asynccancel)

>> -# else

>> -#  define CENABLE	PSEUDO_JMP (__libc_enable_asynccancel)

>> -#  define CDISABLE	PSEUDO_JMP (__libc_disable_asynccancel)

>> -# endif

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P						\

>> +# define SINGLE_THREAD_P						\

>>  	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\

>>  					 header.multiple_threads)	\

>>  			  == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P(reg)						\

>> -	READ_THREAD_POINTER(reg);					\

>> -	lw reg, MULTIPLE_THREADS_OFFSET(reg)

>> -#endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  # define SINGLE_THREAD_P 1

>>  # define NO_CANCELLATION 1

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> +#define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h

>> index 47b92d9..7647363 100644

>> --- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h

>> @@ -18,124 +18,22 @@

>>  

>>  #include <sysdep.h>

>>  #include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> +#include <nptl/pthreadP.h>

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				      \

>> -  .type __##syscall_name##_nocancel, @function;				      \

>> -  .globl __##syscall_name##_nocancel;					      \

>> -  __##syscall_name##_nocancel:						      \

>> -    cfi_startproc;                                                            \

>> -    DO_CALL (syscall_name, args);                                             \

>> -    bne r7, zero, SYSCALL_ERROR_LABEL;                                        \

>> -    ret;                                                                      \

>> -    cfi_endproc;                                                              \

>> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

>> -  ENTRY (name)								      \

>> -    SINGLE_THREAD_P(r2);						      \

>> -    bne r2, zero, pseudo_cancel;					      \

>> -    DO_CALL (syscall_name, args);					      \

>> -    bne r7, zero, SYSCALL_ERROR_LABEL;                                        \

>> -    ret;								      \

>> -  pseudo_cancel:							      \

>> -    SAVESTK_##args;                 /* save syscall args and adjust stack */  \

>> -    SAVEREG(ra, 0);                     /* save return address */             \

>> -    SAVEREG(r22, 4);                    /* save GOT pointer */                \

>> -    nextpc r22;                                                               \

>> -1:  movhi r2, %hiadj(_gp_got - 1b);					      \

>> -    addi r2, r2, %lo(_gp_got - 1b);					      \

>> -    add r22, r22, r2;                                                         \

>> -    CENABLE;                                                                  \

>> -    callr r3;                                                                 \

>> -    stw r2, 8(sp);                      /* save mask */                       \

>> -    LOADARGS_##args;                                                          \

>> -    movi r2, SYS_ify(syscall_name);                                           \

>> -    trap;                                                                     \

>> -    stw r2, 12(sp);                     /* save syscall result */             \

>> -    stw r7, 16(sp);                     /* save syscall error flag */         \

>> -    ldw r4, 8(sp);                      /* pass mask as argument 1 */         \

>> -    CDISABLE;                                                                 \

>> -    callr r3;                                                                 \

>> -    ldw r7, 16(sp);                     /* restore syscall error flag */      \

>> -    ldw r2, 12(sp);                     /* restore syscall result */          \

>> -    ldw ra, 0(sp);                      /* restore return address */          \

>> -    ldw r22, 4(sp);                     /* restore GOT pointer */             \

>> -    RESTORESTK_##args;                                                        \

>> -    bne r7, zero, SYSCALL_ERROR_LABEL;

>> -

>> -

>> -# undef PSEUDO_END

>> -# define PSEUDO_END(sym) \

>> -  SYSCALL_ERROR_HANDLER \

>> -  END (sym)

>> -

>> -#define SAVEREG(REG, LOC) stw REG, LOC(sp); cfi_rel_offset (REG, LOC)

>> -#define SAVESTK(X) subi sp, sp, X; cfi_adjust_cfa_offset(X)

>> -#define SAVESTK_0 SAVESTK(20)

>> -#define SAVEARG_1 SAVEREG(r4, 20)

>> -#define SAVESTK_1 SAVESTK(24); SAVEARG_1

>> -#define SAVEARG_2 SAVEREG(r5, 24); SAVEARG_1

>> -#define SAVESTK_2 SAVESTK(28); SAVEARG_2

>> -#define SAVEARG_3 SAVEREG(r6, 28); SAVEARG_2

>> -#define SAVESTK_3 SAVESTK(32); SAVEARG_3

>> -#define SAVEARG_4 SAVEREG(r7, 32); SAVEARG_3

>> -#define SAVESTK_4 SAVESTK(36); SAVEARG_4

>> -#define SAVESTK_5 SAVESTK_4

>> -#define SAVESTK_6 SAVESTK_5

>> -

>> -#define LOADARGS_0

>> -#define LOADARGS_1 ldw r4, 20(sp)

>> -#define LOADARGS_2 LOADARGS_1; ldw r5, 24(sp)

>> -#define LOADARGS_3 LOADARGS_2; ldw r6, 28(sp)

>> -#define LOADARGS_4 LOADARGS_3; ldw r7, 32(sp)

>> -#define LOADARGS_5 LOADARGS_4; ldw r8, 36(sp)

>> -#define LOADARGS_6 LOADARGS_5; ldw r9, 40(sp)

>> -

>> -#define RESTORESTK(X) addi sp, sp, X; cfi_adjust_cfa_offset(-X)

>> -#define RESTORESTK_0 RESTORESTK(20)

>> -#define RESTORESTK_1 RESTORESTK(24)

>> -#define RESTORESTK_2 RESTORESTK(28)

>> -#define RESTORESTK_3 RESTORESTK(32)

>> -#define RESTORESTK_4 RESTORESTK(36)

>> -#define RESTORESTK_5 RESTORESTK(36)

>> -#define RESTORESTK_6 RESTORESTK(36)

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	ldw r3, %call(__pthread_enable_asynccancel)(r22)

>> -#  define CDISABLE	ldw r3, %call(__pthread_disable_asynccancel)(r22)

>> -# elif IS_IN (librt)

>> -#  define CENABLE	ldw r3, %call(__librt_enable_asynccancel)(r22)

>> -#  define CDISABLE	ldw r3, %call(__librt_disable_asynccancel)(r22)

>> -# elif IS_IN (libc)

>> -#  define CENABLE	ldw r3, %call(__libc_enable_asynccancel)(r22)

>> -#  define CDISABLE	ldw r3, %call(__libc_disable_asynccancel)(r22)

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P						\

>> +# define SINGLE_THREAD_P						\

>>  	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\

>>  					 header.multiple_threads)	\

>>  			  == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P(reg)						\

>> -	ldw reg, MULTIPLE_THREADS_OFFSET(r23)

>> -#endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  # define SINGLE_THREAD_P 1

>>  # define NO_CANCELLATION 1

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> +#define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h

>> deleted file mode 100644

>> index 35d3f05..0000000

>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h

>> +++ /dev/null

>> @@ -1,118 +0,0 @@

>> -/* Cancellable system call stubs.  Linux/PowerPC version.

>> -   Copyright (C) 2003-2017 Free Software Foundation, Inc.

>> -   This file is part of the GNU C Library.

>> -   Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.

>> -

>> -   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

>> -   <http://www.gnu.org/licenses/>.  */

>> -

>> -#include <sysdep.h>

>> -#include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> -

>> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>> -

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				\

>> -  .section ".text";							\

>> -  ENTRY (name)								\

>> -    SINGLE_THREAD_P;							\

>> -    bne- .Lpseudo_cancel;						\

>> -  .type __##syscall_name##_nocancel,@function;				\

>> -  .globl __##syscall_name##_nocancel;					\

>> -  __##syscall_name##_nocancel:						\

>> -    DO_CALL (SYS_ify (syscall_name));					\

>> -    PSEUDO_RET;								\

>> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	\

>> -  .Lpseudo_cancel:							\

>> -    stwu 1,-48(1);							\

>> -    cfi_adjust_cfa_offset (48);						\

>> -    mflr 9;								\

>> -    stw 9,52(1);							\

>> -    cfi_offset (lr, 4);							\

>> -    DOCARGS_##args;	/* save syscall args around CENABLE.  */	\

>> -    CENABLE;								\

>> -    stw 3,16(1);	/* store CENABLE return value (MASK).  */	\

>> -    UNDOCARGS_##args;	/* restore syscall args.  */			\

>> -    DO_CALL (SYS_ify (syscall_name));					\

>> -    mfcr 0;		/* save CR/R3 around CDISABLE.  */		\

>> -    stw 3,8(1);								\

>> -    stw 0,12(1);							\

>> -    lwz 3,16(1);	/* pass MASK to CDISABLE.  */			\

>> -    CDISABLE;								\

>> -    lwz 4,52(1);							\

>> -    lwz 0,12(1);	/* restore CR/R3. */				\

>> -    lwz 3,8(1);								\

>> -    mtlr 4;								\

>> -    mtcr 0;								\

>> -    addi 1,1,48;

>> -

>> -# define DOCARGS_0

>> -# define UNDOCARGS_0

>> -

>> -# define DOCARGS_1	stw 3,20(1); DOCARGS_0

>> -# define UNDOCARGS_1	lwz 3,20(1); UNDOCARGS_0

>> -

>> -# define DOCARGS_2	stw 4,24(1); DOCARGS_1

>> -# define UNDOCARGS_2	lwz 4,24(1); UNDOCARGS_1

>> -

>> -# define DOCARGS_3	stw 5,28(1); DOCARGS_2

>> -# define UNDOCARGS_3	lwz 5,28(1); UNDOCARGS_2

>> -

>> -# define DOCARGS_4	stw 6,32(1); DOCARGS_3

>> -# define UNDOCARGS_4	lwz 6,32(1); UNDOCARGS_3

>> -

>> -# define DOCARGS_5	stw 7,36(1); DOCARGS_4

>> -# define UNDOCARGS_5	lwz 7,36(1); UNDOCARGS_4

>> -

>> -# define DOCARGS_6	stw 8,40(1); DOCARGS_5

>> -# define UNDOCARGS_6	lwz 8,40(1); UNDOCARGS_5

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	bl __pthread_enable_asynccancel@local

>> -#  define CDISABLE	bl __pthread_disable_asynccancel@local

>> -# elif IS_IN (libc)

>> -#  define CENABLE	bl __libc_enable_asynccancel@local

>> -#  define CDISABLE	bl __libc_disable_asynccancel@local

>> -# elif IS_IN (librt)

>> -#  define CENABLE	bl __librt_enable_asynccancel@local

>> -#  define CDISABLE	bl __librt_disable_asynccancel@local

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P						\

>> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

>> -				   header.multiple_threads) == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P						\

>> -  lwz 10,MULTIPLE_THREADS_OFFSET(2);					\

>> -  cmpwi 10,0

>> -# endif

>> -

>> -#elif !defined __ASSEMBLER__

>> -

>> -# define SINGLE_THREAD_P (1)

>> -# define NO_CANCELLATION 1

>> -

>> -#endif

>> -

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>> -				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h

>> deleted file mode 100644

>> index cad13da..0000000

>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h

>> +++ /dev/null

>> @@ -1,147 +0,0 @@

>> -/* Cancellable system call stubs.  Linux/PowerPC64 version.

>> -   Copyright (C) 2003-2017 Free Software Foundation, Inc.

>> -   This file is part of the GNU C Library.

>> -   Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.

>> -

>> -   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

>> -   <http://www.gnu.org/licenses/>.  */

>> -

>> -#include <sysdep.h>

>> -#include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> -

>> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>> -

>> -# define DASHDASHPFX(str) __##str

>> -

>> -#if _CALL_ELF == 2

>> -#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16+48)

>> -#define CANCEL_PARM_SAVE (FRAME_MIN_SIZE+16)

>> -#else

>> -#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16)

>> -#define CANCEL_PARM_SAVE (CANCEL_FRAMESIZE+FRAME_PARM_SAVE)

>> -#endif

>> -

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				\

>> -  .section ".text";							\

>> -  ENTRY (name)								\

>> -    SINGLE_THREAD_P;							\

>> -    bne- .Lpseudo_cancel;						\

>> -  .type DASHDASHPFX(syscall_name##_nocancel),@function;			\

>> -  .globl DASHDASHPFX(syscall_name##_nocancel);				\

>> -  DASHDASHPFX(syscall_name##_nocancel):					\

>> -    DO_CALL (SYS_ify (syscall_name));					\

>> -    PSEUDO_RET;								\

>> -  .size DASHDASHPFX(syscall_name##_nocancel),.-DASHDASHPFX(syscall_name##_nocancel);	\

>> -  .Lpseudo_cancel:							\

>> -    stdu 1,-CANCEL_FRAMESIZE(1);					\

>> -    cfi_adjust_cfa_offset (CANCEL_FRAMESIZE);				\

>> -    mflr 9;								\

>> -    std  9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1);				\

>> -    cfi_offset (lr, FRAME_LR_SAVE);					\

>> -    DOCARGS_##args;	/* save syscall args around CENABLE.  */	\

>> -    CENABLE;								\

>> -    std  3,FRAME_MIN_SIZE(1); /* store CENABLE return value (MASK).  */	\

>> -    UNDOCARGS_##args;	/* restore syscall args.  */			\

>> -    DO_CALL (SYS_ify (syscall_name));					\

>> -    mfcr 0;		/* save CR/R3 around CDISABLE.  */		\

>> -    std  3,FRAME_MIN_SIZE+8(1);						\

>> -    std  0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1);				\

>> -    cfi_offset (cr, FRAME_CR_SAVE);					\

>> -    ld   3,FRAME_MIN_SIZE(1); /* pass MASK to CDISABLE.  */		\

>> -    CDISABLE;								\

>> -    ld   9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1);				\

>> -    ld   0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); /* restore CR/R3. */	\

>> -    ld   3,FRAME_MIN_SIZE+8(1);						\

>> -    mtlr 9;								\

>> -    mtcr 0;								\

>> -    addi 1,1,CANCEL_FRAMESIZE;						\

>> -    cfi_adjust_cfa_offset (-CANCEL_FRAMESIZE);				\

>> -    cfi_restore (lr);							\

>> -    cfi_restore (cr)

>> -

>> -# define DOCARGS_0

>> -# define UNDOCARGS_0

>> -

>> -# define DOCARGS_1	std 3,CANCEL_PARM_SAVE(1); DOCARGS_0

>> -# define UNDOCARGS_1	ld 3,CANCEL_PARM_SAVE(1); UNDOCARGS_0

>> -

>> -# define DOCARGS_2	std 4,CANCEL_PARM_SAVE+8(1); DOCARGS_1

>> -# define UNDOCARGS_2	ld 4,CANCEL_PARM_SAVE+8(1); UNDOCARGS_1

>> -

>> -# define DOCARGS_3	std 5,CANCEL_PARM_SAVE+16(1); DOCARGS_2

>> -# define UNDOCARGS_3	ld 5,CANCEL_PARM_SAVE+16(1); UNDOCARGS_2

>> -

>> -# define DOCARGS_4	std 6,CANCEL_PARM_SAVE+24(1); DOCARGS_3

>> -# define UNDOCARGS_4	ld 6,CANCEL_PARM_SAVE+24(1); UNDOCARGS_3

>> -

>> -# define DOCARGS_5	std 7,CANCEL_PARM_SAVE+32(1); DOCARGS_4

>> -# define UNDOCARGS_5	ld 7,CANCEL_PARM_SAVE+32(1); UNDOCARGS_4

>> -

>> -# define DOCARGS_6	std 8,CANCEL_PARM_SAVE+40(1); DOCARGS_5

>> -# define UNDOCARGS_6	ld 8,CANCEL_PARM_SAVE+40(1); UNDOCARGS_5

>> -

>> -# if IS_IN (libpthread)

>> -#  ifdef SHARED

>> -#   define CENABLE	bl JUMPTARGET(__pthread_enable_asynccancel)

>> -#   define CDISABLE	bl JUMPTARGET(__pthread_disable_asynccancel)

>> -#  else

>> -#   define CENABLE	bl JUMPTARGET(__pthread_enable_asynccancel); nop

>> -#   define CDISABLE	bl JUMPTARGET(__pthread_disable_asynccancel); nop

>> -#  endif

>> -# elif IS_IN (libc)

>> -#  ifdef SHARED

>> -#   define CENABLE	bl JUMPTARGET(__libc_enable_asynccancel)

>> -#   define CDISABLE	bl JUMPTARGET(__libc_disable_asynccancel)

>> -#  else

>> -#   define CENABLE	bl JUMPTARGET(__libc_enable_asynccancel); nop

>> -#   define CDISABLE	bl JUMPTARGET(__libc_disable_asynccancel); nop

>> -#  endif

>> -# elif IS_IN (librt)

>> -#  ifdef SHARED

>> -#   define CENABLE	bl JUMPTARGET(__librt_enable_asynccancel)

>> -#   define CDISABLE	bl JUMPTARGET(__librt_disable_asynccancel)

>> -#  else

>> -#   define CENABLE	bl JUMPTARGET(__librt_enable_asynccancel); nop

>> -#   define CDISABLE	bl JUMPTARGET(__librt_disable_asynccancel); nop

>> -#  endif

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P						\

>> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

>> -				   header.multiple_threads) == 0, 1)

>> -# else

>> -#   define SINGLE_THREAD_P						\

>> -  lwz   10,MULTIPLE_THREADS_OFFSET(13);				\

>> -  cmpwi 10,0

>> -# endif

>> -

>> -#elif !defined __ASSEMBLER__

>> -

>> -# define SINGLE_THREAD_P (1)

>> -# define NO_CANCELLATION 1

>> -

>> -#endif

>> -

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>> -				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h

>> new file mode 100644

>> index 0000000..85af880

>> --- /dev/null

>> +++ b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h

>> @@ -0,0 +1,38 @@

>> +/* Cancellable system call stubs.  Linux/PowerPC version.

>> +   Copyright (C) 2015 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

>> +   <http://www.gnu.org/licenses/>.  */

>> +

>> +#include <sysdep.h>

>> +#include <tls.h>

>> +#include <nptl/pthreadP.h>

>> +

>> +#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>> +

>> +# define SINGLE_THREAD_P						\

>> +  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\

>> +				   header.multiple_threads) == 0, 1)

>> +

>> +#else

>> +

>> +# define SINGLE_THREAD_P (1)

>> +# define NO_CANCELLATION 1

>> +

>> +#endif

>> +

>> +#define RTLD_SINGLE_THREAD_P \

>> +  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>> +				   header.multiple_threads) == 0, 1)

>> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h

>> index b1e80bc..82763b7 100644

>> --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h

>> @@ -24,116 +24,17 @@

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				      \

>> -	.text;								      \

>> -L(pseudo_cancel):							      \

>> -	cfi_startproc;							      \

>> -	STM_##args							      \

>> -	stm	%r12,%r15,48(%r15);					      \

>> -	cfi_offset (%r15, -36);						      \

>> -	cfi_offset (%r14, -40);						      \

>> -	cfi_offset (%r13, -44);						      \

>> -	cfi_offset (%r12, -48);						      \

>> -	lr	%r14,%r15;						      \

>> -	ahi	%r15,-96;						      \

>> -	cfi_adjust_cfa_offset (96);					      \

>> -	st	%r14,0(%r15);						      \

>> -	basr    %r13,0;							      \

>> -0:	l	%r1,1f-0b(%r13);					      \

>> -	bas	%r14,0(%r1,%r13);					      \

>> -	lr	%r0,%r2;						      \

>> -	LM_##args							      \

>> -	.if SYS_ify (syscall_name) < 256;				      \

>> -	svc SYS_ify (syscall_name);					      \

>> -	.else;								      \

>> -	lhi %r1,SYS_ify (syscall_name);					      \

>> -	svc 0;								      \

>> -	.endif;								      \

>> -	LR7_##args							      \

>> -	l	%r1,2f-0b(%r13);					      \

>> -	lr	%r12,%r2;						      \

>> -	lr	%r2,%r0;						      \

>> -	bas	%r14,0(%r1,%r13);					      \

>> -	lr	%r2,%r12;						      \

>> -	lm	%r12,%r15,48+96(%r15);					      \

>> -	cfi_endproc;							      \

>> -	j	L(pseudo_check);					      \

>> -1:	.long	CENABLE-0b;						      \

>> -2:	.long	CDISABLE-0b;						      \

>> -ENTRY(name)								      \

>> -	SINGLE_THREAD_P(%r1)						      \

>> -	jne	L(pseudo_cancel);					      \

>> -.type	__##syscall_name##_nocancel,@function;				      \

>> -.globl	__##syscall_name##_nocancel;					      \

>> -__##syscall_name##_nocancel:						      \

>> -	DO_CALL(syscall_name, args);					      \

>> -L(pseudo_check):							      \

>> -	lhi	%r4,-4095;						      \

>> -	clr	%r2,%r4;						      \

>> -	jnl	SYSCALL_ERROR_LABEL;					      \

>> -.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

>> -L(pseudo_end):

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	__pthread_enable_asynccancel

>> -#  define CDISABLE	__pthread_disable_asynccancel

>> -# elif IS_IN (libc)

>> -#  define CENABLE	__libc_enable_asynccancel

>> -#  define CDISABLE	__libc_disable_asynccancel

>> -# elif IS_IN (librt)

>> -#  define CENABLE	__librt_enable_asynccancel

>> -#  define CDISABLE	__librt_disable_asynccancel

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>> -#define STM_0		/* Nothing */

>> -#define STM_1		st %r2,8(%r15);

>> -#define STM_2		stm %r2,%r3,8(%r15);

>> -#define STM_3		stm %r2,%r4,8(%r15);

>> -#define STM_4		stm %r2,%r5,8(%r15);

>> -#define STM_5		stm %r2,%r5,8(%r15);

>> -#define STM_6		stm %r2,%r7,8(%r15);

>> -

>> -#define LM_0		/* Nothing */

>> -#define LM_1		l %r2,8+96(%r15);

>> -#define LM_2		lm %r2,%r3,8+96(%r15);

>> -#define LM_3		lm %r2,%r4,8+96(%r15);

>> -#define LM_4		lm %r2,%r5,8+96(%r15);

>> -#define LM_5		lm %r2,%r5,8+96(%r15);

>> -#define LM_6		lm %r2,%r5,8+96(%r15); \

>> -			cfi_offset (%r7, -68); \

>> -			l %r7,96+96(%r15);

>> -

>> -#define LR7_0		/* Nothing */

>> -#define LR7_1		/* Nothing */

>> -#define LR7_2		/* Nothing */

>> -#define LR7_3		/* Nothing */

>> -#define LR7_4		/* Nothing */

>> -#define LR7_5		/* Nothing */

>> -#define LR7_6		l %r7,28+96(%r15); \

>> -			cfi_restore (%r7);

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P \

>> +# define SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \

>>  				   header.multiple_threads) == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P(reg) \

>> -	ear	reg,%a0;						      \

>> -	icm	reg,15,MULTIPLE_THREADS_OFFSET(reg);

>> -# endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  # define SINGLE_THREAD_P (1)

>>  # define NO_CANCELLATION 1

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> +#define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h

>> index 9b2c546..952d2af 100644

>> --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h

>> @@ -18,135 +18,36 @@

>>  

>>  #include <sysdep.h>

>>  #include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> +#include <nptl/pthreadP.h>

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				      \

>> -	.text;								      \

>> -L(pseudo_cancel):							      \

>> -	cfi_startproc;							      \

>> -	STM_##args							      \

>> -	stmg	%r13,%r15,104(%r15);					      \

>> -	cfi_offset (%r15,-40);						      \

>> -	cfi_offset (%r14,-48);						      \

>> -	cfi_offset (%r13,-56);						      \

>> -	lgr	%r14,%r15;						      \

>> -	aghi	%r15,-160;						      \

>> -	cfi_adjust_cfa_offset (160);					      \

>> -	stg	%r14,0(%r15);						      \

>> -	brasl	%r14,CENABLE;						      \

>> -	lgr	%r0,%r2;						      \

>> -	LM_##args							      \

>> -	.if SYS_ify (syscall_name) < 256;				      \

>> -	svc SYS_ify (syscall_name);					      \

>> -	.else;								      \

>> -	lghi %r1,SYS_ify (syscall_name);				      \

>> -	svc 0;								      \

>> -	.endif;								      \

>> -	LR7_##args							      \

>> -	lgr	%r13,%r2;						      \

>> -	lgr	%r2,%r0;						      \

>> -	brasl	%r14,CDISABLE;						      \

>> -	lgr	%r2,%r13;						      \

>> -	lmg	%r13,%r15,104+160(%r15);				      \

>> -	cfi_endproc;							      \

>> -	j	L(pseudo_check);					      \

>> -ENTRY(name)								      \

>> -	SINGLE_THREAD_P							      \

>> -	jne	L(pseudo_cancel);					      \

>> -.type	__##syscall_name##_nocancel,@function;				      \

>> -.globl	__##syscall_name##_nocancel;					      \

>> -__##syscall_name##_nocancel:						      \

>> -	DO_CALL(syscall_name, args);					      \

>> -L(pseudo_check):							      \

>> -	lghi	%r4,-4095;						      \

>> -	clgr	%r2,%r4;						      \

>> -	jgnl	SYSCALL_ERROR_LABEL;					      \

>> -.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

>> -L(pseudo_end):

>> -

>>  # if IS_IN (libpthread)

>> -#  define CENABLE	__pthread_enable_asynccancel

>> -#  define CDISABLE	__pthread_disable_asynccancel

>>  #  define __local_multiple_threads	__pthread_multiple_threads

>>  # elif IS_IN (libc)

>> -#  define CENABLE	__libc_enable_asynccancel

>> -#  define CDISABLE	__libc_disable_asynccancel

>>  #  define __local_multiple_threads	__libc_multiple_threads

>> -# elif IS_IN (librt)

>> -#  define CENABLE	__librt_enable_asynccancel

>> -#  define CDISABLE	__librt_disable_asynccancel

>> -# else

>> -#  error Unsupported library

>>  # endif

>>  

>> -#define STM_0		/* Nothing */

>> -#define STM_1		stg %r2,16(%r15);

>> -#define STM_2		stmg %r2,%r3,16(%r15);

>> -#define STM_3		stmg %r2,%r4,16(%r15);

>> -#define STM_4		stmg %r2,%r5,16(%r15);

>> -#define STM_5		stmg %r2,%r5,16(%r15);

>> -#define STM_6		stmg %r2,%r7,16(%r15);

>> -

>> -#define LM_0		/* Nothing */

>> -#define LM_1		lg %r2,16+160(%r15);

>> -#define LM_2		lmg %r2,%r3,16+160(%r15);

>> -#define LM_3		lmg %r2,%r4,16+160(%r15);

>> -#define LM_4		lmg %r2,%r5,16+160(%r15);

>> -#define LM_5		lmg %r2,%r5,16+160(%r15);

>> -#define LM_6		lmg %r2,%r5,16+160(%r15); \

>> -			cfi_offset (%r7, -104); \

>> -			lg %r7,160+160(%r15);

>> -

>> -#define LR7_0		/* Nothing */

>> -#define LR7_1		/* Nothing */

>> -#define LR7_2		/* Nothing */

>> -#define LR7_3		/* Nothing */

>> -#define LR7_4		/* Nothing */

>> -#define LR7_5		/* Nothing */

>> -#define LR7_6		lg %r7,56+160(%r15); \

>> -			cfi_restore (%r7);

>> -

>>  # if IS_IN (libpthread) || IS_IN (libc)

>> -#  ifndef __ASSEMBLER__

>>  extern int __local_multiple_threads attribute_hidden;

>> -#   define SINGLE_THREAD_P \

>> +#  define SINGLE_THREAD_P \

>>    __builtin_expect (__local_multiple_threads == 0, 1)

>> -#  else

>> -#   define SINGLE_THREAD_P \

>> -	larl	%r1,__local_multiple_threads;				      \

>> -	icm	%r0,15,0(%r1);

>> -#  endif

>>  

>>  # else

>>  

>> -#  ifndef __ASSEMBLER__

>> -#   define SINGLE_THREAD_P \

>> +#  define SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \

>>  				   header.multiple_threads) == 0, 1)

>> -#  else

>> -#   define SINGLE_THREAD_P \

>> -	ear	%r1,%a0;						      \

>> -	sllg	%r1,%r1,32;						      \

>> -	ear	%r1,%a1;						      \

>> -	icm	%r1,15,MULTIPLE_THREADS_OFFSET(%r1);

>> -#  endif

>>  

>>  # endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  # define SINGLE_THREAD_P (1)

>>  # define NO_CANCELLATION 1

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> +#define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h

>> index 5645cad..1ea501b 100644

>> --- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h

>> @@ -23,147 +23,17 @@

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -# define _IMM12 #-12

>> -# define _IMM16 #-16

>> -# define _IMP16 #16

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args) \

>> -  .text; \

>> -  ENTRY (name); \

>> -  .Lpseudo_start: \

>> -    SINGLE_THREAD_P; \

>> -    bf .Lpseudo_cancel; \

>> -    .type __##syscall_name##_nocancel,@function; \

>> -    .globl __##syscall_name##_nocancel; \

>> -    __##syscall_name##_nocancel: \

>> -    DO_CALL (syscall_name, args); \

>> -    mov r0,r1; \

>> -    mov _IMM12,r2; \

>> -    shad r2,r1; \

>> -    not r1,r1; \

>> -    tst r1,r1; \

>> -    bt .Lsyscall_error; \

>> -    bra .Lpseudo_end; \

>> -     nop; \

>> -    .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \

>> - .Lpseudo_cancel: \

>> -    sts.l pr,@-r15; \

>> -    cfi_adjust_cfa_offset (4); \

>> -    cfi_rel_offset (pr, 0); \

>> -    add _IMM16,r15; \

>> -    cfi_adjust_cfa_offset (16); \

>> -    SAVE_ARGS_##args; \

>> -    CENABLE; \

>> -    LOAD_ARGS_##args; \

>> -    add _IMP16,r15; \

>> -    cfi_adjust_cfa_offset (-16); \

>> -    lds.l @r15+,pr; \

>> -    cfi_adjust_cfa_offset (-4); \

>> -    cfi_restore (pr); \

>> -    DO_CALL(syscall_name, args); \

>> -    SYSCALL_INST_PAD; \

>> -    sts.l pr,@-r15; \

>> -    cfi_adjust_cfa_offset (4); \

>> -    cfi_rel_offset (pr, 0); \

>> -    mov.l r0,@-r15; \

>> -    cfi_adjust_cfa_offset (4); \

>> -    cfi_rel_offset (r0, 0); \

>> -    CDISABLE; \

>> -    mov.l @r15+,r0; \

>> -    cfi_adjust_cfa_offset (-4); \

>> -    cfi_restore (r0); \

>> -    lds.l @r15+,pr; \

>> -    cfi_adjust_cfa_offset (-4); \

>> -    cfi_restore (pr); \

>> -    mov r0,r1; \

>> -    mov _IMM12,r2; \

>> -    shad r2,r1; \

>> -    not r1,r1; \

>> -    tst r1,r1; \

>> -    bf .Lpseudo_end; \

>> - .Lsyscall_error: \

>> -    SYSCALL_ERROR_HANDLER; \

>> - .Lpseudo_end:

>> -

>> -# undef PSEUDO_END

>> -# define PSEUDO_END(sym) \

>> -  END (sym)

>> -

>> -# define SAVE_ARGS_0	/* Nothing.  */

>> -# define SAVE_ARGS_1	SAVE_ARGS_0; mov.l r4,@(0,r15); cfi_offset (r4,-4)

>> -# define SAVE_ARGS_2	SAVE_ARGS_1; mov.l r5,@(4,r15); cfi_offset (r5,-8)

>> -# define SAVE_ARGS_3	SAVE_ARGS_2; mov.l r6,@(8,r15); cfi_offset (r6,-12)

>> -# define SAVE_ARGS_4	SAVE_ARGS_3; mov.l r7,@(12,r15); cfi_offset (r7,-16)

>> -# define SAVE_ARGS_5	SAVE_ARGS_4

>> -# define SAVE_ARGS_6	SAVE_ARGS_5

>> -

>> -# define LOAD_ARGS_0	/* Nothing.  */

>> -# define LOAD_ARGS_1	LOAD_ARGS_0; mov.l @(0,r15),r4; cfi_restore (r4)

>> -# define LOAD_ARGS_2	LOAD_ARGS_1; mov.l @(4,r15),r5; cfi_restore (r5)

>> -# define LOAD_ARGS_3	LOAD_ARGS_2; mov.l @(8,r15),r6; cfi_restore (r6)

>> -# define LOAD_ARGS_4	LOAD_ARGS_3; mov.l @(12,r15),r7; cfi_restore (r7)

>> -# define LOAD_ARGS_5	LOAD_ARGS_4

>> -# define LOAD_ARGS_6	LOAD_ARGS_5

>> -

>> -# if IS_IN (libpthread)

>> -#  define __local_enable_asynccancel	__pthread_enable_asynccancel

>> -#  define __local_disable_asynccancel	__pthread_disable_asynccancel

>> -# elif IS_IN (libc)

>> -#  define __local_enable_asynccancel	__libc_enable_asynccancel

>> -#  define __local_disable_asynccancel	__libc_disable_asynccancel

>> -# elif IS_IN (librt)

>> -#  define __local_enable_asynccancel	__librt_enable_asynccancel

>> -#  define __local_disable_asynccancel	__librt_disable_asynccancel

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>> -# define CENABLE \

>> -	mov.l 1f,r0; \

>> -	bsrf r0; \

>> -	 nop; \

>> -     0: bra 2f; \

>> -	 mov r0,r2; \

>> -	.align 2; \

>> -     1: .long __local_enable_asynccancel - 0b; \

>> -     2:

>> -

>> -# define CDISABLE \

>> -	mov.l 1f,r0; \

>> -	bsrf r0; \

>> -	 mov r2,r4; \

>> -     0: bra 2f; \

>> -	 nop; \

>> -	.align 2; \

>> -     1: .long __local_disable_asynccancel - 0b; \

>> -     2:

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P \

>> +# define SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P \

>> -	stc gbr,r0; \

>> -	mov.w 0f,r1; \

>> -	sub r1,r0; \

>> -	mov.l @(MULTIPLE_THREADS_OFFSET,r0),r0; \

>> -	bra 1f; \

>> -	 tst r0,r0; \

>> -     0: .word TLS_PRE_TCB_SIZE; \

>> -     1:

>> -

>> -# endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  # define SINGLE_THREAD_P (1)

>>  # define NO_CANCELLATION 1

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> +#define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h

>> deleted file mode 100644

>> index c513212..0000000

>> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h

>> +++ /dev/null

>> @@ -1,111 +0,0 @@

>> -/* Copyright (C) 2002-2017 Free Software Foundation, Inc.

>> -   This file is part of the GNU C Library.

>> -   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.

>> -

>> -   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

>> -   <http://www.gnu.org/licenses/>.  */

>> -

>> -#include <sysdep.h>

>> -#include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> -

>> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>> -

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)	\

>> -	.text;					\

>> -	.globl		__syscall_error;	\

>> -ENTRY(name)					\

>> -	ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\

>> -	cmp %g1, 0;				\

>> -	bne 1f;					\

>> -.type	__##syscall_name##_nocancel,@function;	\

>> -.globl	__##syscall_name##_nocancel;		\

>> -__##syscall_name##_nocancel:			\

>> -	 mov SYS_ify(syscall_name), %g1;	\

>> -	ta 0x10;				\

>> -	bcc 8f;					\

>> -	 mov %o7, %g1;				\

>> -	call __syscall_error;			\

>> -	 mov %g1, %o7;				\

>> -8:	jmpl %o7 + 8, %g0;			\

>> -	 nop;					\

>> -.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\

>> -1:	save %sp, -96, %sp;			\

>> -	cfi_def_cfa_register(%fp);		\

>> -	cfi_window_save;			\

>> -	cfi_register(%o7, %i7);			\

>> -	CENABLE;				\

>> -	 nop;					\

>> -	mov %o0, %l0;				\

>> -	COPY_ARGS_##args			\

>> -	mov SYS_ify(syscall_name), %g1;		\

>> -	ta 0x10;				\

>> -	bcc 1f;					\

>> -	 mov %o0, %l1;				\

>> -	CDISABLE;				\

>> -	 mov %l0, %o0;				\

>> -	call __syscall_error;			\

>> -	 mov %l1, %o0;				\

>> -	b 2f;					\

>> -	 mov -1, %l1;				\

>> -1:	CDISABLE;				\

>> -	 mov %l0, %o0;				\

>> -2:	jmpl %i7 + 8, %g0;			\

>> -	 restore %g0, %l1, %o0;

>> -

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	call __pthread_enable_asynccancel

>> -#  define CDISABLE	call __pthread_disable_asynccancel

>> -# elif IS_IN (libc)

>> -#  define CENABLE	call __libc_enable_asynccancel

>> -#  define CDISABLE	call __libc_disable_asynccancel

>> -# elif IS_IN (librt)

>> -#  define CENABLE	call __librt_enable_asynccancel

>> -#  define CDISABLE	call __librt_disable_asynccancel

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>> -#define COPY_ARGS_0	/* Nothing */

>> -#define COPY_ARGS_1	COPY_ARGS_0 mov %i0, %o0;

>> -#define COPY_ARGS_2	COPY_ARGS_1 mov %i1, %o1;

>> -#define COPY_ARGS_3	COPY_ARGS_2 mov %i2, %o2;

>> -#define COPY_ARGS_4	COPY_ARGS_3 mov %i3, %o3;

>> -#define COPY_ARGS_5	COPY_ARGS_4 mov %i4, %o4;

>> -#define COPY_ARGS_6	COPY_ARGS_5 mov %i5, %o5;

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P \

>> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \

>> -				   header.multiple_threads) == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1

>> -# endif

>> -

>> -#elif !defined __ASSEMBLER__

>> -

>> -# define SINGLE_THREAD_P (1)

>> -# define NO_CANCELLATION 1

>> -

>> -#endif

>> -

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>> -				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h

>> deleted file mode 100644

>> index 45fbd73..0000000

>> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h

>> +++ /dev/null

>> @@ -1,109 +0,0 @@

>> -/* Copyright (C) 2002-2017 Free Software Foundation, Inc.

>> -   This file is part of the GNU C Library.

>> -   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.

>> -

>> -   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

>> -   <http://www.gnu.org/licenses/>.  */

>> -

>> -#include <sysdep.h>

>> -#include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> -

>> -#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>> -

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)	\

>> -	.text;					\

>> -	.globl		__syscall_error;	\

>> -ENTRY(name)					\

>> -	ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\

>> -	brnz,pn %g1, 1f;			\

>> -.type	__##syscall_name##_nocancel,@function;	\

>> -.globl	__##syscall_name##_nocancel;		\

>> -__##syscall_name##_nocancel:			\

>> -	 mov SYS_ify(syscall_name), %g1;	\

>> -	ta 0x6d;				\

>> -	bcc,pt %xcc, 8f;			\

>> -	 mov %o7, %g1;				\

>> -	call __syscall_error;			\

>> -	 mov %g1, %o7;				\

>> -8:	jmpl %o7 + 8, %g0;			\

>> -	 nop;					\

>> -.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\

>> -1:	save %sp, -192, %sp;			\

>> -	cfi_def_cfa_register(%fp);		\

>> -	cfi_window_save;			\

>> -	cfi_register(%o7, %i7);			\

>> -	CENABLE;				\

>> -	 nop;					\

>> -	mov %o0, %l0;				\

>> -	COPY_ARGS_##args			\

>> -	mov SYS_ify(syscall_name), %g1;		\

>> -	ta 0x6d;				\

>> -	bcc,pt %xcc, 1f;			\

>> -	 mov %o0, %l1;				\

>> -	CDISABLE;				\

>> -	 mov %l0, %o0;				\

>> -	call __syscall_error;			\

>> -	 mov %l1, %o0;				\

>> -	ba,pt %xcc, 2f;				\

>> -	 mov -1, %l1;				\

>> -1:	CDISABLE;				\

>> -	 mov %l0, %o0;				\

>> -2:	jmpl %i7 + 8, %g0;			\

>> -	 restore %g0, %l1, %o0;

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	call __pthread_enable_asynccancel

>> -#  define CDISABLE	call __pthread_disable_asynccancel

>> -# elif IS_IN (libc)

>> -#  define CENABLE	call __libc_enable_asynccancel

>> -#  define CDISABLE	call __libc_disable_asynccancel

>> -# elif IS_IN (librt)

>> -#  define CENABLE	call __librt_enable_asynccancel

>> -#  define CDISABLE	call __librt_disable_asynccancel

>> -# else

>> -#  error Unsupported library

>> -# endif

>> -

>> -#define COPY_ARGS_0	/* Nothing */

>> -#define COPY_ARGS_1	COPY_ARGS_0 mov %i0, %o0;

>> -#define COPY_ARGS_2	COPY_ARGS_1 mov %i1, %o1;

>> -#define COPY_ARGS_3	COPY_ARGS_2 mov %i2, %o2;

>> -#define COPY_ARGS_4	COPY_ARGS_3 mov %i3, %o3;

>> -#define COPY_ARGS_5	COPY_ARGS_4 mov %i4, %o4;

>> -#define COPY_ARGS_6	COPY_ARGS_5 mov %i5, %o5;

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P \

>> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \

>> -				   header.multiple_threads) == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1

>> -# endif

>> -

>> -#elif !defined __ASSEMBLER__

>> -

>> -# define SINGLE_THREAD_P (1)

>> -# define NO_CANCELLATION 1

>> -

>> -#endif

>> -

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> -  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>> -				   header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h

>> new file mode 100644

>> index 0000000..61bfa33

>> --- /dev/null

>> +++ b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h

>> @@ -0,0 +1,38 @@

>> +/* Copyright (C) 2002-2015 Free Software Foundation, Inc.

>> +   This file is part of the GNU C Library.

>> +   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.

>> +

>> +   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

>> +   <http://www.gnu.org/licenses/>.  */

>> +

>> +#include <sysdep.h>

>> +#include <tls.h>

>> +#include <nptl/pthreadP.h>

>> +

>> +#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>> +

>> +# define SINGLE_THREAD_P \

>> +  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \

>> +				   header.multiple_threads) == 0, 1)

>> +

>> +#else

>> +

>> +# define SINGLE_THREAD_P (1)

>> +# define NO_CANCELLATION 1

>> +

>> +#endif

>> +

>> +#define RTLD_SINGLE_THREAD_P \

>> +  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>> +				   header.multiple_threads) == 0, 1)

>> diff --git a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h

>> index 092a90c..c8994db 100644

>> --- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h

>> @@ -18,137 +18,22 @@

>>  

>>  #include <sysdep.h>

>>  #include <tls.h>

>> -#ifndef __ASSEMBLER__

>> -# include <nptl/pthreadP.h>

>> -#endif

>> +#include <nptl/pthreadP.h>

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -/* Allow hacking in some extra code if desired. */

>> -#ifndef PSEUDO_EXTRA

>> -#define PSEUDO_EXTRA

>> -#endif

>> -

>> -#undef PSEUDO

>> -#define PSEUDO(name, syscall_name, args)				      \

>> -  ENTRY(__##syscall_name##_nocancel);					      \

>> -    PSEUDO_EXTRA							      \

>> -    moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name);			      \

>> -    swint1;								      \

>> -    BNEZ r1, 0f;							      \

>> -    jrp lr;								      \

>> -  END(__##syscall_name##_nocancel);					      \

>> -  ENTRY (name)								      \

>> -    SINGLE_THREAD_P(r11);						      \

>> -    BEQZ r11, L(pseudo_cancel);						      \

>> -    PSEUDO_EXTRA							      \

>> -    moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name);			      \

>> -    swint1;								      \

>> -    BNEZ r1, 0f;							      \

>> -    jrp lr;								      \

>> -  L(pseudo_cancel):							      \

>> -    {									      \

>> -     move r11, sp;							      \

>> -     ST sp, lr;								      \

>> -     ADDI_PTR sp, sp, -STKSPACE;					      \

>> -    };									      \

>> -    cfi_offset (lr, 0);							      \

>> -    cfi_def_cfa_offset (STKSPACE);					      \

>> -    {									      \

>> -     ADDI_PTR r12, sp, REGSIZE;						      \

>> -     ADDI_PTR r13, sp, 2 * REGSIZE;	/* set up for PUSHARGS_0 */	      \

>> -    };									      \

>> -    ST r12, r11;							      \

>> -    PUSHARGS_##args			/* save syscall args */	      	      \

>> -    CENABLE;								      \

>> -    ADDI_PTR r12, sp, 10 * REGSIZE;					      \

>> -    {									      \

>> -     ST r12, r0;			/* save mask */			      \

>> -     ADDI_PTR r13, sp, 2 * REGSIZE;	/* set up for POPARGS_0 */	      \

>> -    };									      \

>> -    POPARGS_##args			/* restore syscall args */	      \

>> -    PSEUDO_EXTRA							      \

>> -    moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name);			      \

>> -    swint1;								      \

>> -    ADDI_PTR r12, sp, 12 * REGSIZE;					      \

>> -    {									      \

>> -     ST r12, r1;			/* save syscall result */             \

>> -     ADDI_PTR r12, sp, 11 * REGSIZE;					      \

>> -    };									      \

>> -    {									      \

>> -     ST r12, r0;			                                      \

>> -     ADDI_PTR r13, sp, 10 * REGSIZE;					      \

>> -    };									      \

>> -    LD r0, r13;				/* pass mask as arg1 */		      \

>> -    CDISABLE;								      \

>> -    {									      \

>> -     ADDI_PTR lr, sp, STKSPACE;						      \

>> -     ADDI_PTR r0, sp, 11 * REGSIZE;					      \

>> -    };									      \

>> -    {									      \

>> -     LD r0, r0;								      \

>> -     ADDI_PTR r1, sp, 12 * REGSIZE;					      \

>> -    };									      \

>> -    LD r1, r1;								      \

>> -    {									      \

>> -     LD lr, lr;								      \

>> -     ADDI_PTR sp, sp, STKSPACE;						      \

>> -    };									      \

>> -    cfi_def_cfa_offset (0);						      \

>> -    BNEZ r1, 0f

>> -

>> -# define PUSHARGS_0 /* nothing to do */

>> -# define PUSHARGS_1 PUSHARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; ST r13, r0 };

>> -# define PUSHARGS_2 PUSHARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; ST r14, r1 };

>> -# define PUSHARGS_3 PUSHARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; ST r13, r2 };

>> -# define PUSHARGS_4 PUSHARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; ST r14, r3 };

>> -# define PUSHARGS_5 PUSHARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; ST r13, r4 };

>> -# define PUSHARGS_6 PUSHARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; ST r14, r5 };

>> -# define PUSHARGS_7 PUSHARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; ST r13, r6 };

>> -

>> -# define POPARGS_0  /* nothing to do */

>> -# define POPARGS_1  POPARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; LD r0, r13 };

>> -# define POPARGS_2  POPARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; LD r1, r14 };

>> -# define POPARGS_3  POPARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; LD r2, r13 };

>> -# define POPARGS_4  POPARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; LD r3, r14 };

>> -# define POPARGS_5  POPARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; LD r4, r13 };

>> -# define POPARGS_6  POPARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; LD r5, r14 };

>> -# define POPARGS_7  POPARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; LD r6, r13 };

>> -

>> -# define STKSPACE	(13 * REGSIZE)

>> -

>> -# if IS_IN (libpthread)

>> -#  define CENABLE	jal __pthread_enable_asynccancel

>> -#  define CDISABLE	jal __pthread_disable_asynccancel

>> -# elif IS_IN (librt)

>> -#  define CENABLE	jal __librt_enable_asynccancel

>> -#  define CDISABLE	jal __librt_disable_asynccancel

>> -# else

>> -#  define CENABLE	jal __libc_enable_asynccancel

>> -#  define CDISABLE	jal __libc_disable_asynccancel

>> -# endif

>> -

>> -# ifndef __ASSEMBLER__

>> -#  define SINGLE_THREAD_P						\

>> +# define SINGLE_THREAD_P						\

>>  	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\

>>  					 header.multiple_threads)	\

>>  			  == 0, 1)

>> -# else

>> -#  define SINGLE_THREAD_P(reg)						\

>> -  ADDLI_PTR reg, tp, MULTIPLE_THREADS_OFFSET;                           \

>> -  LD reg, reg;                                                          \

>> -  CMPEQI reg, reg, 0

>> -#endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  # define SINGLE_THREAD_P 1

>>  # define NO_CANCELLATION 1

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P                                           \

>> +#define RTLD_SINGLE_THREAD_P                                           \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF,                         \

>>                                     header.multiple_threads) == 0, 1)

>> -#endif

>> diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h

>> index 6598010..0979bde 100644

>> --- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h

>> +++ b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h

>> @@ -24,86 +24,32 @@

>>  

>>  #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)

>>  

>> -/* The code to disable cancellation depends on the fact that the called

>> -   functions are special.  They don't modify registers other than %rax

>> -   and %r11 if they return.  Therefore we don't have to preserve other

>> -   registers around these calls.  */

>> -# undef PSEUDO

>> -# define PSEUDO(name, syscall_name, args)				      \

>> -  .text;								      \

>> -  ENTRY (name)								      \

>> -    SINGLE_THREAD_P;							      \

>> -    jne L(pseudo_cancel);						      \

>> -  .type __##syscall_name##_nocancel,@function;				      \

>> -  .globl __##syscall_name##_nocancel;					      \

>> -  __##syscall_name##_nocancel:						      \

>> -    DO_CALL (syscall_name, args);					      \

>> -    cmpq $-4095, %rax;							      \

>> -    jae SYSCALL_ERROR_LABEL;						      \

>> -    ret;								      \

>> -  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \

>> -  L(pseudo_cancel):							      \

>> -    /* We always have to align the stack before calling a function.  */	      \

>> -    subq $8, %rsp; cfi_adjust_cfa_offset (8);				      \

>> -    CENABLE								      \

>> -    /* The return value from CENABLE is argument for CDISABLE.  */	      \

>> -    movq %rax, (%rsp);							      \

>> -    DO_CALL (syscall_name, args);					      \

>> -    movq (%rsp), %rdi;							      \

>> -    /* Save %rax since it's the error code from the syscall.  */	      \

>> -    movq %rax, %rdx;							      \

>> -    CDISABLE								      \

>> -    movq %rdx, %rax;							      \

>> -    addq $8,%rsp; cfi_adjust_cfa_offset (-8);				      \

>> -    cmpq $-4095, %rax;							      \

>> -    jae SYSCALL_ERROR_LABEL

>> -

>> -

>>  # if IS_IN (libpthread)

>> -#  define CENABLE	call __pthread_enable_asynccancel;

>> -#  define CDISABLE	call __pthread_disable_asynccancel;

>>  #  define __local_multiple_threads __pthread_multiple_threads

>>  # elif IS_IN (libc)

>> -#  define CENABLE	call __libc_enable_asynccancel;

>> -#  define CDISABLE	call __libc_disable_asynccancel;

>>  #  define __local_multiple_threads __libc_multiple_threads

>>  # elif IS_IN (librt)

>> -#  define CENABLE	call __librt_enable_asynccancel;

>> -#  define CDISABLE	call __librt_disable_asynccancel;

>>  # else

>>  #  error Unsupported library

>>  # endif

>>  

>>  # if IS_IN (libpthread) || IS_IN (libc)

>> -#  ifndef __ASSEMBLER__

>>  extern int __local_multiple_threads attribute_hidden;

>> -#   define SINGLE_THREAD_P \

>> +#  define SINGLE_THREAD_P \

>>    __builtin_expect (__local_multiple_threads == 0, 1)

>> -#  else

>> -#   define SINGLE_THREAD_P cmpl $0, __local_multiple_threads(%rip)

>> -#  endif

>> -

>>  # else

>> -

>> -#  ifndef __ASSEMBLER__

>> -#   define SINGLE_THREAD_P \

>> +#  define SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#  else

>> -#   define SINGLE_THREAD_P cmpl $0, %fs:MULTIPLE_THREADS_OFFSET

>> -#  endif

>> -

>>  # endif

>>  

>> -#elif !defined __ASSEMBLER__

>> +#else

>>  

>>  # define SINGLE_THREAD_P (1)

>>  # define NO_CANCELLATION 1

>>  

>>  #endif

>>  

>> -#ifndef __ASSEMBLER__

>> -# define RTLD_SINGLE_THREAD_P \

>> +#define RTLD_SINGLE_THREAD_P \

>>    __builtin_expect (THREAD_GETMEM (THREAD_SELF, \

>>  				   header.multiple_threads) == 0, 1)

>> -#endif

>>
diff mbox series

Patch

diff --git a/ChangeLog b/ChangeLog
index d0a78a1..a84bd55 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,178 @@ 
 2017-08-02  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
+	* sysdeps/unix/make-syscalls.sh: Remove cancellable tagging for
+	syscall definitions.
+	* sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Remove
+	definition.
+	* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (__local_enable_asynccancel): Likewise.
+	[IS_IN (libpthread)] (__local_disable_asynccancel): Likewise.
+	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.
+	[IS_IN (libc)] (__local_enable_asynccancel): Likewise.
+	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.
+	[IS_IN (librt)] (__local_disable_asynccancel): Likewise.
+	(CENABLE): Likewise.
+	(CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h (PSEUDO): Remove
+	defintion.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h (PSEUDO):
+	Remove definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	(SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Remove file.
+	* sysdeps/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Remove file.
+	* sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: New file.
+	* sysdeps/unix/sysv/linux/tile/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h (PSEUDO): Remove
+	definition.
+	(PSEUDO_END): Likewise.
+	[IS_IN (libpthread)] (CENABLE): Likewise.
+	[IS_IN (libpthread)] (CDISABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (libc)] (CENABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[IS_IN (librt)] (CDISABLE): Likewise.
+	[__ASSEMBLER__] (SINGLE_THREAD_P): Likewise.
+
 	* sysdeps/unix/sysv/linux/x86_64/syscalls.list (pread64): Remove.
 	(preadv64): Likewise.
 	(pwrite64(: Likewise.
diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
index 123553c..042cfac 100644
--- a/sysdeps/unix/make-syscalls.sh
+++ b/sysdeps/unix/make-syscalls.sh
@@ -12,7 +12,6 @@ 
 #
 # Syscall Signature Prefixes:
 #
-# C: cancellable (i.e., this syscall is a cancellation point)
 # E: errno and return value are not set by the call
 # V: errno is not set, but errno or zero (success) is returned from the call
 #
@@ -171,11 +170,9 @@  while read file srcfile caller syscall args strong weak; do
   ;;
   esac
 
-  cancellable=0
   noerrno=0
   errval=0
   case $args in
-  C*) cancellable=1; args=`echo $args | sed 's/C:\?//'`;;
   E*) noerrno=1; args=`echo $args | sed 's/E:\?//'`;;
   V*) errval=1; args=`echo $args | sed 's/V:\?//'`;;
   esac
@@ -258,7 +255,6 @@  while read file srcfile caller syscall args strong weak; do
 	(echo '#define SYSCALL_NAME $syscall'; \\
 	 echo '#define SYSCALL_NARGS $nargs'; \\
 	 echo '#define SYSCALL_SYMBOL $strong'; \\
-	 echo '#define SYSCALL_CANCELLABLE $cancellable'; \\
 	 echo '#define SYSCALL_NOERRNO $noerrno'; \\
 	 echo '#define SYSCALL_ERRVAL $errval'; \\
 	 echo '#include <syscall-template.S>'; \\"
diff --git a/sysdeps/unix/syscall-template.S b/sysdeps/unix/syscall-template.S
index 4993ff5..d4584a9 100644
--- a/sysdeps/unix/syscall-template.S
+++ b/sysdeps/unix/syscall-template.S
@@ -27,7 +27,6 @@ 
 	SYSCALL_NAME		syscall name
 	SYSCALL_NARGS		number of arguments this call takes
 	SYSCALL_SYMBOL		primary symbol name
-	SYSCALL_CANCELLABLE	1 if the call is a cancelation point
 	SYSCALL_NOERRNO		1 to define a no-errno version (see below)
 	SYSCALL_ERRVAL		1 to define an error-value version (see below)
 
@@ -41,11 +40,7 @@ 
    instructions long and the untrained eye might not distinguish them from
    some compiled code that inexplicably lacks source line information.  */
 
-#if SYSCALL_CANCELLABLE
-# include <sysdep-cancel.h>
-#else
-# include <sysdep.h>
-#endif
+#include <sysdep.h>
 
 /* This indirection is needed so that SYMBOL gets macro-expanded.  */
 #define syscall_hidden_def(SYMBOL)		hidden_def (SYMBOL)
diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
index 4be2259..d39b6a2 100644
--- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
@@ -24,102 +24,23 @@ 
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				\
-	.section ".text";						\
-ENTRY (__##syscall_name##_nocancel);					\
-.Lpseudo_nocancel:							\
-	DO_CALL (syscall_name, args);					\
-.Lpseudo_finish:							\
-	cmn	x0, 4095;						\
-	b.cs	.Lsyscall_error;					\
-	.subsection 2;							\
-	.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
-ENTRY (name);								\
-	SINGLE_THREAD_P(16);						\
-	cbz	w16, .Lpseudo_nocancel;					\
-	/* Setup common stack frame no matter the number of args.	\
-	   Also save the first arg, since it's basically free.  */	\
-	stp	x30, x0, [sp, -64]!;					\
-	cfi_adjust_cfa_offset (64);					\
-	cfi_rel_offset (x30, 0);					\
-	DOCARGS_##args;		/* save syscall args around CENABLE.  */ \
-	CENABLE;							\
-	mov	x16, x0;	/* save mask around syscall.  */	\
-	UNDOCARGS_##args;	/* restore syscall args.  */		\
-	DO_CALL (syscall_name, args);					\
-	str	x0, [sp, 8];	/* save result around CDISABLE.  */	\
-	mov	x0, x16;	/* restore mask for CDISABLE.  */	\
-	CDISABLE;							\
-	/* Break down the stack frame, restoring result at once.  */	\
-	ldp	x30, x0, [sp], 64;					\
-	cfi_adjust_cfa_offset (-64);					\
-	cfi_restore (x30);						\
-	b	.Lpseudo_finish;					\
-	cfi_endproc;							\
-	.size	name, .-name;						\
-	.previous
-
-# undef PSEUDO_END
-# define PSEUDO_END(name)						\
-	SYSCALL_ERROR_HANDLER;						\
-	cfi_endproc
-
-# define DOCARGS_0
-# define DOCARGS_1
-# define DOCARGS_2	str x1, [sp, 16]
-# define DOCARGS_3	stp x1, x2, [sp, 16]
-# define DOCARGS_4	DOCARGS_3; str x3, [sp, 32]
-# define DOCARGS_5	DOCARGS_3; stp x3, x4, [sp, 32]
-# define DOCARGS_6	DOCARGS_5; str x5, [sp, 48]
-
-# define UNDOCARGS_0
-# define UNDOCARGS_1	ldr x0, [sp, 8]
-# define UNDOCARGS_2	ldp x0, x1, [sp, 8]
-# define UNDOCARGS_3	UNDOCARGS_1; ldp x1, x2, [sp, 16]
-# define UNDOCARGS_4	UNDOCARGS_2; ldp x2, x3, [sp, 24]
-# define UNDOCARGS_5	UNDOCARGS_3; ldp x3, x4, [sp, 32]
-# define UNDOCARGS_6	UNDOCARGS_4; ldp x4, x5, [sp, 40]
-
 # if IS_IN (libpthread)
-#  define CENABLE	bl __pthread_enable_asynccancel
-#  define CDISABLE	bl __pthread_disable_asynccancel
 #  define __local_multiple_threads __pthread_multiple_threads
 # elif IS_IN (libc)
-#  define CENABLE	bl __libc_enable_asynccancel
-#  define CDISABLE	bl __libc_disable_asynccancel
 #  define __local_multiple_threads __libc_multiple_threads
-# elif IS_IN (librt)
-#  define CENABLE	bl __librt_enable_asynccancel
-#  define CDISABLE	bl __librt_disable_asynccancel
-# else
-#  error Unsupported library
 # endif
 
 # if IS_IN (libpthread) || IS_IN (libc)
-#  ifndef __ASSEMBLER__
 extern int __local_multiple_threads attribute_hidden;
-#   define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
-#  else
-#   define SINGLE_THREAD_P(R)						\
-	adrp	x##R, __local_multiple_threads;				\
-	ldr	w##R, [x##R, :lo12:__local_multiple_threads]
-#  endif
+#  define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
 # else
 /*  There is no __local_multiple_threads for librt, so use the TCB.  */
-#  ifndef __ASSEMBLER__
-#   define SINGLE_THREAD_P						\
+#  define SINGLE_THREAD_P						\
   __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\
 				   header.multiple_threads) == 0, 1)
-#  else
-#   define SINGLE_THREAD_P(R)						\
-	mrs     x##R, tpidr_el0;					\
-	sub	x##R, x##R, PTHREAD_SIZEOF;				\
-	ldr	w##R, [x##R, PTHREAD_MULTIPLE_THREADS_OFFSET]
-#  endif
 # endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 /* For rtld, et cetera.  */
 # define SINGLE_THREAD_P 1
@@ -127,8 +48,6 @@  extern int __local_multiple_threads attribute_hidden;
 
 #endif
 
-#ifndef __ASSEMBLER__
 # define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
index 66d6962..366cf31 100644
--- a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
@@ -17,147 +17,24 @@ 
 
 #include <sysdep.h>
 #include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-/* ??? Assumes that nothing comes between PSEUDO and PSEUDO_END
-   besides "ret".  */
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)			\
-	.globl	__##syscall_name##_nocancel;			\
-	.type	__##syscall_name##_nocancel, @function;		\
-	.usepv	__##syscall_name##_nocancel, std;		\
-	.align 4;						\
-	cfi_startproc;						\
-__LABEL(__##syscall_name##_nocancel)				\
-	ldgp	gp, 0(pv);					\
-	PSEUDO_PROF;						\
-__LABEL($pseudo_nocancel)					\
-	PSEUDO_PREPARE_ARGS;					\
-	lda	v0, SYS_ify(syscall_name);			\
-	call_pal PAL_callsys;					\
-	bne	a3, SYSCALL_ERROR_LABEL;			\
-__LABEL($pseudo_ret)						\
-	.subsection 2;						\
-	.size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \
-	.globl	name;						\
-	.type	name, @function;				\
-	.usepv	name, std;					\
-	.align 4;						\
-	cfi_startproc;						\
-__LABEL(name)							\
-	ldgp	gp, 0(pv);					\
-	PSEUDO_PROF;						\
-	SINGLE_THREAD_P(t0);					\
-	beq	t0, $pseudo_nocancel;				\
-	subq	sp, 64, sp;					\
-	cfi_def_cfa_offset(64);					\
-	stq	ra, 0(sp);					\
-	cfi_offset(ra, -64);					\
-	SAVE_ARGS_##args;					\
-	CENABLE;						\
-	LOAD_ARGS_##args;					\
-	/* Save the CENABLE return value in RA.  That register	\
-	   is preserved across syscall and the real return 	\
-	   address is saved on the stack.  */			\
-	mov	v0, ra;						\
-	lda	v0, SYS_ify(syscall_name);			\
-	call_pal PAL_callsys;					\
-	stq	v0, 8(sp);					\
-	mov	ra, a0;						\
-	bne	a3, $multi_error;				\
-	CDISABLE;						\
-	ldq	ra, 0(sp);					\
-	ldq	v0, 8(sp);					\
-	addq	sp, 64, sp;					\
-	cfi_remember_state;					\
-	cfi_restore(ra);					\
-	cfi_def_cfa_offset(0);					\
-	ret;							\
-	cfi_restore_state;					\
-__LABEL($multi_error)						\
-	CDISABLE;						\
-	ldq	ra, 0(sp);					\
-	ldq	v0, 8(sp);					\
-	addq	sp, 64, sp;					\
-	cfi_restore(ra);					\
-	cfi_def_cfa_offset(0);					\
-	SYSCALL_ERROR_FALLTHRU;					\
-	SYSCALL_ERROR_HANDLER;					\
-	cfi_endproc;						\
-	.previous
-
-# undef PSEUDO_END
-# define PSEUDO_END(sym)					\
-	cfi_endproc;						\
-	.subsection 2;						\
-	.size sym, .-sym
-
-# define SAVE_ARGS_0	/* Nothing.  */
-# define SAVE_ARGS_1	SAVE_ARGS_0; stq a0, 8(sp)
-# define SAVE_ARGS_2	SAVE_ARGS_1; stq a1, 16(sp)
-# define SAVE_ARGS_3	SAVE_ARGS_2; stq a2, 24(sp)
-# define SAVE_ARGS_4	SAVE_ARGS_3; stq a3, 32(sp)
-# define SAVE_ARGS_5	SAVE_ARGS_4; stq a4, 40(sp)
-# define SAVE_ARGS_6	SAVE_ARGS_5; stq a5, 48(sp)
-
-# define LOAD_ARGS_0	/* Nothing.  */
-# define LOAD_ARGS_1	LOAD_ARGS_0; ldq a0, 8(sp)
-# define LOAD_ARGS_2	LOAD_ARGS_1; ldq a1, 16(sp)
-# define LOAD_ARGS_3	LOAD_ARGS_2; ldq a2, 24(sp)
-# define LOAD_ARGS_4	LOAD_ARGS_3; ldq a3, 32(sp)
-# define LOAD_ARGS_5	LOAD_ARGS_4; ldq a4, 40(sp)
-# define LOAD_ARGS_6	LOAD_ARGS_5; ldq a5, 48(sp)
-
 # if IS_IN (libpthread)
-#  define __local_enable_asynccancel	__pthread_enable_asynccancel
-#  define __local_disable_asynccancel	__pthread_disable_asynccancel
 #  define __local_multiple_threads	__pthread_multiple_threads
 # elif IS_IN (libc)
-#  define __local_enable_asynccancel	__libc_enable_asynccancel
-#  define __local_disable_asynccancel	__libc_disable_asynccancel
 #  define __local_multiple_threads	__libc_multiple_threads
-# elif IS_IN (librt)
-#  define __local_enable_asynccancel	__librt_enable_asynccancel
-#  define __local_disable_asynccancel	__librt_disable_asynccancel
-# else
-#  error Unsupported library
-# endif
-
-# ifdef PIC
-#  define CENABLE	bsr ra, __local_enable_asynccancel !samegp
-#  define CDISABLE	bsr ra, __local_disable_asynccancel !samegp
-# else
-#  define CENABLE	jsr ra, __local_enable_asynccancel; ldgp ra, 0(gp)
-#  define CDISABLE	jsr ra, __local_disable_asynccancel; ldgp ra, 0(gp)
 # endif
 
 # if IS_IN (libpthread) || IS_IN (libc)
-#  ifndef __ASSEMBLER__
 extern int __local_multiple_threads attribute_hidden;
-#   define SINGLE_THREAD_P \
+#  define SINGLE_THREAD_P \
 	__builtin_expect (__local_multiple_threads == 0, 1)
-#  elif defined(PIC)
-#   define SINGLE_THREAD_P(reg)  ldl reg, __local_multiple_threads(gp) !gprel
-#  else
-#   define SINGLE_THREAD_P(reg)					\
-	ldah	reg, __local_multiple_threads(gp) !gprelhigh;	\
-	ldl	reg, __local_multiple_threads(reg) !gprellow
-#  endif
 # else
-#  ifndef __ASSEMBLER__
-#   define SINGLE_THREAD_P \
+#  define SINGLE_THREAD_P \
 	__builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#  else
-#   define SINGLE_THREAD_P(reg)					\
-	call_pal PAL_rduniq;					\
-	ldl reg, MULTIPLE_THREADS_OFFSET($0)
-#  endif
 # endif
 
 #else
@@ -167,8 +44,6 @@  extern int __local_multiple_threads attribute_hidden;
 
 #endif
 
-#ifndef __ASSEMBLER__
 # define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
index de12acf..738e749 100644
--- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
@@ -23,210 +23,23 @@ 
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-/* NOTE: We do mark syscalls with unwind annotations, for the benefit of
-   cancellation; but they're really only accurate at the point of the
-   syscall.  The ARM unwind directives are not rich enough without adding
-   a custom personality function.  */
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				\
-	.text;								\
-  ENTRY (__##syscall_name##_nocancel);					\
-	CFI_SECTIONS;							\
-	DO_CALL (syscall_name, args);					\
-	cmn	r0, $4096;						\
-	PSEUDO_RET;							\
-  END (__##syscall_name##_nocancel);					\
-  ENTRY (name);								\
-	SINGLE_THREAD_P;						\
-	DOARGS_##args;							\
-	bne .Lpseudo_cancel;						\
-	cfi_remember_state;						\
-	ldr	r7, =SYS_ify (syscall_name);				\
-	swi	0x0;							\
-	UNDOARGS_##args;						\
-	cmn	r0, $4096;						\
-	PSEUDO_RET;							\
-	cfi_restore_state;						\
-  .Lpseudo_cancel:							\
-	.fnstart;	/* matched by the .fnend in UNDOARGS below.  */	\
-	DOCARGS_##args;	/* save syscall args etc. around CENABLE.  */	\
-	CENABLE;							\
-	mov ip, r0;		/* put mask in safe place.  */		\
-	UNDOCARGS_##args;	/* restore syscall args.  */		\
-	ldr	r7, =SYS_ify (syscall_name);				\
-	swi	0x0;		/* do the call.  */			\
-	mov	r7, r0;		/* save syscall return value.  */	\
-	mov	r0, ip;		/* get mask back.  */			\
-	CDISABLE;							\
-	mov	r0, r7;		/* retrieve return value.  */		\
-	RESTORE_LR_##args;						\
-	UNDOARGS_##args;						\
-	cmn	r0, $4096
-
-/* DOARGS pushes eight bytes on the stack for five arguments, twelve bytes for
-   six arguments, and four bytes for fewer.  In order to preserve doubleword
-   alignment, sometimes we must save an extra register.  */
-
-# define RESTART_UNWIND				\
-	.fnend;					\
-	.fnstart;				\
-	.save	{r7};				\
-	.save	{lr}
-
-# define DOCARGS_0				\
-	.save {r7};				\
-	push	{lr};				\
-	cfi_adjust_cfa_offset (4);		\
-	cfi_rel_offset (lr, 0);			\
-	.save	{lr}
-# define UNDOCARGS_0
-# define RESTORE_LR_0				\
-	pop	{lr};				\
-	cfi_adjust_cfa_offset (-4);		\
-	cfi_restore (lr)
-
-# define DOCARGS_1				\
-	.save	{r7};				\
-	push	{r0, r1, lr};			\
-	cfi_adjust_cfa_offset (12);		\
-	cfi_rel_offset (lr, 8);			\
-	.save	{lr};				\
-	.pad	#8
-# define UNDOCARGS_1				\
-	ldr r0, [sp], #8;			\
-	cfi_adjust_cfa_offset (-8);		\
-	RESTART_UNWIND
-# define RESTORE_LR_1				\
-	RESTORE_LR_0
-
-# define DOCARGS_2				\
-	.save	{r7};				\
-	push	{r0, r1, lr};			\
-	cfi_adjust_cfa_offset (12);		\
-	cfi_rel_offset (lr, 8);			\
-	.save	{lr};				\
-	.pad	#8
-# define UNDOCARGS_2				\
-	pop	{r0, r1};			\
-	cfi_adjust_cfa_offset (-8);		\
-	RESTART_UNWIND
-# define RESTORE_LR_2				\
-	RESTORE_LR_0
-
-# define DOCARGS_3				\
-	.save	{r7};				\
-	push	{r0, r1, r2, r3, lr};		\
-	cfi_adjust_cfa_offset (20);		\
-	cfi_rel_offset (lr, 16);		\
-	.save	{lr};				\
-	.pad	#16
-# define UNDOCARGS_3				\
-	pop	{r0, r1, r2, r3};		\
-	cfi_adjust_cfa_offset (-16);		\
-	RESTART_UNWIND
-# define RESTORE_LR_3				\
-	RESTORE_LR_0
-
-# define DOCARGS_4				\
-	.save	{r7};				\
-	push	{r0, r1, r2, r3, lr};		\
-	cfi_adjust_cfa_offset (20);		\
-	cfi_rel_offset (lr, 16);		\
-	.save	{lr};				\
-	.pad	#16
-# define UNDOCARGS_4				\
-	pop	{r0, r1, r2, r3};		\
-	cfi_adjust_cfa_offset (-16);		\
-	RESTART_UNWIND
-# define RESTORE_LR_4				\
-	RESTORE_LR_0
-
-/* r4 is only stmfd'ed for correct stack alignment.  */
-# define DOCARGS_5				\
-	.save	{r4, r7};			\
-	push	{r0, r1, r2, r3, r4, lr};	\
-	cfi_adjust_cfa_offset (24);		\
-	cfi_rel_offset (lr, 20);		\
-	.save	{lr};				\
-	.pad	#20
-# define UNDOCARGS_5				\
-	pop	{r0, r1, r2, r3};		\
-	cfi_adjust_cfa_offset (-16);		\
-	.fnend;					\
-	.fnstart;				\
-	.save	{r4, r7};			\
-	.save	{lr};				\
-	.pad	#4
-# define RESTORE_LR_5				\
-	pop	{r4, lr};			\
-	cfi_adjust_cfa_offset (-8);		\
-	/* r4 will be marked as restored later.  */ \
-	cfi_restore (lr)
-
-# define DOCARGS_6				\
-	.save	{r4, r5, r7};			\
-	push	{r0, r1, r2, r3, lr};		\
-	cfi_adjust_cfa_offset (20);		\
-	cfi_rel_offset (lr, 16);		\
-	.save	{lr};				\
-	.pad	#16
-# define UNDOCARGS_6				\
-	pop	{r0, r1, r2, r3};		\
-	cfi_adjust_cfa_offset (-16);		\
-	.fnend;					\
-	.fnstart;				\
-	.save	{r4, r5, r7};			\
-	.save	{lr};
-# define RESTORE_LR_6				\
-	RESTORE_LR_0
-
 # if IS_IN (libpthread)
-#  define CENABLE	bl PLTJMP(__pthread_enable_asynccancel)
-#  define CDISABLE	bl PLTJMP(__pthread_disable_asynccancel)
 #  define __local_multiple_threads __pthread_multiple_threads
 # elif IS_IN (libc)
-#  define CENABLE	bl PLTJMP(__libc_enable_asynccancel)
-#  define CDISABLE	bl PLTJMP(__libc_disable_asynccancel)
 #  define __local_multiple_threads __libc_multiple_threads
-# elif IS_IN (librt)
-#  define CENABLE	bl PLTJMP(__librt_enable_asynccancel)
-#  define CDISABLE	bl PLTJMP(__librt_disable_asynccancel)
-# else
-#  error Unsupported library
 # endif
 
 # if IS_IN (libpthread) || IS_IN (libc)
-#  ifndef __ASSEMBLER__
 extern int __local_multiple_threads attribute_hidden;
-#   define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
-#  else
-#   define SINGLE_THREAD_P						\
-	LDST_PCREL(ldr, ip, ip, __local_multiple_threads);		\
-	teq ip, #0
-#  endif
+#  define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
 # else
 /*  There is no __local_multiple_threads for librt, so use the TCB.  */
-#  ifndef __ASSEMBLER__
-#   define SINGLE_THREAD_P						\
+#  define SINGLE_THREAD_P						\
   __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\
 				   header.multiple_threads) == 0, 1)
-#  else
-#   define SINGLE_THREAD_P						\
-	push	{r0, lr};						\
-	cfi_adjust_cfa_offset (8);					\
-	cfi_rel_offset (lr, 4);						\
-	GET_TLS (lr);							\
-	NEGOFF_ADJ_BASE (r0, MULTIPLE_THREADS_OFFSET);			\
-	ldr	ip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET);		\
-	pop	{r0, lr};						\
-	cfi_adjust_cfa_offset (-8);					\
-	cfi_restore (lr);						\
-	teq	ip, #0
-#  endif
 # endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 /* For rtld, et cetera.  */
 # define SINGLE_THREAD_P 1
@@ -234,8 +47,6 @@  extern int __local_multiple_threads attribute_hidden;
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
index 8b7f2b2..a6189a7 100644
--- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
@@ -23,215 +23,6 @@ 
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-# ifndef NO_ERROR
-#  define NO_ERROR -0x1000
-# endif
-
-/* The syscall cancellation mechanism requires userspace
-   assistance, the following code does roughly this:
-
-	do arguments (read arg5 and arg6 to registers)
-	setup frame
-
-	check if there are threads, yes jump to pseudo_cancel
-
-	unthreaded:
-		syscall
-		check syscall return (jump to pre_end)
-		set errno
-		set return to -1
-		(jump to pre_end)
-
-	pseudo_cancel:
-		cenable
-		syscall
-		cdisable
-		check syscall return (jump to pre_end)
-		set errno
-		set return to -1
-
-	pre_end
-		restore stack
-
-	It is expected that 'ret' and 'END' macros will
-	append an 'undo arguments' and 'return' to the
-	this PSEUDO macro. */
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				\
-	ENTRY (__##syscall_name##_nocancel)				\
-	DOARGS_##args					ASM_LINE_SEP	\
-	stwm TREG, 64(%sp)				ASM_LINE_SEP	\
-	.cfi_def_cfa_offset -64				ASM_LINE_SEP	\
-	.cfi_offset TREG, 0				ASM_LINE_SEP	\
-	stw %sp, -4(%sp)				ASM_LINE_SEP	\
-	stw %r19, -32(%sp)				ASM_LINE_SEP	\
-	.cfi_offset 19, 32				ASM_LINE_SEP	\
-	/* Save r19 */					ASM_LINE_SEP	\
-	SAVE_PIC(TREG)					ASM_LINE_SEP	\
-	/* Do syscall, delay loads # */			ASM_LINE_SEP	\
-	ble  0x100(%sr2,%r0)				ASM_LINE_SEP	\
-	ldi SYS_ify (syscall_name), %r20 /* delay */	ASM_LINE_SEP	\
-	ldi NO_ERROR,%r1				ASM_LINE_SEP	\
-	cmpb,>>=,n %r1,%ret0,L(pre_nc_end)		ASM_LINE_SEP	\
-	/* Restore r19 from TREG */			ASM_LINE_SEP	\
-	LOAD_PIC(TREG) /* delay */			ASM_LINE_SEP	\
-	SYSCALL_ERROR_HANDLER				ASM_LINE_SEP	\
-	/* Use TREG for temp storage */			ASM_LINE_SEP	\
-	copy %ret0, TREG /* delay */			ASM_LINE_SEP	\
-	/* OPTIMIZE: Don't reload r19 */		ASM_LINE_SEP	\
-	/* do a -1*syscall_ret0 */			ASM_LINE_SEP	\
-	sub %r0, TREG, TREG				ASM_LINE_SEP	\
-	/* Store into errno location */			ASM_LINE_SEP	\
-	stw TREG, 0(%sr0,%ret0)				ASM_LINE_SEP	\
-	/* return -1 as error */			ASM_LINE_SEP	\
-	ldi -1, %ret0					ASM_LINE_SEP	\
-L(pre_nc_end):						ASM_LINE_SEP	\
-	/* No need to LOAD_PIC */			ASM_LINE_SEP	\
-	/* Undo frame */				ASM_LINE_SEP	\
-	ldwm -64(%sp),TREG				ASM_LINE_SEP	\
-	/* Restore rp before exit */			ASM_LINE_SEP	\
-	ldw -20(%sp), %rp				ASM_LINE_SEP	\
-	ret						ASM_LINE_SEP	\
-	END(__##syscall_name##_nocancel)		ASM_LINE_SEP	\
-	/**********************************************/ASM_LINE_SEP	\
-	ENTRY (name)							\
-	DOARGS_##args					ASM_LINE_SEP	\
-	stwm TREG, 64(%sp)				ASM_LINE_SEP	\
-	.cfi_def_cfa_offset -64				ASM_LINE_SEP	\
-	.cfi_offset TREG, 0				ASM_LINE_SEP	\
-	stw %sp, -4(%sp)				ASM_LINE_SEP	\
-	stw %r19, -32(%sp)				ASM_LINE_SEP	\
-	.cfi_offset 19, 32				ASM_LINE_SEP	\
-	/* Done setting up frame, continue... */	ASM_LINE_SEP	\
-	SINGLE_THREAD_P					ASM_LINE_SEP	\
-	cmpib,<>,n 0,%ret0,L(pseudo_cancel)		ASM_LINE_SEP	\
-L(unthreaded):						ASM_LINE_SEP	\
-	/* Save r19 */					ASM_LINE_SEP	\
-	SAVE_PIC(TREG)					ASM_LINE_SEP	\
-	/* Do syscall, delay loads # */			ASM_LINE_SEP	\
-	ble  0x100(%sr2,%r0)				ASM_LINE_SEP	\
-	ldi SYS_ify (syscall_name), %r20 /* delay */	ASM_LINE_SEP	\
-	ldi NO_ERROR,%r1				ASM_LINE_SEP	\
-	cmpb,>>=,n %r1,%ret0,L(pre_end)			ASM_LINE_SEP	\
-	/* Restore r19 from TREG */			ASM_LINE_SEP	\
-	LOAD_PIC(TREG) /* delay */			ASM_LINE_SEP	\
-	SYSCALL_ERROR_HANDLER				ASM_LINE_SEP	\
-	/* Use TREG for temp storage */			ASM_LINE_SEP	\
-	copy %ret0, TREG /* delay */			ASM_LINE_SEP	\
-	/* OPTIMIZE: Don't reload r19 */		ASM_LINE_SEP	\
-	/* do a -1*syscall_ret0 */			ASM_LINE_SEP	\
-	sub %r0, TREG, TREG				ASM_LINE_SEP	\
-	/* Store into errno location */			ASM_LINE_SEP	\
-	stw TREG, 0(%sr0,%ret0)				ASM_LINE_SEP	\
-	b L(pre_end)					ASM_LINE_SEP	\
-	/* return -1 as error */			ASM_LINE_SEP	\
-	ldi -1, %ret0 /* delay */			ASM_LINE_SEP	\
-L(pseudo_cancel):					ASM_LINE_SEP	\
-	PUSHARGS_##args /* Save args */			ASM_LINE_SEP	\
-	/* Save r19 into TREG */			ASM_LINE_SEP	\
-	CENABLE /* FUNC CALL */				ASM_LINE_SEP	\
-	SAVE_PIC(TREG) /* delay */			ASM_LINE_SEP	\
-	/* restore syscall args */			ASM_LINE_SEP	\
-	POPARGS_##args					ASM_LINE_SEP	\
-	/* save mask from cenable (use stub rp slot) */	ASM_LINE_SEP	\
-	stw %ret0, -24(%sp)				ASM_LINE_SEP	\
-	/* ... SYSCALL ... */				ASM_LINE_SEP	\
-	ble 0x100(%sr2,%r0)				ASM_LINE_SEP    \
-	ldi SYS_ify (syscall_name), %r20 /* delay */	ASM_LINE_SEP	\
-	/* ............... */				ASM_LINE_SEP	\
-	LOAD_PIC(TREG)					ASM_LINE_SEP	\
-	/* pass mask as arg0 to cdisable */		ASM_LINE_SEP	\
-	ldw -24(%sp), %r26				ASM_LINE_SEP	\
-	CDISABLE					ASM_LINE_SEP	\
-	stw %ret0, -24(%sp) /* delay */			ASM_LINE_SEP	\
-	/* Restore syscall return */			ASM_LINE_SEP	\
-	ldw -24(%sp), %ret0				ASM_LINE_SEP	\
-	/* compare error */				ASM_LINE_SEP	\
-	ldi NO_ERROR,%r1				ASM_LINE_SEP	\
-	/* branch if no error */			ASM_LINE_SEP	\
-	cmpb,>>=,n %r1,%ret0,L(pre_end)			ASM_LINE_SEP	\
-	LOAD_PIC(TREG)	/* cond. nullify */		ASM_LINE_SEP	\
-	copy %ret0, TREG /* save syscall return */	ASM_LINE_SEP	\
-	SYSCALL_ERROR_HANDLER				ASM_LINE_SEP	\
-	/* make syscall res value positive */		ASM_LINE_SEP	\
-	sub %r0, TREG, TREG	/* delay */		ASM_LINE_SEP	\
-	/* No need to LOAD_PIC */			ASM_LINE_SEP	\
-	/* store into errno location */			ASM_LINE_SEP	\
-	stw TREG, 0(%sr0,%ret0)				ASM_LINE_SEP	\
-	/* return -1 */					ASM_LINE_SEP	\
-	ldi -1, %ret0					ASM_LINE_SEP	\
-L(pre_end):						ASM_LINE_SEP	\
-	/* No need to LOAD_PIC */			ASM_LINE_SEP	\
-	/* Undo frame */				ASM_LINE_SEP	\
-	ldwm -64(%sp),TREG				ASM_LINE_SEP	\
-	/* Restore rp before exit */			ASM_LINE_SEP	\
-	ldw -20(%sp), %rp				ASM_LINE_SEP
-
-/* Save arguments into our frame */
-# define PUSHARGS_0	/* nothing to do */
-# define PUSHARGS_1	PUSHARGS_0 stw %r26, -36(%sr0,%sp)	ASM_LINE_SEP	\
-			.cfi_offset 26, 28			ASM_LINE_SEP
-# define PUSHARGS_2	PUSHARGS_1 stw %r25, -40(%sr0,%sp)	ASM_LINE_SEP	\
-			.cfi_offset 25, 24			ASM_LINE_SEP
-# define PUSHARGS_3	PUSHARGS_2 stw %r24, -44(%sr0,%sp)	ASM_LINE_SEP	\
-			.cfi_offset 24, 20			ASM_LINE_SEP
-# define PUSHARGS_4	PUSHARGS_3 stw %r23, -48(%sr0,%sp)	ASM_LINE_SEP	\
-			.cfi_offset 23, 16			ASM_LINE_SEP
-# define PUSHARGS_5	PUSHARGS_4 stw %r22, -52(%sr0,%sp)	ASM_LINE_SEP	\
-			.cfi_offset 22, 12			ASM_LINE_SEP
-# define PUSHARGS_6	PUSHARGS_5 stw %r21, -56(%sr0,%sp)	ASM_LINE_SEP	\
-			.cfi_offset 21, 8			ASM_LINE_SEP
-
-/* Bring them back from the stack */
-# define POPARGS_0	/* nothing to do */
-# define POPARGS_1	POPARGS_0 ldw -36(%sr0,%sp), %r26	ASM_LINE_SEP
-# define POPARGS_2	POPARGS_1 ldw -40(%sr0,%sp), %r25	ASM_LINE_SEP
-# define POPARGS_3	POPARGS_2 ldw -44(%sr0,%sp), %r24	ASM_LINE_SEP
-# define POPARGS_4	POPARGS_3 ldw -48(%sr0,%sp), %r23	ASM_LINE_SEP
-# define POPARGS_5	POPARGS_4 ldw -52(%sr0,%sp), %r22	ASM_LINE_SEP
-# define POPARGS_6	POPARGS_5 ldw -56(%sr0,%sp), %r21	ASM_LINE_SEP
-
-# if IS_IN (libpthread)
-#  ifdef PIC
-#   define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \
-			bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP
-#   define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \
-			bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP
-#  else
-#   define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \
-			bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP
-#   define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \
-			bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP
-#  endif
-# elif IS_IN (libc)
-#  ifdef PIC
-#   define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \
-			bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP
-#   define CDISABLE	.import __libc_disable_asynccancel,code ASM_LINE_SEP \
-			bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP
-#  else
-#   define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \
-			bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP
-#   define CDISABLE	.import __libc_disable_asynccancel,code ASM_LINE_SEP \
-			bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP
-#  endif
-# elif IS_IN (librt)
-#  ifdef PIC
-#   define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \
-			bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP
-#   define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \
-			bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP
-#  else
-#   define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \
-			bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP
-#   define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \
-			bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP
-#  endif
-# else
-#  error Unsupported library
-# endif
-
 # if IS_IN (libpthread)
 #  define __local_multiple_threads __pthread_multiple_threads
 # elif IS_IN (libc)
@@ -242,17 +33,11 @@  L(pre_end):						ASM_LINE_SEP	\
 #  error Unsupported library
 # endif
 
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-# else
-/* Read the value of header.multiple_threads from the thread pointer */
-#  define SINGLE_THREAD_P							\
-	mfctl %cr27, %ret0					ASM_LINE_SEP	\
-	ldw MULTIPLE_THREADS_THREAD_OFFSET(%sr0,%ret0),%ret0	ASM_LINE_SEP
-# endif
-#elif !defined __ASSEMBLER__
+
+#else
 
 /* This code should never be used but we define it anyhow.  */
 # define SINGLE_THREAD_P (1)
@@ -261,8 +46,6 @@  L(pre_end):						ASM_LINE_SEP	\
 #endif
 /* IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) */
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
index ebf6019..34e2b6f 100644
--- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
@@ -24,130 +24,17 @@ 
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				      \
-  .text;								      \
-  ENTRY (name)								      \
-    cmpl $0, %gs:MULTIPLE_THREADS_OFFSET;				      \
-    jne L(pseudo_cancel);						      \
-  .type __##syscall_name##_nocancel,@function;				      \
-  .globl __##syscall_name##_nocancel;					      \
-  __##syscall_name##_nocancel:						      \
-    DO_CALL (syscall_name, args);					      \
-    cmpl $-4095, %eax;							      \
-    jae SYSCALL_ERROR_LABEL;						      \
-    ret;								      \
-  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
-  L(pseudo_cancel):							      \
-    CENABLE								      \
-    SAVE_OLDTYPE_##args							      \
-    PUSHCARGS_##args							      \
-    DOCARGS_##args							      \
-    movl $SYS_ify (syscall_name), %eax;					      \
-    ENTER_KERNEL;							      \
-    POPCARGS_##args;							      \
-    POPSTATE_##args							      \
-    cmpl $-4095, %eax;							      \
-    jae SYSCALL_ERROR_LABEL
-
-# define SAVE_OLDTYPE_0	movl %eax, %ecx;
-# define SAVE_OLDTYPE_1	SAVE_OLDTYPE_0
-# define SAVE_OLDTYPE_2	pushl %eax; cfi_adjust_cfa_offset (4);
-# define SAVE_OLDTYPE_3	SAVE_OLDTYPE_2
-# define SAVE_OLDTYPE_4	SAVE_OLDTYPE_2
-# define SAVE_OLDTYPE_5	SAVE_OLDTYPE_2
-# define SAVE_OLDTYPE_6	SAVE_OLDTYPE_2
-
-# define PUSHCARGS_0	/* No arguments to push.  */
-# define DOCARGS_0	/* No arguments to frob.  */
-# define POPCARGS_0	/* No arguments to pop.  */
-# define _PUSHCARGS_0	/* No arguments to push.  */
-# define _POPCARGS_0	/* No arguments to pop.  */
-
-# define PUSHCARGS_1	movl %ebx, %edx; cfi_register (ebx, edx); PUSHCARGS_0
-# define DOCARGS_1	_DOARGS_1 (4)
-# define POPCARGS_1	POPCARGS_0; movl %edx, %ebx; cfi_restore (ebx);
-# define _PUSHCARGS_1	pushl %ebx; cfi_adjust_cfa_offset (4); \
-			cfi_rel_offset (ebx, 0); _PUSHCARGS_0
-# define _POPCARGS_1	_POPCARGS_0; popl %ebx; \
-			cfi_adjust_cfa_offset (-4); cfi_restore (ebx);
-
-# define PUSHCARGS_2	PUSHCARGS_1
-# define DOCARGS_2	_DOARGS_2 (12)
-# define POPCARGS_2	POPCARGS_1
-# define _PUSHCARGS_2	_PUSHCARGS_1
-# define _POPCARGS_2	_POPCARGS_1
-
-# define PUSHCARGS_3	_PUSHCARGS_2
-# define DOCARGS_3	_DOARGS_3 (20)
-# define POPCARGS_3	_POPCARGS_3
-# define _PUSHCARGS_3	_PUSHCARGS_2
-# define _POPCARGS_3	_POPCARGS_2
-
-# define PUSHCARGS_4	_PUSHCARGS_4
-# define DOCARGS_4	_DOARGS_4 (28)
-# define POPCARGS_4	_POPCARGS_4
-# define _PUSHCARGS_4	pushl %esi; cfi_adjust_cfa_offset (4); \
-			cfi_rel_offset (esi, 0); _PUSHCARGS_3
-# define _POPCARGS_4	_POPCARGS_3; popl %esi; \
-			cfi_adjust_cfa_offset (-4); cfi_restore (esi);
-
-# define PUSHCARGS_5	_PUSHCARGS_5
-# define DOCARGS_5	_DOARGS_5 (36)
-# define POPCARGS_5	_POPCARGS_5
-# define _PUSHCARGS_5	pushl %edi; cfi_adjust_cfa_offset (4); \
-			cfi_rel_offset (edi, 0); _PUSHCARGS_4
-# define _POPCARGS_5	_POPCARGS_4; popl %edi; \
-			cfi_adjust_cfa_offset (-4); cfi_restore (edi);
-
-# define PUSHCARGS_6	_PUSHCARGS_6
-# define DOCARGS_6	_DOARGS_6 (44)
-# define POPCARGS_6	_POPCARGS_6
-# define _PUSHCARGS_6	pushl %ebp; cfi_adjust_cfa_offset (4); \
-			cfi_rel_offset (ebp, 0); _PUSHCARGS_5
-# define _POPCARGS_6	_POPCARGS_5; popl %ebp; \
-			cfi_adjust_cfa_offset (-4); cfi_restore (ebp);
-
-# if IS_IN (libpthread)
-#  define CENABLE	call __pthread_enable_asynccancel;
-#  define CDISABLE	call __pthread_disable_asynccancel
-# elif IS_IN (libc)
-#  define CENABLE	call __libc_enable_asynccancel;
-#  define CDISABLE	call __libc_disable_asynccancel
-# elif IS_IN (librt)
-#  define CENABLE	call __librt_enable_asynccancel;
-#  define CDISABLE	call __librt_disable_asynccancel
-# else
-#  error Unsupported library
-# endif
-# define POPSTATE_0 \
- pushl %eax; cfi_adjust_cfa_offset (4); movl %ecx, %eax; \
- CDISABLE; popl %eax; cfi_adjust_cfa_offset (-4);
-# define POPSTATE_1	POPSTATE_0
-# define POPSTATE_2	xchgl (%esp), %eax; CDISABLE; popl %eax; \
-			cfi_adjust_cfa_offset (-4);
-# define POPSTATE_3	POPSTATE_2
-# define POPSTATE_4	POPSTATE_3
-# define POPSTATE_5	POPSTATE_4
-# define POPSTATE_6	POPSTATE_5
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-# else
-#  define SINGLE_THREAD_P cmpl $0, %gs:MULTIPLE_THREADS_OFFSET
-# endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 # define SINGLE_THREAD_P (1)
 # define NO_CANCELLATION 1
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
index 7c7f619..96d04de 100644
--- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
@@ -23,201 +23,13 @@ 
 #endif
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# undef PSEUDO
-
-# if IS_IN (libc)
-#  define SYSDEP_CANCEL_ERRNO __libc_errno
-# else
-#  define SYSDEP_CANCEL_ERRNO errno
-# endif
-# define SYSDEP_CANCEL_ERROR(args)					      \
-.section .gnu.linkonce.t.__syscall_error_##args, "ax";			      \
-     .align 32;								      \
-     .proc __syscall_error_##args;					      \
-     .global __syscall_error_##args;					      \
-     .hidden __syscall_error_##args;					      \
-     .size __syscall_error_##args, 64;					      \
-__syscall_error_##args:							      \
-     .prologue;								      \
-     .regstk args, 5, args, 0;						      \
-     .save ar.pfs, loc0;						      \
-     .save rp, loc1;							      \
-     .body;								      \
-     addl loc4 = @ltoff(@tprel(SYSDEP_CANCEL_ERRNO)), gp;;		      \
-     ld8 loc4 = [loc4];							      \
-     mov rp = loc1;;							      \
-     mov r8 = -1;							      \
-     add loc4 = loc4, r13;;						      \
-     st4 [loc4] = loc3;							      \
-     mov ar.pfs = loc0
-
-# ifndef USE_DL_SYSINFO
-
-#  define PSEUDO(name, syscall_name, args)				      \
-.text;									      \
-ENTRY (name)								      \
-     adds r14 = MULTIPLE_THREADS_OFFSET, r13;;				      \
-     ld4 r14 = [r14];							      \
-     mov r15 = SYS_ify(syscall_name);;					      \
-     cmp4.ne p6, p7 = 0, r14;						      \
-(p6) br.cond.spnt .Lpseudo_cancel;;					      \
-     break __BREAK_SYSCALL;;						      \
-     cmp.eq p6,p0=-1,r10;						      \
-(p6) br.cond.spnt.few __syscall_error;					      \
-     ret;;								      \
-     .endp name;							      \
-     .proc __GC_##name;							      \
-     .globl __GC_##name;						      \
-     .hidden __GC_##name;						      \
-__GC_##name:								      \
-.Lpseudo_cancel:							      \
-     .prologue;								      \
-     .regstk args, 5, args, 0;						      \
-     .save ar.pfs, loc0;						      \
-     alloc loc0 = ar.pfs, args, 5, args, 0;				      \
-     .save rp, loc1;							      \
-     mov loc1 = rp;;							      \
-     .body;								      \
-     CENABLE;;								      \
-     mov loc2 = r8;							      \
-     COPY_ARGS_##args							      \
-     mov r15 = SYS_ify(syscall_name);					      \
-     break __BREAK_SYSCALL;;						      \
-     mov loc3 = r8;							      \
-     mov loc4 = r10;							      \
-     mov out0 = loc2;							      \
-     CDISABLE;;								      \
-     cmp.eq p6,p0=-1,loc4;						      \
-(p6) br.cond.spnt.few __syscall_error_##args;				      \
-     mov r8 = loc3;							      \
-     mov rp = loc1;							      \
-     mov ar.pfs = loc0;							      \
-.Lpseudo_end:								      \
-     ret;								      \
-     .endp __GC_##name;							      \
-     SYSDEP_CANCEL_ERROR(args)
-
-# else /* USE_DL_SYSINFO */
-
-#  define PSEUDO(name, syscall_name, args)				      \
-.text;									      \
-ENTRY (name)								      \
-     .prologue;								      \
-     adds r2 = SYSINFO_OFFSET, r13;					      \
-     adds r14 = MULTIPLE_THREADS_OFFSET, r13;				      \
-     .save ar.pfs, r11;							      \
-     mov r11 = ar.pfs;;							      \
-     .body;								      \
-     ld4 r14 = [r14];							      \
-     ld8 r2 = [r2];							      \
-     mov r15 = SYS_ify(syscall_name);;					      \
-     cmp4.ne p6, p7 = 0, r14;						      \
-     mov b7 = r2;							      \
-(p6) br.cond.spnt .Lpseudo_cancel;					      \
-     br.call.sptk.many b6 = b7;;					      \
-     mov ar.pfs = r11;							      \
-     cmp.eq p6,p0 = -1, r10;						      \
-(p6) br.cond.spnt.few __syscall_error;					      \
-     ret;;								      \
-     .endp name;							      \
-									      \
-      .proc __##syscall_name##_nocancel;				      \
-     .globl __##syscall_name##_nocancel;				      \
-__##syscall_name##_nocancel:						      \
-     .prologue;								      \
-     adds r2 = SYSINFO_OFFSET, r13;					      \
-     .save ar.pfs, r11;							      \
-     mov r11 = ar.pfs;;							      \
-     .body;								      \
-     ld8 r2 = [r2];							      \
-     mov r15 = SYS_ify(syscall_name);;					      \
-     mov b7 = r2;							      \
-     br.call.sptk.many b6 = b7;;					      \
-     mov ar.pfs = r11;							      \
-     cmp.eq p6,p0 = -1, r10;						      \
-(p6) br.cond.spnt.few __syscall_error;					      \
-     ret;;								      \
-     .endp __##syscall_name##_nocancel;					      \
-									      \
-     .proc __GC_##name;							      \
-     .globl __GC_##name;						      \
-     .hidden __GC_##name;						      \
-__GC_##name:								      \
-.Lpseudo_cancel:							      \
-     .prologue;								      \
-     .regstk args, 5, args, 0;						      \
-     .save ar.pfs, loc0;						      \
-     alloc loc0 = ar.pfs, args, 5, args, 0;				      \
-     adds loc4 = SYSINFO_OFFSET, r13;					      \
-     .save rp, loc1;							      \
-     mov loc1 = rp;;							      \
-     .body;								      \
-     ld8 loc4 = [loc4];							      \
-     CENABLE;;								      \
-     mov loc2 = r8;							      \
-     mov b7 = loc4;							      \
-     COPY_ARGS_##args							      \
-     mov r15 = SYS_ify(syscall_name);					      \
-     br.call.sptk.many b6 = b7;;					      \
-     mov loc3 = r8;							      \
-     mov loc4 = r10;							      \
-     mov out0 = loc2;							      \
-     CDISABLE;;								      \
-     cmp.eq p6,p0=-1,loc4;						      \
-(p6) br.cond.spnt.few __syscall_error_##args;				      \
-     mov r8 = loc3;							      \
-     mov rp = loc1;							      \
-     mov ar.pfs = loc0;							      \
-.Lpseudo_end:								      \
-     ret;								      \
-     .endp __GC_##name;							      \
-     SYSDEP_CANCEL_ERROR(args)
-
-# endif /* USE_DL_SYSINFO */
-
-# undef PSEUDO_END
-# define PSEUDO_END(name) .endp
-
-# if IS_IN (libpthread)
-#  define CENABLE	br.call.sptk.many b0 = __pthread_enable_asynccancel
-#  define CDISABLE	br.call.sptk.many b0 = __pthread_disable_asynccancel
-# elif IS_IN (libc)
-#  define CENABLE	br.call.sptk.many b0 = __libc_enable_asynccancel
-#  define CDISABLE	br.call.sptk.many b0 = __libc_disable_asynccancel
-# elif IS_IN (librt)
-#  define CENABLE	br.call.sptk.many b0 = __librt_enable_asynccancel
-#  define CDISABLE	br.call.sptk.many b0 = __librt_disable_asynccancel
-# else
-#  error Unsupported library
-# endif
-
-# define COPY_ARGS_0	/* Nothing */
-# define COPY_ARGS_1	COPY_ARGS_0 mov out0 = in0;
-# define COPY_ARGS_2	COPY_ARGS_1 mov out1 = in1;
-# define COPY_ARGS_3	COPY_ARGS_2 mov out2 = in2;
-# define COPY_ARGS_4	COPY_ARGS_3 mov out3 = in3;
-# define COPY_ARGS_5	COPY_ARGS_4 mov out4 = in4;
-# define COPY_ARGS_6	COPY_ARGS_5 mov out5 = in5;
-# define COPY_ARGS_7	COPY_ARGS_6 mov out6 = in6;
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0, 1)
-# else
-#  define SINGLE_THREAD_P \
-  adds r14 = MULTIPLE_THREADS_OFFSET, r13 ;; ld4 r14 = [r14] ;; cmp4.ne p6, p7 = 0, r14
-# endif
-
-#elif !defined __ASSEMBLER__
-
+#else
 # define SINGLE_THREAD_P (1)
 # define NO_CANCELLATION 1
-
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
index 9bc9e13..1603c5f 100644
--- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
@@ -18,121 +18,21 @@ 
 
 #include <sysdep.h>
 #include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				      \
-  .text;								      \
-  ENTRY (name)								      \
-    SINGLE_THREAD_P;							      \
-    jne .Lpseudo_cancel;						      \
-  .type __##syscall_name##_nocancel,@function;			              \
-  .globl __##syscall_name##_nocancel;				 	      \
-  __##syscall_name##_nocancel:					              \
-    DO_CALL (syscall_name, args);					      \
-    cmp.l &-4095, %d0;							      \
-    jcc SYSCALL_ERROR_LABEL;						      \
-    rts;								      \
-  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
-  .Lpseudo_cancel:							      \
-    CENABLE;								      \
-    DOCARGS_##args							      \
-    move.l %d0, -(%sp); /* Save result of CENABLE.  */  		      \
-    cfi_adjust_cfa_offset (4); \
-    move.l &SYS_ify (syscall_name), %d0;				      \
-    trap &0;								      \
-    move.l %d0, %d2;							      \
-    CDISABLE;								      \
-    addq.l &4, %sp; /* Remove result of CENABLE from the stack.  */           \
-    cfi_adjust_cfa_offset (-4); \
-    move.l %d2, %d0;							      \
-    UNDOCARGS_##args							      \
-    cmp.l &-4095, %d0;							      \
-    jcc SYSCALL_ERROR_LABEL
-
-/* Note: we use D2 to save syscall's return value as D0 will be clobbered in
-   CDISABLE.  */
-# define DOCARGS_0	move.l %d2, -(%sp);		\
-  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d2, 0);
-# define UNDOCARGS_0	move.l (%sp)+, %d2;	\
-  cfi_adjust_cfa_offset (-4); cfi_restore (%d2);
-
-# define DOCARGS_1	_DOCARGS_1 (4); DOCARGS_0
-# define _DOCARGS_1(n)	move.l n(%sp), %d1;
-# define UNDOCARGS_1	UNDOCARGS_0
-
-# define DOCARGS_2	_DOCARGS_2 (8)
-# define _DOCARGS_2(n)	DOCARGS_0 move.l n+4(%sp), %d2; _DOCARGS_1 (n)
-# define UNDOCARGS_2	UNDOCARGS_0
-
-# define DOCARGS_3	_DOCARGS_3 (12)
-# define _DOCARGS_3(n)	move.l %d3, -(%sp);				\
-  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d3, 0);			\
-  move.l n+4(%sp), %d3; _DOCARGS_2 (n)
-# define UNDOCARGS_3	UNDOCARGS_2 move.l (%sp)+, %d3;		\
-  cfi_adjust_cfa_offset (-4); cfi_restore (%d3);
-
-# define DOCARGS_4	_DOCARGS_4 (16)
-# define _DOCARGS_4(n)	move.l %d4, -(%sp);			\
-  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d4, 0);		\
-  move.l n+4(%sp), %d4; _DOCARGS_3 (n)
-# define UNDOCARGS_4	UNDOCARGS_3 move.l (%sp)+, %d4;	\
-  cfi_adjust_cfa_offset (-4); cfi_restore (%d4);
-
-# define DOCARGS_5	_DOCARGS_5 (20)
-# define _DOCARGS_5(n)	move.l %d5, -(%sp);			\
-  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0);		\
-  move.l n+4(%sp), %d5; _DOCARGS_4 (n)
-# define UNDOCARGS_5	UNDOCARGS_4 move.l (%sp)+, %d5; \
-  cfi_adjust_cfa_offset (-4); cfi_restore (%d5);
-
-# define DOCARGS_6	_DOCARGS_6 (24)
-# define _DOCARGS_6(n)	move.l n(%sp), %a0; _DOCARGS_5 (n-4)
-# define UNDOCARGS_6	UNDOCARGS_5
-
-# ifdef PIC
-#  define PSEUDO_JMP(sym) jbsr sym ## @PLTPC
-# else
-#  define PSEUDO_JMP(sym) jbsr sym
-# endif
-
-# if IS_IN (libpthread)
-#  define CENABLE	PSEUDO_JMP (__pthread_enable_asynccancel)
-#  define CDISABLE	PSEUDO_JMP (__pthread_disable_asynccancel)
-# elif IS_IN (libc)
-#  define CENABLE	PSEUDO_JMP (__libc_enable_asynccancel)
-#  define CDISABLE	PSEUDO_JMP (__libc_disable_asynccancel)
-# elif IS_IN (librt)
-#  define CENABLE	PSEUDO_JMP (__librt_enable_asynccancel)
-#  define CDISABLE	PSEUDO_JMP (__librt_disable_asynccancel)
-# else
-#  error Unsupported library
-# endif
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P						\
+# define SINGLE_THREAD_P						\
   __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\
 				   header.multiple_threads) == 0, 1)
-# else
-#  define SINGLE_THREAD_P			\
-  PSEUDO_JMP (__m68k_read_tp);		        \
-  tst.l MULTIPLE_THREADS_OFFSET(%a0)
-# endif
-
-#elif !defined __ASSEMBLER__
+#else
 
 # define SINGLE_THREAD_P (1)
 # define NO_CANCELLATION (1)
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P					  \
+#define RTLD_SINGLE_THREAD_P					  \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF,			  \
 				   header.multiple_threads) == 0, \
 		    1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
index dbcc2b2..7fe030b 100644
--- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
@@ -23,136 +23,28 @@ 
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-# if !IS_IN (librt) || !defined(PIC)
-#  define AC_STACK_SIZE  16  /* space for r15, async_cancel arg and 2 temp words */
-#  define AC_SET_GOT /* empty */
-#  define AC_RESTORE_GOT /* empty */
-# else
-#  define AC_STACK_SIZE  20  /* extra 4 bytes for r20 */
-#  define AC_SET_GOT                                                 \
-    swi   r20, r1, AC_STACK_SIZE-4;                                  \
-    mfs   r20, rpc;                                                  \
-    addik r20, r20, _GLOBAL_OFFSET_TABLE_+8;
-#  define AC_RESTORE_GOT                                             \
-    lwi   r20, r1, AC_STACK_SIZE-4;
-# endif
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)                            \
-  .text;                                                             \
-  ENTRY (name)                                                       \
-    SINGLE_THREAD_P(r12);                                            \
-    bnei r12, L(pseudo_cancel);                                      \
-  .globl __##syscall_name##_nocancel;                                \
-  .type __##syscall_name##_nocancel,@function;                       \
-__##syscall_name##_nocancel:                                         \
-    DO_CALL (syscall_name, args);                                    \
-    addik r4, r0, -4095;                                             \
-    cmpu  r4, r4, r3;                                                \
-    bgei  r4, SYSCALL_ERROR_LABEL;                                   \
-    rtsd  r15, 8;                                                    \
-    nop;                                                             \
-  .size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel;  \
-L(pseudo_cancel):                                                    \
-    addik r1, r1, -AC_STACK_SIZE;                                    \
-    swi   r15, r1, 0;                                                \
-    AC_SET_GOT                                                       \
-    DOCARGS_##args                                                   \
-    CENABLE;                                                         \
-    swi   r3, r1, 8;                                                 \
-    UNDOCARGS_##args                                                 \
-    DO_CALL (syscall_name, args);                                    \
-    swi   r3, r1, 12;                                                \
-    lwi   r5, r1, 8;                                                 \
-    CDISABLE;                                                        \
-    lwi   r3, r1, 12;                                                \
-    lwi   r15, r1, 0;                                                \
-    AC_RESTORE_GOT                                                   \
-    addik r1, r1, AC_STACK_SIZE;                                     \
-    addik r4, r0, -4095;                                             \
-    cmpu  r4, r4, r3;                                                \
-    bgei  r4, SYSCALL_ERROR_LABEL;                                   \
-    rtsd  r15, 8;                                                    \
-    nop;
-
-/*
- * Macros to save/restore syscall arguments across CENABLE
- * The arguments are saved into the caller's stack (original r1 + 4)
- */
-
-# define DOCARGS_0
-# define DOCARGS_1  swi   r5, r1, AC_STACK_SIZE + 4;
-# define DOCARGS_2  swi   r6, r1, AC_STACK_SIZE + 8; DOCARGS_1
-# define DOCARGS_3  swi   r7, r1, AC_STACK_SIZE + 12; DOCARGS_2
-# define DOCARGS_4  swi   r8, r1, AC_STACK_SIZE + 16; DOCARGS_3
-# define DOCARGS_5  swi   r9, r1, AC_STACK_SIZE + 20; DOCARGS_4
-# define DOCARGS_6  swi   r10, r1, AC_STACK_SIZE + 24; DOCARGS_5
-
-# define UNDOCARGS_0
-# define UNDOCARGS_1  lwi   r5, r1, AC_STACK_SIZE + 4;
-# define UNDOCARGS_2  UNDOCARGS_1 lwi   r6, r1, AC_STACK_SIZE + 8;
-# define UNDOCARGS_3  UNDOCARGS_2 lwi   r7, r1, AC_STACK_SIZE + 12;
-# define UNDOCARGS_4  UNDOCARGS_3 lwi   r8, r1, AC_STACK_SIZE + 16;
-# define UNDOCARGS_5  UNDOCARGS_4 lwi   r9, r1, AC_STACK_SIZE + 20;
-# define UNDOCARGS_6  UNDOCARGS_5 lwi   r10, r1, AC_STACK_SIZE + 24;
-
-# ifdef PIC
-#  define PSEUDO_JMP(sym)  brlid r15, sym##@PLTPC; addk r0, r0, r0
-# else
-#  define PSEUDO_JMP(sym)  brlid r15, sym; addk r0, r0, r0
-# endif
-
 # if IS_IN (libpthread)
-#  define CENABLE PSEUDO_JMP (__pthread_enable_asynccancel)
-#  define CDISABLE  PSEUDO_JMP (__pthread_disable_asynccancel)
 #  define __local_multiple_threads __pthread_multiple_threads
 # elif IS_IN (libc)
-#  define CENABLE PSEUDO_JMP (__libc_enable_asynccancel)
-#  define CDISABLE  PSEUDO_JMP (__libc_disable_asynccancel)
 #  define __local_multiple_threads __libc_multiple_threads
-# elif IS_IN (librt)
-#  define CENABLE PSEUDO_JMP (__librt_enable_asynccancel)
-#  define CDISABLE  PSEUDO_JMP (__librt_disable_asynccancel)
-# else
-#  error Unsupported library
 # endif
 
-
 # if IS_IN (libpthread) || IS_IN (libc)
-#  ifndef __ASSEMBLER__
 extern int __local_multiple_threads attribute_hidden;
-#   define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
-#  else
-#   if !defined PIC
-#    define SINGLE_THREAD_P(reg) lwi reg, r0, __local_multiple_threads;
-#   else
-#    define SINGLE_THREAD_P(reg)                                     \
-      mfs   reg, rpc;                                                \
-      addik reg, reg, _GLOBAL_OFFSET_TABLE_+8;                       \
-      lwi   reg, reg, __local_multiple_threads@GOT;                  \
-      lwi   reg, reg, 0;
-#   endif
-#  endif
+#  define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
 # else
-#  ifndef __ASSEMBLER__
-#   define SINGLE_THREAD_P                                           \
+#  define SINGLE_THREAD_P                                           \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF,                      \
                                    header.multiple_threads) == 0, 1)
-#  else
-#   define SINGLE_THREAD_P(reg)                                      \
-     lwi reg, r0, MULTIPLE_THREADS_OFFSET(reg)
-#  endif
 # endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 # define SINGLE_THREAD_P (1)
 # define NO_CANCELLATION (1)
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P                                        \
+#define RTLD_SINGLE_THREAD_P                                        \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF,                      \
                                    header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
deleted file mode 100644
index 0ed3e3d..0000000
--- a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h
+++ /dev/null
@@ -1,249 +0,0 @@ 
-/* Copyright (C) 2003-2017 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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <sysdeps/generic/sysdep.h>
-#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
-#include <sys/asm.h>
-
-/* Gas will put the initial save of $gp into the CIE, because it appears to
-   happen before any instructions.  So we use cfi_same_value instead of
-   cfi_restore.  */
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-#ifdef __PIC__
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				      \
-      .align 2;								      \
-  L(pseudo_start):							      \
-      cfi_startproc;							      \
-      cfi_adjust_cfa_offset (STKSPACE);					      \
-      cfi_rel_offset (gp, STKOFF_GP);					      \
-  99: PTR_LA t9,__syscall_error;					      \
-      /* manual cpreturn */						      \
-      REG_L gp, STKOFF_GP(sp);						      \
-      cfi_same_value (gp);						      \
-      RESTORESTK;							      \
-      jr t9;								      \
-  .type __##syscall_name##_nocancel, @function;				      \
-  .globl __##syscall_name##_nocancel;					      \
-  __##syscall_name##_nocancel:						      \
-    SAVESTK;								      \
-    .cpsetup t9, STKOFF_GP, __##syscall_name##_nocancel;		      \
-    cfi_rel_offset (gp, STKOFF_GP);					      \
-    li v0, SYS_ify(syscall_name);					      \
-    syscall;								      \
-    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \
-    /* manual cpreturn */						      \
-    REG_L gp, STKOFF_GP(sp);						      \
-    cfi_same_value (gp);						      \
-    RESTORESTK;								      \
-    ret;								      \
-    cfi_endproc;							      \
-  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
-  ENTRY (name)								      \
-    SAVESTK;								      \
-    .cpsetup t9, STKOFF_GP, name;					      \
-    cfi_rel_offset (gp, STKOFF_GP);					      \
-    SINGLE_THREAD_P(v1);						      \
-    bne zero, v1, L(pseudo_cancel);					      \
-    .set noreorder;							      \
-    li v0, SYS_ify(syscall_name);					      \
-    syscall;								      \
-    .set reorder;							      \
-    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \
-    /* manual cpreturn */						      \
-    REG_L gp, STKOFF_GP(sp);						      \
-    cfi_same_value (gp);						      \
-    RESTORESTK;								      \
-    ret;								      \
-  L(pseudo_cancel):							      \
-    cfi_adjust_cfa_offset (STKSPACE);					      \
-    cfi_rel_offset (gp, STKOFF_GP);					      \
-    REG_S ra, STKOFF_RA(sp);						      \
-    cfi_rel_offset (ra, STKOFF_RA);					      \
-    PUSHARGS_##args;			/* save syscall args */	      	      \
-    CENABLE;								      \
-    REG_S v0, STKOFF_SVMSK(sp);		/* save mask */			      \
-    POPARGS_##args;			/* restore syscall args */	      \
-    .set noreorder;							      \
-    li v0, SYS_ify (syscall_name);				      	      \
-    syscall;								      \
-    .set reorder;							      \
-    REG_S v0, STKOFF_SC_V0(sp);		/* save syscall result */             \
-    REG_S a3, STKOFF_SC_ERR(sp);	/* save syscall error flag */	      \
-    REG_L a0, STKOFF_SVMSK(sp);		/* pass mask as arg1 */		      \
-    CDISABLE;								      \
-    REG_L a3, STKOFF_SC_ERR(sp);	/* restore syscall error flag */      \
-    REG_L ra, STKOFF_RA(sp);		/* restore return address */	      \
-    REG_L v0, STKOFF_SC_V0(sp);		/* restore syscall result */          \
-    bne a3, zero, SYSCALL_ERROR_LABEL;					      \
-    /* manual cpreturn */						      \
-    REG_L gp, STKOFF_GP(sp);						      \
-    cfi_same_value (gp);						      \
-    RESTORESTK;								      \
-  L(pseudo_end):
-#else
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				      \
-      .align 2;								      \
-  L(pseudo_start):							      \
-      cfi_startproc;							      \
-      cfi_adjust_cfa_offset (STKSPACE);					      \
-  99: RESTORESTK;							      \
-      j __syscall_error;						      \
-  .type __##syscall_name##_nocancel, @function;				      \
-  .globl __##syscall_name##_nocancel;					      \
-  __##syscall_name##_nocancel:						      \
-    SAVESTK;								      \
-    li v0, SYS_ify(syscall_name);					      \
-    syscall;								      \
-    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \
-    RESTORESTK;								      \
-    ret;								      \
-    cfi_endproc;							      \
-  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
-  ENTRY (name)								      \
-    SAVESTK;								      \
-    SINGLE_THREAD_P(v1);						      \
-    bne zero, v1, L(pseudo_cancel);					      \
-    .set noreorder;							      \
-    li v0, SYS_ify(syscall_name);					      \
-    syscall;								      \
-    .set reorder;							      \
-    bne a3, zero, SYSCALL_ERROR_LABEL;			       		      \
-    RESTORESTK;								      \
-    ret;								      \
-  L(pseudo_cancel):							      \
-    cfi_adjust_cfa_offset (STKSPACE);					      \
-    REG_S ra, STKOFF_RA(sp);						      \
-    cfi_rel_offset (ra, STKOFF_RA);					      \
-    PUSHARGS_##args;			/* save syscall args */	      	      \
-    CENABLE;								      \
-    REG_S v0, STKOFF_SVMSK(sp);		/* save mask */			      \
-    POPARGS_##args;			/* restore syscall args */	      \
-    .set noreorder;							      \
-    li v0, SYS_ify (syscall_name);				      	      \
-    syscall;								      \
-    .set reorder;							      \
-    REG_S v0, STKOFF_SC_V0(sp);		/* save syscall result */             \
-    REG_S a3, STKOFF_SC_ERR(sp);	/* save syscall error flag */	      \
-    REG_L a0, STKOFF_SVMSK(sp);		/* pass mask as arg1 */		      \
-    CDISABLE;								      \
-    REG_L a3, STKOFF_SC_ERR(sp);	/* restore syscall error flag */      \
-    REG_L ra, STKOFF_RA(sp);		/* restore return address */	      \
-    REG_L v0, STKOFF_SC_V0(sp);		/* restore syscall result */          \
-    bne a3, zero, SYSCALL_ERROR_LABEL;					      \
-    RESTORESTK;								      \
-  L(pseudo_end):
-#endif
-
-# undef PSEUDO_END
-# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
-
-# define PUSHARGS_0	/* nothing to do */
-# define PUSHARGS_1	PUSHARGS_0 REG_S a0, STKOFF_A0(sp); cfi_rel_offset (a0, STKOFF_A0);
-# define PUSHARGS_2	PUSHARGS_1 REG_S a1, STKOFF_A1(sp); cfi_rel_offset (a1, STKOFF_A1);
-# define PUSHARGS_3	PUSHARGS_2 REG_S a2, STKOFF_A2(sp); cfi_rel_offset (a2, STKOFF_A2);
-# define PUSHARGS_4	PUSHARGS_3 REG_S a3, STKOFF_A3(sp); cfi_rel_offset (a3, STKOFF_A3);
-# define PUSHARGS_5	PUSHARGS_4 REG_S a4, STKOFF_A4(sp); cfi_rel_offset (a3, STKOFF_A4);
-# define PUSHARGS_6	PUSHARGS_5 REG_S a5, STKOFF_A5(sp); cfi_rel_offset (a3, STKOFF_A5);
-
-# define POPARGS_0	/* nothing to do */
-# define POPARGS_1	POPARGS_0 REG_L a0, STKOFF_A0(sp);
-# define POPARGS_2	POPARGS_1 REG_L a1, STKOFF_A1(sp);
-# define POPARGS_3	POPARGS_2 REG_L a2, STKOFF_A2(sp);
-# define POPARGS_4	POPARGS_3 REG_L a3, STKOFF_A3(sp);
-# define POPARGS_5	POPARGS_4 REG_L a4, STKOFF_A4(sp);
-# define POPARGS_6	POPARGS_5 REG_L a5, STKOFF_A5(sp);
-
-/* Save an even number of slots.  Should be 0 if an even number of slots
-   are used below, or SZREG if an odd number are used.  */
-# ifdef __PIC__
-#  define STK_PAD	SZREG
-# else
-#  define STK_PAD	0
-# endif
-
-/* Place values that we are more likely to use later in this sequence, i.e.
-   closer to the SP at function entry.  If you do that, the are more
-   likely to already be in your d-cache.  */
-# define STKOFF_A5	(STK_PAD)
-# define STKOFF_A4	(STKOFF_A5 + SZREG)
-# define STKOFF_A3	(STKOFF_A4 + SZREG)
-# define STKOFF_A2	(STKOFF_A3 + SZREG)	/* MT and more args.  */
-# define STKOFF_A1	(STKOFF_A2 + SZREG)	/* MT and 2 args.  */
-# define STKOFF_A0	(STKOFF_A1 + SZREG)	/* MT and 1 arg.  */
-# define STKOFF_RA	(STKOFF_A0 + SZREG)	/* Used if MT.  */
-# define STKOFF_SC_V0	(STKOFF_RA + SZREG)	/* Used if MT.  */
-# define STKOFF_SC_ERR	(STKOFF_SC_V0 + SZREG)	/* Used if MT.  */
-# define STKOFF_SVMSK	(STKOFF_SC_ERR + SZREG)	/* Used if MT.  */
-
-# ifdef __PIC__
-#  define STKOFF_GP	(STKOFF_SVMSK + SZREG)	/* Always used.  */
-#  define STKSPACE	(STKOFF_GP + SZREG)
-# else
-#  define STKSPACE	(STKOFF_SVMSK + SZREG)
-# endif
-
-# define SAVESTK 	PTR_SUBU sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)
-# define RESTORESTK 	PTR_ADDU sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)
-
-# ifdef __PIC__
-#  define PSEUDO_JMP(sym) PTR_LA t9, sym; jalr t9
-# else
-#  define PSEUDO_JMP(sym) jal sym
-# endif
-
-# if IS_IN (libpthread)
-#  define CENABLE	PSEUDO_JMP (__pthread_enable_asynccancel)
-#  define CDISABLE	PSEUDO_JMP (__pthread_disable_asynccancel)
-# elif IS_IN (librt)
-#  define CENABLE	PSEUDO_JMP (__librt_enable_asynccancel)
-#  define CDISABLE	PSEUDO_JMP (__librt_disable_asynccancel)
-# else
-#  define CENABLE	PSEUDO_JMP (__libc_enable_asynccancel)
-#  define CDISABLE	PSEUDO_JMP (__libc_disable_asynccancel)
-# endif
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P						\
-	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\
-					 header.multiple_threads)	\
-			  == 0, 1)
-# else
-#  define SINGLE_THREAD_P(reg)						\
-	READ_THREAD_POINTER(reg);					\
-	lw reg, MULTIPLE_THREADS_OFFSET(reg)
-#endif
-
-#elif !defined __ASSEMBLER__
-
-# define SINGLE_THREAD_P 1
-# define NO_CANCELLATION 1
-
-#endif
-
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
-  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
-				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
index 0e45f00..fe9a3fc 100644
--- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
@@ -18,173 +18,22 @@ 
 #include <sysdep.h>
 #include <sysdeps/generic/sysdep.h>
 #include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-# ifdef __PIC__
-#  define PSEUDO_CPLOAD .cpload t9;
-#  define PSEUDO_ERRJMP la t9, __syscall_error; jr t9;
-#  define PSEUDO_SAVEGP sw gp, 32(sp); cfi_rel_offset (gp, 32);
-#  define PSEUDO_LOADGP lw gp, 32(sp);
-# else
-#  define PSEUDO_CPLOAD
-#  define PSEUDO_ERRJMP j __syscall_error;
-#  define PSEUDO_SAVEGP
-#  define PSEUDO_LOADGP
-# endif
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				      \
-      .align 2;								      \
-      .set nomips16;							      \
-  L(pseudo_start):							      \
-      cfi_startproc;							      \
-  99: PSEUDO_ERRJMP							      \
-  .type __##syscall_name##_nocancel, @function;				      \
-  .globl __##syscall_name##_nocancel;					      \
-  __##syscall_name##_nocancel:						      \
-    .set noreorder;							      \
-    PSEUDO_CPLOAD							      \
-    li v0, SYS_ify(syscall_name);					      \
-    syscall;								      \
-    .set reorder;							      \
-    bne a3, zero, 99b;					       		      \
-    ret;								      \
-    cfi_endproc;							      \
-  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
-  ENTRY (name)								      \
-    .set noreorder;							      \
-    PSEUDO_CPLOAD							      \
-    .set reorder;							      \
-    SINGLE_THREAD_P(v1);						      \
-    bne zero, v1, L(pseudo_cancel);					      \
-    .set noreorder;							      \
-    li v0, SYS_ify(syscall_name);					      \
-    syscall;								      \
-    .set reorder;							      \
-    bne a3, zero, 99b;					       		      \
-    ret;								      \
-  L(pseudo_cancel):							      \
-    SAVESTK_##args;						              \
-    sw ra, 28(sp);							      \
-    cfi_rel_offset (ra, 28);						      \
-    PSEUDO_SAVEGP							      \
-    PUSHARGS_##args;			/* save syscall args */	      	      \
-    CENABLE;								      \
-    PSEUDO_LOADGP							      \
-    sw v0, 44(sp);			/* save mask */			      \
-    POPARGS_##args;			/* restore syscall args */	      \
-    .set noreorder;							      \
-    li v0, SYS_ify (syscall_name);				      	      \
-    syscall;								      \
-    .set reorder;							      \
-    sw v0, 36(sp);			/* save syscall result */             \
-    sw a3, 40(sp);			/* save syscall error flag */	      \
-    lw a0, 44(sp);			/* pass mask as arg1 */		      \
-    CDISABLE;								      \
-    PSEUDO_LOADGP							      \
-    lw v0, 36(sp);			/* restore syscall result */          \
-    lw a3, 40(sp);			/* restore syscall error flag */      \
-    lw ra, 28(sp);			/* restore return address */	      \
-    .set noreorder;							      \
-    bne a3, zero, 99b;							      \
-     RESTORESTK;						              \
-  L(pseudo_end):							      \
-    .set reorder;
-
-# undef PSEUDO_END
-# define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
-
-# define PUSHARGS_0	/* nothing to do */
-# define PUSHARGS_1	PUSHARGS_0 sw a0, 0(sp); cfi_rel_offset (a0, 0);
-# define PUSHARGS_2	PUSHARGS_1 sw a1, 4(sp); cfi_rel_offset (a1, 4);
-# define PUSHARGS_3	PUSHARGS_2 sw a2, 8(sp); cfi_rel_offset (a2, 8);
-# define PUSHARGS_4	PUSHARGS_3 sw a3, 12(sp); cfi_rel_offset (a3, 12);
-# define PUSHARGS_5	PUSHARGS_4 /* handled by SAVESTK_## */
-# define PUSHARGS_6	PUSHARGS_5
-# define PUSHARGS_7	PUSHARGS_6
-
-# define POPARGS_0	/* nothing to do */
-# define POPARGS_1	POPARGS_0 lw a0, 0(sp);
-# define POPARGS_2	POPARGS_1 lw a1, 4(sp);
-# define POPARGS_3	POPARGS_2 lw a2, 8(sp);
-# define POPARGS_4	POPARGS_3 lw a3, 12(sp);
-# define POPARGS_5	POPARGS_4 /* args already in new stackframe */
-# define POPARGS_6	POPARGS_5
-# define POPARGS_7	POPARGS_6
-
-
-# define STKSPACE	48
-# define SAVESTK_0 	subu sp, STKSPACE; cfi_adjust_cfa_offset(STKSPACE)
-# define SAVESTK_1      SAVESTK_0
-# define SAVESTK_2      SAVESTK_1
-# define SAVESTK_3      SAVESTK_2
-# define SAVESTK_4      SAVESTK_3
-# define SAVESTK_5      lw t0, 16(sp);		\
-			SAVESTK_0;		\
-			sw t0, 16(sp)
-
-# define SAVESTK_6      lw t0, 16(sp);		\
-			lw t1, 20(sp);		\
-			SAVESTK_0;		\
-			sw t0, 16(sp);		\
-			sw t1, 20(sp)
-
-# define SAVESTK_7      lw t0, 16(sp);		\
-			lw t1, 20(sp);		\
-			lw t2, 24(sp);		\
-			SAVESTK_0;		\
-			sw t0, 16(sp);		\
-			sw t1, 20(sp);		\
-			sw t2, 24(sp)
-
-# define RESTORESTK 	addu sp, STKSPACE; cfi_adjust_cfa_offset(-STKSPACE)
-
-
-# ifdef __PIC__
-/* We use jalr rather than jal.  This means that the assembler will not
-   automatically restore $gp (in case libc has multiple GOTs) so we must
-   do it manually - which we have to do anyway since we don't use .cprestore.
-   It also shuts up the assembler warning about not using .cprestore.  */
-#  define PSEUDO_JMP(sym) la t9, sym; jalr t9;
-# else
-#  define PSEUDO_JMP(sym) jal sym;
-# endif
-
-# if IS_IN (libpthread)
-#  define CENABLE	PSEUDO_JMP (__pthread_enable_asynccancel)
-#  define CDISABLE	PSEUDO_JMP (__pthread_disable_asynccancel)
-# elif IS_IN (librt)
-#  define CENABLE	PSEUDO_JMP (__librt_enable_asynccancel)
-#  define CDISABLE	PSEUDO_JMP (__librt_disable_asynccancel)
-# else
-#  define CENABLE	PSEUDO_JMP (__libc_enable_asynccancel)
-#  define CDISABLE	PSEUDO_JMP (__libc_disable_asynccancel)
-# endif
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P						\
+# define SINGLE_THREAD_P						\
 	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\
 					 header.multiple_threads)	\
 			  == 0, 1)
-# else
-#  define SINGLE_THREAD_P(reg)						\
-	READ_THREAD_POINTER(reg);					\
-	lw reg, MULTIPLE_THREADS_OFFSET(reg)
-#endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 # define SINGLE_THREAD_P 1
 # define NO_CANCELLATION 1
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
index 47b92d9..7647363 100644
--- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
@@ -18,124 +18,22 @@ 
 
 #include <sysdep.h>
 #include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				      \
-  .type __##syscall_name##_nocancel, @function;				      \
-  .globl __##syscall_name##_nocancel;					      \
-  __##syscall_name##_nocancel:						      \
-    cfi_startproc;                                                            \
-    DO_CALL (syscall_name, args);                                             \
-    bne r7, zero, SYSCALL_ERROR_LABEL;                                        \
-    ret;                                                                      \
-    cfi_endproc;                                                              \
-  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
-  ENTRY (name)								      \
-    SINGLE_THREAD_P(r2);						      \
-    bne r2, zero, pseudo_cancel;					      \
-    DO_CALL (syscall_name, args);					      \
-    bne r7, zero, SYSCALL_ERROR_LABEL;                                        \
-    ret;								      \
-  pseudo_cancel:							      \
-    SAVESTK_##args;                 /* save syscall args and adjust stack */  \
-    SAVEREG(ra, 0);                     /* save return address */             \
-    SAVEREG(r22, 4);                    /* save GOT pointer */                \
-    nextpc r22;                                                               \
-1:  movhi r2, %hiadj(_gp_got - 1b);					      \
-    addi r2, r2, %lo(_gp_got - 1b);					      \
-    add r22, r22, r2;                                                         \
-    CENABLE;                                                                  \
-    callr r3;                                                                 \
-    stw r2, 8(sp);                      /* save mask */                       \
-    LOADARGS_##args;                                                          \
-    movi r2, SYS_ify(syscall_name);                                           \
-    trap;                                                                     \
-    stw r2, 12(sp);                     /* save syscall result */             \
-    stw r7, 16(sp);                     /* save syscall error flag */         \
-    ldw r4, 8(sp);                      /* pass mask as argument 1 */         \
-    CDISABLE;                                                                 \
-    callr r3;                                                                 \
-    ldw r7, 16(sp);                     /* restore syscall error flag */      \
-    ldw r2, 12(sp);                     /* restore syscall result */          \
-    ldw ra, 0(sp);                      /* restore return address */          \
-    ldw r22, 4(sp);                     /* restore GOT pointer */             \
-    RESTORESTK_##args;                                                        \
-    bne r7, zero, SYSCALL_ERROR_LABEL;
-
-
-# undef PSEUDO_END
-# define PSEUDO_END(sym) \
-  SYSCALL_ERROR_HANDLER \
-  END (sym)
-
-#define SAVEREG(REG, LOC) stw REG, LOC(sp); cfi_rel_offset (REG, LOC)
-#define SAVESTK(X) subi sp, sp, X; cfi_adjust_cfa_offset(X)
-#define SAVESTK_0 SAVESTK(20)
-#define SAVEARG_1 SAVEREG(r4, 20)
-#define SAVESTK_1 SAVESTK(24); SAVEARG_1
-#define SAVEARG_2 SAVEREG(r5, 24); SAVEARG_1
-#define SAVESTK_2 SAVESTK(28); SAVEARG_2
-#define SAVEARG_3 SAVEREG(r6, 28); SAVEARG_2
-#define SAVESTK_3 SAVESTK(32); SAVEARG_3
-#define SAVEARG_4 SAVEREG(r7, 32); SAVEARG_3
-#define SAVESTK_4 SAVESTK(36); SAVEARG_4
-#define SAVESTK_5 SAVESTK_4
-#define SAVESTK_6 SAVESTK_5
-
-#define LOADARGS_0
-#define LOADARGS_1 ldw r4, 20(sp)
-#define LOADARGS_2 LOADARGS_1; ldw r5, 24(sp)
-#define LOADARGS_3 LOADARGS_2; ldw r6, 28(sp)
-#define LOADARGS_4 LOADARGS_3; ldw r7, 32(sp)
-#define LOADARGS_5 LOADARGS_4; ldw r8, 36(sp)
-#define LOADARGS_6 LOADARGS_5; ldw r9, 40(sp)
-
-#define RESTORESTK(X) addi sp, sp, X; cfi_adjust_cfa_offset(-X)
-#define RESTORESTK_0 RESTORESTK(20)
-#define RESTORESTK_1 RESTORESTK(24)
-#define RESTORESTK_2 RESTORESTK(28)
-#define RESTORESTK_3 RESTORESTK(32)
-#define RESTORESTK_4 RESTORESTK(36)
-#define RESTORESTK_5 RESTORESTK(36)
-#define RESTORESTK_6 RESTORESTK(36)
-
-# if IS_IN (libpthread)
-#  define CENABLE	ldw r3, %call(__pthread_enable_asynccancel)(r22)
-#  define CDISABLE	ldw r3, %call(__pthread_disable_asynccancel)(r22)
-# elif IS_IN (librt)
-#  define CENABLE	ldw r3, %call(__librt_enable_asynccancel)(r22)
-#  define CDISABLE	ldw r3, %call(__librt_disable_asynccancel)(r22)
-# elif IS_IN (libc)
-#  define CENABLE	ldw r3, %call(__libc_enable_asynccancel)(r22)
-#  define CDISABLE	ldw r3, %call(__libc_disable_asynccancel)(r22)
-# else
-#  error Unsupported library
-# endif
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P						\
+# define SINGLE_THREAD_P						\
 	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\
 					 header.multiple_threads)	\
 			  == 0, 1)
-# else
-#  define SINGLE_THREAD_P(reg)						\
-	ldw reg, MULTIPLE_THREADS_OFFSET(r23)
-#endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 # define SINGLE_THREAD_P 1
 # define NO_CANCELLATION 1
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
deleted file mode 100644
index 35d3f05..0000000
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h
+++ /dev/null
@@ -1,118 +0,0 @@ 
-/* Cancellable system call stubs.  Linux/PowerPC version.
-   Copyright (C) 2003-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.
-
-   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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				\
-  .section ".text";							\
-  ENTRY (name)								\
-    SINGLE_THREAD_P;							\
-    bne- .Lpseudo_cancel;						\
-  .type __##syscall_name##_nocancel,@function;				\
-  .globl __##syscall_name##_nocancel;					\
-  __##syscall_name##_nocancel:						\
-    DO_CALL (SYS_ify (syscall_name));					\
-    PSEUDO_RET;								\
-  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	\
-  .Lpseudo_cancel:							\
-    stwu 1,-48(1);							\
-    cfi_adjust_cfa_offset (48);						\
-    mflr 9;								\
-    stw 9,52(1);							\
-    cfi_offset (lr, 4);							\
-    DOCARGS_##args;	/* save syscall args around CENABLE.  */	\
-    CENABLE;								\
-    stw 3,16(1);	/* store CENABLE return value (MASK).  */	\
-    UNDOCARGS_##args;	/* restore syscall args.  */			\
-    DO_CALL (SYS_ify (syscall_name));					\
-    mfcr 0;		/* save CR/R3 around CDISABLE.  */		\
-    stw 3,8(1);								\
-    stw 0,12(1);							\
-    lwz 3,16(1);	/* pass MASK to CDISABLE.  */			\
-    CDISABLE;								\
-    lwz 4,52(1);							\
-    lwz 0,12(1);	/* restore CR/R3. */				\
-    lwz 3,8(1);								\
-    mtlr 4;								\
-    mtcr 0;								\
-    addi 1,1,48;
-
-# define DOCARGS_0
-# define UNDOCARGS_0
-
-# define DOCARGS_1	stw 3,20(1); DOCARGS_0
-# define UNDOCARGS_1	lwz 3,20(1); UNDOCARGS_0
-
-# define DOCARGS_2	stw 4,24(1); DOCARGS_1
-# define UNDOCARGS_2	lwz 4,24(1); UNDOCARGS_1
-
-# define DOCARGS_3	stw 5,28(1); DOCARGS_2
-# define UNDOCARGS_3	lwz 5,28(1); UNDOCARGS_2
-
-# define DOCARGS_4	stw 6,32(1); DOCARGS_3
-# define UNDOCARGS_4	lwz 6,32(1); UNDOCARGS_3
-
-# define DOCARGS_5	stw 7,36(1); DOCARGS_4
-# define UNDOCARGS_5	lwz 7,36(1); UNDOCARGS_4
-
-# define DOCARGS_6	stw 8,40(1); DOCARGS_5
-# define UNDOCARGS_6	lwz 8,40(1); UNDOCARGS_5
-
-# if IS_IN (libpthread)
-#  define CENABLE	bl __pthread_enable_asynccancel@local
-#  define CDISABLE	bl __pthread_disable_asynccancel@local
-# elif IS_IN (libc)
-#  define CENABLE	bl __libc_enable_asynccancel@local
-#  define CDISABLE	bl __libc_disable_asynccancel@local
-# elif IS_IN (librt)
-#  define CENABLE	bl __librt_enable_asynccancel@local
-#  define CDISABLE	bl __librt_disable_asynccancel@local
-# else
-#  error Unsupported library
-# endif
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P						\
-  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\
-				   header.multiple_threads) == 0, 1)
-# else
-#  define SINGLE_THREAD_P						\
-  lwz 10,MULTIPLE_THREADS_OFFSET(2);					\
-  cmpwi 10,0
-# endif
-
-#elif !defined __ASSEMBLER__
-
-# define SINGLE_THREAD_P (1)
-# define NO_CANCELLATION 1
-
-#endif
-
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
-  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
-				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
deleted file mode 100644
index cad13da..0000000
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
+++ /dev/null
@@ -1,147 +0,0 @@ 
-/* Cancellable system call stubs.  Linux/PowerPC64 version.
-   Copyright (C) 2003-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.
-
-   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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# define DASHDASHPFX(str) __##str
-
-#if _CALL_ELF == 2
-#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16+48)
-#define CANCEL_PARM_SAVE (FRAME_MIN_SIZE+16)
-#else
-#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16)
-#define CANCEL_PARM_SAVE (CANCEL_FRAMESIZE+FRAME_PARM_SAVE)
-#endif
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				\
-  .section ".text";							\
-  ENTRY (name)								\
-    SINGLE_THREAD_P;							\
-    bne- .Lpseudo_cancel;						\
-  .type DASHDASHPFX(syscall_name##_nocancel),@function;			\
-  .globl DASHDASHPFX(syscall_name##_nocancel);				\
-  DASHDASHPFX(syscall_name##_nocancel):					\
-    DO_CALL (SYS_ify (syscall_name));					\
-    PSEUDO_RET;								\
-  .size DASHDASHPFX(syscall_name##_nocancel),.-DASHDASHPFX(syscall_name##_nocancel);	\
-  .Lpseudo_cancel:							\
-    stdu 1,-CANCEL_FRAMESIZE(1);					\
-    cfi_adjust_cfa_offset (CANCEL_FRAMESIZE);				\
-    mflr 9;								\
-    std  9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1);				\
-    cfi_offset (lr, FRAME_LR_SAVE);					\
-    DOCARGS_##args;	/* save syscall args around CENABLE.  */	\
-    CENABLE;								\
-    std  3,FRAME_MIN_SIZE(1); /* store CENABLE return value (MASK).  */	\
-    UNDOCARGS_##args;	/* restore syscall args.  */			\
-    DO_CALL (SYS_ify (syscall_name));					\
-    mfcr 0;		/* save CR/R3 around CDISABLE.  */		\
-    std  3,FRAME_MIN_SIZE+8(1);						\
-    std  0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1);				\
-    cfi_offset (cr, FRAME_CR_SAVE);					\
-    ld   3,FRAME_MIN_SIZE(1); /* pass MASK to CDISABLE.  */		\
-    CDISABLE;								\
-    ld   9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1);				\
-    ld   0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); /* restore CR/R3. */	\
-    ld   3,FRAME_MIN_SIZE+8(1);						\
-    mtlr 9;								\
-    mtcr 0;								\
-    addi 1,1,CANCEL_FRAMESIZE;						\
-    cfi_adjust_cfa_offset (-CANCEL_FRAMESIZE);				\
-    cfi_restore (lr);							\
-    cfi_restore (cr)
-
-# define DOCARGS_0
-# define UNDOCARGS_0
-
-# define DOCARGS_1	std 3,CANCEL_PARM_SAVE(1); DOCARGS_0
-# define UNDOCARGS_1	ld 3,CANCEL_PARM_SAVE(1); UNDOCARGS_0
-
-# define DOCARGS_2	std 4,CANCEL_PARM_SAVE+8(1); DOCARGS_1
-# define UNDOCARGS_2	ld 4,CANCEL_PARM_SAVE+8(1); UNDOCARGS_1
-
-# define DOCARGS_3	std 5,CANCEL_PARM_SAVE+16(1); DOCARGS_2
-# define UNDOCARGS_3	ld 5,CANCEL_PARM_SAVE+16(1); UNDOCARGS_2
-
-# define DOCARGS_4	std 6,CANCEL_PARM_SAVE+24(1); DOCARGS_3
-# define UNDOCARGS_4	ld 6,CANCEL_PARM_SAVE+24(1); UNDOCARGS_3
-
-# define DOCARGS_5	std 7,CANCEL_PARM_SAVE+32(1); DOCARGS_4
-# define UNDOCARGS_5	ld 7,CANCEL_PARM_SAVE+32(1); UNDOCARGS_4
-
-# define DOCARGS_6	std 8,CANCEL_PARM_SAVE+40(1); DOCARGS_5
-# define UNDOCARGS_6	ld 8,CANCEL_PARM_SAVE+40(1); UNDOCARGS_5
-
-# if IS_IN (libpthread)
-#  ifdef SHARED
-#   define CENABLE	bl JUMPTARGET(__pthread_enable_asynccancel)
-#   define CDISABLE	bl JUMPTARGET(__pthread_disable_asynccancel)
-#  else
-#   define CENABLE	bl JUMPTARGET(__pthread_enable_asynccancel); nop
-#   define CDISABLE	bl JUMPTARGET(__pthread_disable_asynccancel); nop
-#  endif
-# elif IS_IN (libc)
-#  ifdef SHARED
-#   define CENABLE	bl JUMPTARGET(__libc_enable_asynccancel)
-#   define CDISABLE	bl JUMPTARGET(__libc_disable_asynccancel)
-#  else
-#   define CENABLE	bl JUMPTARGET(__libc_enable_asynccancel); nop
-#   define CDISABLE	bl JUMPTARGET(__libc_disable_asynccancel); nop
-#  endif
-# elif IS_IN (librt)
-#  ifdef SHARED
-#   define CENABLE	bl JUMPTARGET(__librt_enable_asynccancel)
-#   define CDISABLE	bl JUMPTARGET(__librt_disable_asynccancel)
-#  else
-#   define CENABLE	bl JUMPTARGET(__librt_enable_asynccancel); nop
-#   define CDISABLE	bl JUMPTARGET(__librt_disable_asynccancel); nop
-#  endif
-# else
-#  error Unsupported library
-# endif
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P						\
-  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\
-				   header.multiple_threads) == 0, 1)
-# else
-#   define SINGLE_THREAD_P						\
-  lwz   10,MULTIPLE_THREADS_OFFSET(13);				\
-  cmpwi 10,0
-# endif
-
-#elif !defined __ASSEMBLER__
-
-# define SINGLE_THREAD_P (1)
-# define NO_CANCELLATION 1
-
-#endif
-
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
-  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
-				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
new file mode 100644
index 0000000..85af880
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
@@ -0,0 +1,38 @@ 
+/* Cancellable system call stubs.  Linux/PowerPC version.
+   Copyright (C) 2015 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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include <tls.h>
+#include <nptl/pthreadP.h>
+
+#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
+
+# define SINGLE_THREAD_P						\
+  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\
+				   header.multiple_threads) == 0, 1)
+
+#else
+
+# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
+
+#endif
+
+#define RTLD_SINGLE_THREAD_P \
+  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+				   header.multiple_threads) == 0, 1)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
index b1e80bc..82763b7 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
@@ -24,116 +24,17 @@ 
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				      \
-	.text;								      \
-L(pseudo_cancel):							      \
-	cfi_startproc;							      \
-	STM_##args							      \
-	stm	%r12,%r15,48(%r15);					      \
-	cfi_offset (%r15, -36);						      \
-	cfi_offset (%r14, -40);						      \
-	cfi_offset (%r13, -44);						      \
-	cfi_offset (%r12, -48);						      \
-	lr	%r14,%r15;						      \
-	ahi	%r15,-96;						      \
-	cfi_adjust_cfa_offset (96);					      \
-	st	%r14,0(%r15);						      \
-	basr    %r13,0;							      \
-0:	l	%r1,1f-0b(%r13);					      \
-	bas	%r14,0(%r1,%r13);					      \
-	lr	%r0,%r2;						      \
-	LM_##args							      \
-	.if SYS_ify (syscall_name) < 256;				      \
-	svc SYS_ify (syscall_name);					      \
-	.else;								      \
-	lhi %r1,SYS_ify (syscall_name);					      \
-	svc 0;								      \
-	.endif;								      \
-	LR7_##args							      \
-	l	%r1,2f-0b(%r13);					      \
-	lr	%r12,%r2;						      \
-	lr	%r2,%r0;						      \
-	bas	%r14,0(%r1,%r13);					      \
-	lr	%r2,%r12;						      \
-	lm	%r12,%r15,48+96(%r15);					      \
-	cfi_endproc;							      \
-	j	L(pseudo_check);					      \
-1:	.long	CENABLE-0b;						      \
-2:	.long	CDISABLE-0b;						      \
-ENTRY(name)								      \
-	SINGLE_THREAD_P(%r1)						      \
-	jne	L(pseudo_cancel);					      \
-.type	__##syscall_name##_nocancel,@function;				      \
-.globl	__##syscall_name##_nocancel;					      \
-__##syscall_name##_nocancel:						      \
-	DO_CALL(syscall_name, args);					      \
-L(pseudo_check):							      \
-	lhi	%r4,-4095;						      \
-	clr	%r2,%r4;						      \
-	jnl	SYSCALL_ERROR_LABEL;					      \
-.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
-L(pseudo_end):
-
-# if IS_IN (libpthread)
-#  define CENABLE	__pthread_enable_asynccancel
-#  define CDISABLE	__pthread_disable_asynccancel
-# elif IS_IN (libc)
-#  define CENABLE	__libc_enable_asynccancel
-#  define CDISABLE	__libc_disable_asynccancel
-# elif IS_IN (librt)
-#  define CENABLE	__librt_enable_asynccancel
-#  define CDISABLE	__librt_disable_asynccancel
-# else
-#  error Unsupported library
-# endif
-
-#define STM_0		/* Nothing */
-#define STM_1		st %r2,8(%r15);
-#define STM_2		stm %r2,%r3,8(%r15);
-#define STM_3		stm %r2,%r4,8(%r15);
-#define STM_4		stm %r2,%r5,8(%r15);
-#define STM_5		stm %r2,%r5,8(%r15);
-#define STM_6		stm %r2,%r7,8(%r15);
-
-#define LM_0		/* Nothing */
-#define LM_1		l %r2,8+96(%r15);
-#define LM_2		lm %r2,%r3,8+96(%r15);
-#define LM_3		lm %r2,%r4,8+96(%r15);
-#define LM_4		lm %r2,%r5,8+96(%r15);
-#define LM_5		lm %r2,%r5,8+96(%r15);
-#define LM_6		lm %r2,%r5,8+96(%r15); \
-			cfi_offset (%r7, -68); \
-			l %r7,96+96(%r15);
-
-#define LR7_0		/* Nothing */
-#define LR7_1		/* Nothing */
-#define LR7_2		/* Nothing */
-#define LR7_3		/* Nothing */
-#define LR7_4		/* Nothing */
-#define LR7_5		/* Nothing */
-#define LR7_6		l %r7,28+96(%r15); \
-			cfi_restore (%r7);
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \
 				   header.multiple_threads) == 0, 1)
-# else
-#  define SINGLE_THREAD_P(reg) \
-	ear	reg,%a0;						      \
-	icm	reg,15,MULTIPLE_THREADS_OFFSET(reg);
-# endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 # define SINGLE_THREAD_P (1)
 # define NO_CANCELLATION 1
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
index 9b2c546..952d2af 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
@@ -18,135 +18,36 @@ 
 
 #include <sysdep.h>
 #include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				      \
-	.text;								      \
-L(pseudo_cancel):							      \
-	cfi_startproc;							      \
-	STM_##args							      \
-	stmg	%r13,%r15,104(%r15);					      \
-	cfi_offset (%r15,-40);						      \
-	cfi_offset (%r14,-48);						      \
-	cfi_offset (%r13,-56);						      \
-	lgr	%r14,%r15;						      \
-	aghi	%r15,-160;						      \
-	cfi_adjust_cfa_offset (160);					      \
-	stg	%r14,0(%r15);						      \
-	brasl	%r14,CENABLE;						      \
-	lgr	%r0,%r2;						      \
-	LM_##args							      \
-	.if SYS_ify (syscall_name) < 256;				      \
-	svc SYS_ify (syscall_name);					      \
-	.else;								      \
-	lghi %r1,SYS_ify (syscall_name);				      \
-	svc 0;								      \
-	.endif;								      \
-	LR7_##args							      \
-	lgr	%r13,%r2;						      \
-	lgr	%r2,%r0;						      \
-	brasl	%r14,CDISABLE;						      \
-	lgr	%r2,%r13;						      \
-	lmg	%r13,%r15,104+160(%r15);				      \
-	cfi_endproc;							      \
-	j	L(pseudo_check);					      \
-ENTRY(name)								      \
-	SINGLE_THREAD_P							      \
-	jne	L(pseudo_cancel);					      \
-.type	__##syscall_name##_nocancel,@function;				      \
-.globl	__##syscall_name##_nocancel;					      \
-__##syscall_name##_nocancel:						      \
-	DO_CALL(syscall_name, args);					      \
-L(pseudo_check):							      \
-	lghi	%r4,-4095;						      \
-	clgr	%r2,%r4;						      \
-	jgnl	SYSCALL_ERROR_LABEL;					      \
-.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
-L(pseudo_end):
-
 # if IS_IN (libpthread)
-#  define CENABLE	__pthread_enable_asynccancel
-#  define CDISABLE	__pthread_disable_asynccancel
 #  define __local_multiple_threads	__pthread_multiple_threads
 # elif IS_IN (libc)
-#  define CENABLE	__libc_enable_asynccancel
-#  define CDISABLE	__libc_disable_asynccancel
 #  define __local_multiple_threads	__libc_multiple_threads
-# elif IS_IN (librt)
-#  define CENABLE	__librt_enable_asynccancel
-#  define CDISABLE	__librt_disable_asynccancel
-# else
-#  error Unsupported library
 # endif
 
-#define STM_0		/* Nothing */
-#define STM_1		stg %r2,16(%r15);
-#define STM_2		stmg %r2,%r3,16(%r15);
-#define STM_3		stmg %r2,%r4,16(%r15);
-#define STM_4		stmg %r2,%r5,16(%r15);
-#define STM_5		stmg %r2,%r5,16(%r15);
-#define STM_6		stmg %r2,%r7,16(%r15);
-
-#define LM_0		/* Nothing */
-#define LM_1		lg %r2,16+160(%r15);
-#define LM_2		lmg %r2,%r3,16+160(%r15);
-#define LM_3		lmg %r2,%r4,16+160(%r15);
-#define LM_4		lmg %r2,%r5,16+160(%r15);
-#define LM_5		lmg %r2,%r5,16+160(%r15);
-#define LM_6		lmg %r2,%r5,16+160(%r15); \
-			cfi_offset (%r7, -104); \
-			lg %r7,160+160(%r15);
-
-#define LR7_0		/* Nothing */
-#define LR7_1		/* Nothing */
-#define LR7_2		/* Nothing */
-#define LR7_3		/* Nothing */
-#define LR7_4		/* Nothing */
-#define LR7_5		/* Nothing */
-#define LR7_6		lg %r7,56+160(%r15); \
-			cfi_restore (%r7);
-
 # if IS_IN (libpthread) || IS_IN (libc)
-#  ifndef __ASSEMBLER__
 extern int __local_multiple_threads attribute_hidden;
-#   define SINGLE_THREAD_P \
+#  define SINGLE_THREAD_P \
   __builtin_expect (__local_multiple_threads == 0, 1)
-#  else
-#   define SINGLE_THREAD_P \
-	larl	%r1,__local_multiple_threads;				      \
-	icm	%r0,15,0(%r1);
-#  endif
 
 # else
 
-#  ifndef __ASSEMBLER__
-#   define SINGLE_THREAD_P \
+#  define SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \
 				   header.multiple_threads) == 0, 1)
-#  else
-#   define SINGLE_THREAD_P \
-	ear	%r1,%a0;						      \
-	sllg	%r1,%r1,32;						      \
-	ear	%r1,%a1;						      \
-	icm	%r1,15,MULTIPLE_THREADS_OFFSET(%r1);
-#  endif
 
 # endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 # define SINGLE_THREAD_P (1)
 # define NO_CANCELLATION 1
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
index 5645cad..1ea501b 100644
--- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
@@ -23,147 +23,17 @@ 
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-# define _IMM12 #-12
-# define _IMM16 #-16
-# define _IMP16 #16
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args) \
-  .text; \
-  ENTRY (name); \
-  .Lpseudo_start: \
-    SINGLE_THREAD_P; \
-    bf .Lpseudo_cancel; \
-    .type __##syscall_name##_nocancel,@function; \
-    .globl __##syscall_name##_nocancel; \
-    __##syscall_name##_nocancel: \
-    DO_CALL (syscall_name, args); \
-    mov r0,r1; \
-    mov _IMM12,r2; \
-    shad r2,r1; \
-    not r1,r1; \
-    tst r1,r1; \
-    bt .Lsyscall_error; \
-    bra .Lpseudo_end; \
-     nop; \
-    .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
- .Lpseudo_cancel: \
-    sts.l pr,@-r15; \
-    cfi_adjust_cfa_offset (4); \
-    cfi_rel_offset (pr, 0); \
-    add _IMM16,r15; \
-    cfi_adjust_cfa_offset (16); \
-    SAVE_ARGS_##args; \
-    CENABLE; \
-    LOAD_ARGS_##args; \
-    add _IMP16,r15; \
-    cfi_adjust_cfa_offset (-16); \
-    lds.l @r15+,pr; \
-    cfi_adjust_cfa_offset (-4); \
-    cfi_restore (pr); \
-    DO_CALL(syscall_name, args); \
-    SYSCALL_INST_PAD; \
-    sts.l pr,@-r15; \
-    cfi_adjust_cfa_offset (4); \
-    cfi_rel_offset (pr, 0); \
-    mov.l r0,@-r15; \
-    cfi_adjust_cfa_offset (4); \
-    cfi_rel_offset (r0, 0); \
-    CDISABLE; \
-    mov.l @r15+,r0; \
-    cfi_adjust_cfa_offset (-4); \
-    cfi_restore (r0); \
-    lds.l @r15+,pr; \
-    cfi_adjust_cfa_offset (-4); \
-    cfi_restore (pr); \
-    mov r0,r1; \
-    mov _IMM12,r2; \
-    shad r2,r1; \
-    not r1,r1; \
-    tst r1,r1; \
-    bf .Lpseudo_end; \
- .Lsyscall_error: \
-    SYSCALL_ERROR_HANDLER; \
- .Lpseudo_end:
-
-# undef PSEUDO_END
-# define PSEUDO_END(sym) \
-  END (sym)
-
-# define SAVE_ARGS_0	/* Nothing.  */
-# define SAVE_ARGS_1	SAVE_ARGS_0; mov.l r4,@(0,r15); cfi_offset (r4,-4)
-# define SAVE_ARGS_2	SAVE_ARGS_1; mov.l r5,@(4,r15); cfi_offset (r5,-8)
-# define SAVE_ARGS_3	SAVE_ARGS_2; mov.l r6,@(8,r15); cfi_offset (r6,-12)
-# define SAVE_ARGS_4	SAVE_ARGS_3; mov.l r7,@(12,r15); cfi_offset (r7,-16)
-# define SAVE_ARGS_5	SAVE_ARGS_4
-# define SAVE_ARGS_6	SAVE_ARGS_5
-
-# define LOAD_ARGS_0	/* Nothing.  */
-# define LOAD_ARGS_1	LOAD_ARGS_0; mov.l @(0,r15),r4; cfi_restore (r4)
-# define LOAD_ARGS_2	LOAD_ARGS_1; mov.l @(4,r15),r5; cfi_restore (r5)
-# define LOAD_ARGS_3	LOAD_ARGS_2; mov.l @(8,r15),r6; cfi_restore (r6)
-# define LOAD_ARGS_4	LOAD_ARGS_3; mov.l @(12,r15),r7; cfi_restore (r7)
-# define LOAD_ARGS_5	LOAD_ARGS_4
-# define LOAD_ARGS_6	LOAD_ARGS_5
-
-# if IS_IN (libpthread)
-#  define __local_enable_asynccancel	__pthread_enable_asynccancel
-#  define __local_disable_asynccancel	__pthread_disable_asynccancel
-# elif IS_IN (libc)
-#  define __local_enable_asynccancel	__libc_enable_asynccancel
-#  define __local_disable_asynccancel	__libc_disable_asynccancel
-# elif IS_IN (librt)
-#  define __local_enable_asynccancel	__librt_enable_asynccancel
-#  define __local_disable_asynccancel	__librt_disable_asynccancel
-# else
-#  error Unsupported library
-# endif
-
-# define CENABLE \
-	mov.l 1f,r0; \
-	bsrf r0; \
-	 nop; \
-     0: bra 2f; \
-	 mov r0,r2; \
-	.align 2; \
-     1: .long __local_enable_asynccancel - 0b; \
-     2:
-
-# define CDISABLE \
-	mov.l 1f,r0; \
-	bsrf r0; \
-	 mov r2,r4; \
-     0: bra 2f; \
-	 nop; \
-	.align 2; \
-     1: .long __local_disable_asynccancel - 0b; \
-     2:
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P \
+# define SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-# else
-#  define SINGLE_THREAD_P \
-	stc gbr,r0; \
-	mov.w 0f,r1; \
-	sub r1,r0; \
-	mov.l @(MULTIPLE_THREADS_OFFSET,r0),r0; \
-	bra 1f; \
-	 tst r0,r0; \
-     0: .word TLS_PRE_TCB_SIZE; \
-     1:
-
-# endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 # define SINGLE_THREAD_P (1)
 # define NO_CANCELLATION 1
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
deleted file mode 100644
index c513212..0000000
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h
+++ /dev/null
@@ -1,111 +0,0 @@ 
-/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
-
-   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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)	\
-	.text;					\
-	.globl		__syscall_error;	\
-ENTRY(name)					\
-	ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\
-	cmp %g1, 0;				\
-	bne 1f;					\
-.type	__##syscall_name##_nocancel,@function;	\
-.globl	__##syscall_name##_nocancel;		\
-__##syscall_name##_nocancel:			\
-	 mov SYS_ify(syscall_name), %g1;	\
-	ta 0x10;				\
-	bcc 8f;					\
-	 mov %o7, %g1;				\
-	call __syscall_error;			\
-	 mov %g1, %o7;				\
-8:	jmpl %o7 + 8, %g0;			\
-	 nop;					\
-.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\
-1:	save %sp, -96, %sp;			\
-	cfi_def_cfa_register(%fp);		\
-	cfi_window_save;			\
-	cfi_register(%o7, %i7);			\
-	CENABLE;				\
-	 nop;					\
-	mov %o0, %l0;				\
-	COPY_ARGS_##args			\
-	mov SYS_ify(syscall_name), %g1;		\
-	ta 0x10;				\
-	bcc 1f;					\
-	 mov %o0, %l1;				\
-	CDISABLE;				\
-	 mov %l0, %o0;				\
-	call __syscall_error;			\
-	 mov %l1, %o0;				\
-	b 2f;					\
-	 mov -1, %l1;				\
-1:	CDISABLE;				\
-	 mov %l0, %o0;				\
-2:	jmpl %i7 + 8, %g0;			\
-	 restore %g0, %l1, %o0;
-
-
-# if IS_IN (libpthread)
-#  define CENABLE	call __pthread_enable_asynccancel
-#  define CDISABLE	call __pthread_disable_asynccancel
-# elif IS_IN (libc)
-#  define CENABLE	call __libc_enable_asynccancel
-#  define CDISABLE	call __libc_disable_asynccancel
-# elif IS_IN (librt)
-#  define CENABLE	call __librt_enable_asynccancel
-#  define CDISABLE	call __librt_disable_asynccancel
-# else
-#  error Unsupported library
-# endif
-
-#define COPY_ARGS_0	/* Nothing */
-#define COPY_ARGS_1	COPY_ARGS_0 mov %i0, %o0;
-#define COPY_ARGS_2	COPY_ARGS_1 mov %i1, %o1;
-#define COPY_ARGS_3	COPY_ARGS_2 mov %i2, %o2;
-#define COPY_ARGS_4	COPY_ARGS_3 mov %i3, %o3;
-#define COPY_ARGS_5	COPY_ARGS_4 mov %i4, %o4;
-#define COPY_ARGS_6	COPY_ARGS_5 mov %i5, %o5;
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P \
-  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \
-				   header.multiple_threads) == 0, 1)
-# else
-#  define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1
-# endif
-
-#elif !defined __ASSEMBLER__
-
-# define SINGLE_THREAD_P (1)
-# define NO_CANCELLATION 1
-
-#endif
-
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
-  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
-				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
deleted file mode 100644
index 45fbd73..0000000
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h
+++ /dev/null
@@ -1,109 +0,0 @@ 
-/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
-
-   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
-   <http://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)	\
-	.text;					\
-	.globl		__syscall_error;	\
-ENTRY(name)					\
-	ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1;\
-	brnz,pn %g1, 1f;			\
-.type	__##syscall_name##_nocancel,@function;	\
-.globl	__##syscall_name##_nocancel;		\
-__##syscall_name##_nocancel:			\
-	 mov SYS_ify(syscall_name), %g1;	\
-	ta 0x6d;				\
-	bcc,pt %xcc, 8f;			\
-	 mov %o7, %g1;				\
-	call __syscall_error;			\
-	 mov %g1, %o7;				\
-8:	jmpl %o7 + 8, %g0;			\
-	 nop;					\
-.size	__##syscall_name##_nocancel,.-__##syscall_name##_nocancel;\
-1:	save %sp, -192, %sp;			\
-	cfi_def_cfa_register(%fp);		\
-	cfi_window_save;			\
-	cfi_register(%o7, %i7);			\
-	CENABLE;				\
-	 nop;					\
-	mov %o0, %l0;				\
-	COPY_ARGS_##args			\
-	mov SYS_ify(syscall_name), %g1;		\
-	ta 0x6d;				\
-	bcc,pt %xcc, 1f;			\
-	 mov %o0, %l1;				\
-	CDISABLE;				\
-	 mov %l0, %o0;				\
-	call __syscall_error;			\
-	 mov %l1, %o0;				\
-	ba,pt %xcc, 2f;				\
-	 mov -1, %l1;				\
-1:	CDISABLE;				\
-	 mov %l0, %o0;				\
-2:	jmpl %i7 + 8, %g0;			\
-	 restore %g0, %l1, %o0;
-
-# if IS_IN (libpthread)
-#  define CENABLE	call __pthread_enable_asynccancel
-#  define CDISABLE	call __pthread_disable_asynccancel
-# elif IS_IN (libc)
-#  define CENABLE	call __libc_enable_asynccancel
-#  define CDISABLE	call __libc_disable_asynccancel
-# elif IS_IN (librt)
-#  define CENABLE	call __librt_enable_asynccancel
-#  define CDISABLE	call __librt_disable_asynccancel
-# else
-#  error Unsupported library
-# endif
-
-#define COPY_ARGS_0	/* Nothing */
-#define COPY_ARGS_1	COPY_ARGS_0 mov %i0, %o0;
-#define COPY_ARGS_2	COPY_ARGS_1 mov %i1, %o1;
-#define COPY_ARGS_3	COPY_ARGS_2 mov %i2, %o2;
-#define COPY_ARGS_4	COPY_ARGS_3 mov %i3, %o3;
-#define COPY_ARGS_5	COPY_ARGS_4 mov %i4, %o4;
-#define COPY_ARGS_6	COPY_ARGS_5 mov %i5, %o5;
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P \
-  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \
-				   header.multiple_threads) == 0, 1)
-# else
-#  define SINGLE_THREAD_P ld [%g7 + MULTIPLE_THREADS_OFFSET], %g1
-# endif
-
-#elif !defined __ASSEMBLER__
-
-# define SINGLE_THREAD_P (1)
-# define NO_CANCELLATION 1
-
-#endif
-
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
-  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
-				   header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
new file mode 100644
index 0000000..61bfa33
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
@@ -0,0 +1,38 @@ 
+/* Copyright (C) 2002-2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
+
+   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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include <tls.h>
+#include <nptl/pthreadP.h>
+
+#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
+
+# define SINGLE_THREAD_P \
+  __builtin_expect (THREAD_GETMEM (THREAD_SELF,				      \
+				   header.multiple_threads) == 0, 1)
+
+#else
+
+# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
+
+#endif
+
+#define RTLD_SINGLE_THREAD_P \
+  __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
+				   header.multiple_threads) == 0, 1)
diff --git a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
index 092a90c..c8994db 100644
--- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
@@ -18,137 +18,22 @@ 
 
 #include <sysdep.h>
 #include <tls.h>
-#ifndef __ASSEMBLER__
-# include <nptl/pthreadP.h>
-#endif
+#include <nptl/pthreadP.h>
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-/* Allow hacking in some extra code if desired. */
-#ifndef PSEUDO_EXTRA
-#define PSEUDO_EXTRA
-#endif
-
-#undef PSEUDO
-#define PSEUDO(name, syscall_name, args)				      \
-  ENTRY(__##syscall_name##_nocancel);					      \
-    PSEUDO_EXTRA							      \
-    moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name);			      \
-    swint1;								      \
-    BNEZ r1, 0f;							      \
-    jrp lr;								      \
-  END(__##syscall_name##_nocancel);					      \
-  ENTRY (name)								      \
-    SINGLE_THREAD_P(r11);						      \
-    BEQZ r11, L(pseudo_cancel);						      \
-    PSEUDO_EXTRA							      \
-    moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name);			      \
-    swint1;								      \
-    BNEZ r1, 0f;							      \
-    jrp lr;								      \
-  L(pseudo_cancel):							      \
-    {									      \
-     move r11, sp;							      \
-     ST sp, lr;								      \
-     ADDI_PTR sp, sp, -STKSPACE;					      \
-    };									      \
-    cfi_offset (lr, 0);							      \
-    cfi_def_cfa_offset (STKSPACE);					      \
-    {									      \
-     ADDI_PTR r12, sp, REGSIZE;						      \
-     ADDI_PTR r13, sp, 2 * REGSIZE;	/* set up for PUSHARGS_0 */	      \
-    };									      \
-    ST r12, r11;							      \
-    PUSHARGS_##args			/* save syscall args */	      	      \
-    CENABLE;								      \
-    ADDI_PTR r12, sp, 10 * REGSIZE;					      \
-    {									      \
-     ST r12, r0;			/* save mask */			      \
-     ADDI_PTR r13, sp, 2 * REGSIZE;	/* set up for POPARGS_0 */	      \
-    };									      \
-    POPARGS_##args			/* restore syscall args */	      \
-    PSEUDO_EXTRA							      \
-    moveli TREG_SYSCALL_NR_NAME, SYS_ify(syscall_name);			      \
-    swint1;								      \
-    ADDI_PTR r12, sp, 12 * REGSIZE;					      \
-    {									      \
-     ST r12, r1;			/* save syscall result */             \
-     ADDI_PTR r12, sp, 11 * REGSIZE;					      \
-    };									      \
-    {									      \
-     ST r12, r0;			                                      \
-     ADDI_PTR r13, sp, 10 * REGSIZE;					      \
-    };									      \
-    LD r0, r13;				/* pass mask as arg1 */		      \
-    CDISABLE;								      \
-    {									      \
-     ADDI_PTR lr, sp, STKSPACE;						      \
-     ADDI_PTR r0, sp, 11 * REGSIZE;					      \
-    };									      \
-    {									      \
-     LD r0, r0;								      \
-     ADDI_PTR r1, sp, 12 * REGSIZE;					      \
-    };									      \
-    LD r1, r1;								      \
-    {									      \
-     LD lr, lr;								      \
-     ADDI_PTR sp, sp, STKSPACE;						      \
-    };									      \
-    cfi_def_cfa_offset (0);						      \
-    BNEZ r1, 0f
-
-# define PUSHARGS_0 /* nothing to do */
-# define PUSHARGS_1 PUSHARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; ST r13, r0 };
-# define PUSHARGS_2 PUSHARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; ST r14, r1 };
-# define PUSHARGS_3 PUSHARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; ST r13, r2 };
-# define PUSHARGS_4 PUSHARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; ST r14, r3 };
-# define PUSHARGS_5 PUSHARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; ST r13, r4 };
-# define PUSHARGS_6 PUSHARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; ST r14, r5 };
-# define PUSHARGS_7 PUSHARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; ST r13, r6 };
-
-# define POPARGS_0  /* nothing to do */
-# define POPARGS_1  POPARGS_0 { ADDI_PTR r14, sp, 3 * REGSIZE; LD r0, r13 };
-# define POPARGS_2  POPARGS_1 { ADDI_PTR r13, sp, 4 * REGSIZE; LD r1, r14 };
-# define POPARGS_3  POPARGS_2 { ADDI_PTR r14, sp, 5 * REGSIZE; LD r2, r13 };
-# define POPARGS_4  POPARGS_3 { ADDI_PTR r13, sp, 6 * REGSIZE; LD r3, r14 };
-# define POPARGS_5  POPARGS_4 { ADDI_PTR r14, sp, 7 * REGSIZE; LD r4, r13 };
-# define POPARGS_6  POPARGS_5 { ADDI_PTR r13, sp, 8 * REGSIZE; LD r5, r14 };
-# define POPARGS_7  POPARGS_6 { ADDI_PTR r14, sp, 9 * REGSIZE; LD r6, r13 };
-
-# define STKSPACE	(13 * REGSIZE)
-
-# if IS_IN (libpthread)
-#  define CENABLE	jal __pthread_enable_asynccancel
-#  define CDISABLE	jal __pthread_disable_asynccancel
-# elif IS_IN (librt)
-#  define CENABLE	jal __librt_enable_asynccancel
-#  define CDISABLE	jal __librt_disable_asynccancel
-# else
-#  define CENABLE	jal __libc_enable_asynccancel
-#  define CDISABLE	jal __libc_disable_asynccancel
-# endif
-
-# ifndef __ASSEMBLER__
-#  define SINGLE_THREAD_P						\
+# define SINGLE_THREAD_P						\
 	__builtin_expect (THREAD_GETMEM (THREAD_SELF,			\
 					 header.multiple_threads)	\
 			  == 0, 1)
-# else
-#  define SINGLE_THREAD_P(reg)						\
-  ADDLI_PTR reg, tp, MULTIPLE_THREADS_OFFSET;                           \
-  LD reg, reg;                                                          \
-  CMPEQI reg, reg, 0
-#endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 # define SINGLE_THREAD_P 1
 # define NO_CANCELLATION 1
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P                                           \
+#define RTLD_SINGLE_THREAD_P                                           \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF,                         \
                                    header.multiple_threads) == 0, 1)
-#endif
diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
index 6598010..0979bde 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
@@ -24,86 +24,32 @@ 
 
 #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
 
-/* The code to disable cancellation depends on the fact that the called
-   functions are special.  They don't modify registers other than %rax
-   and %r11 if they return.  Therefore we don't have to preserve other
-   registers around these calls.  */
-# undef PSEUDO
-# define PSEUDO(name, syscall_name, args)				      \
-  .text;								      \
-  ENTRY (name)								      \
-    SINGLE_THREAD_P;							      \
-    jne L(pseudo_cancel);						      \
-  .type __##syscall_name##_nocancel,@function;				      \
-  .globl __##syscall_name##_nocancel;					      \
-  __##syscall_name##_nocancel:						      \
-    DO_CALL (syscall_name, args);					      \
-    cmpq $-4095, %rax;							      \
-    jae SYSCALL_ERROR_LABEL;						      \
-    ret;								      \
-  .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	      \
-  L(pseudo_cancel):							      \
-    /* We always have to align the stack before calling a function.  */	      \
-    subq $8, %rsp; cfi_adjust_cfa_offset (8);				      \
-    CENABLE								      \
-    /* The return value from CENABLE is argument for CDISABLE.  */	      \
-    movq %rax, (%rsp);							      \
-    DO_CALL (syscall_name, args);					      \
-    movq (%rsp), %rdi;							      \
-    /* Save %rax since it's the error code from the syscall.  */	      \
-    movq %rax, %rdx;							      \
-    CDISABLE								      \
-    movq %rdx, %rax;							      \
-    addq $8,%rsp; cfi_adjust_cfa_offset (-8);				      \
-    cmpq $-4095, %rax;							      \
-    jae SYSCALL_ERROR_LABEL
-
-
 # if IS_IN (libpthread)
-#  define CENABLE	call __pthread_enable_asynccancel;
-#  define CDISABLE	call __pthread_disable_asynccancel;
 #  define __local_multiple_threads __pthread_multiple_threads
 # elif IS_IN (libc)
-#  define CENABLE	call __libc_enable_asynccancel;
-#  define CDISABLE	call __libc_disable_asynccancel;
 #  define __local_multiple_threads __libc_multiple_threads
 # elif IS_IN (librt)
-#  define CENABLE	call __librt_enable_asynccancel;
-#  define CDISABLE	call __librt_disable_asynccancel;
 # else
 #  error Unsupported library
 # endif
 
 # if IS_IN (libpthread) || IS_IN (libc)
-#  ifndef __ASSEMBLER__
 extern int __local_multiple_threads attribute_hidden;
-#   define SINGLE_THREAD_P \
+#  define SINGLE_THREAD_P \
   __builtin_expect (__local_multiple_threads == 0, 1)
-#  else
-#   define SINGLE_THREAD_P cmpl $0, __local_multiple_threads(%rip)
-#  endif
-
 # else
-
-#  ifndef __ASSEMBLER__
-#   define SINGLE_THREAD_P \
+#  define SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#  else
-#   define SINGLE_THREAD_P cmpl $0, %fs:MULTIPLE_THREADS_OFFSET
-#  endif
-
 # endif
 
-#elif !defined __ASSEMBLER__
+#else
 
 # define SINGLE_THREAD_P (1)
 # define NO_CANCELLATION 1
 
 #endif
 
-#ifndef __ASSEMBLER__
-# define RTLD_SINGLE_THREAD_P \
+#define RTLD_SINGLE_THREAD_P \
   __builtin_expect (THREAD_GETMEM (THREAD_SELF, \
 				   header.multiple_threads) == 0, 1)
-#endif