Movatterモバイル変換
[0]ホーム
This is the mail archive of thelibc-alpha@sourceware.orgmailing list for theglibc project.
[PATCH 14/14] Remove cancellation support for syscall generation
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Thu, 3 Aug 2017 10:11:14 -0300
- Subject: [PATCH 14/14] Remove cancellation support for syscall generation
- Authentication-results: sourceware.org; auth=none
- References: <1501765874-6201-1-git-send-email-adhemerval.zanella@linaro.org>
This patch removes the cancellation mark from the auto-generation syscallscript. Now all the cancellable syscalls are done throught C code usingthe SYSCALL_CANCEL macro. It simplifies the assembly required to eacharchitecture port, since the SYSCALL_CANCEL uses the already definedINLINE_SYSCALL macros, and allows a more straigh fix on cancellationmachanism (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 forsyscall definitions.* sysdeps/unix/syscall-template.S (SYSCALL_CANCELLABLE): Removedefinition.* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h (PSEUDO): Removedefinition.(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): Removedefinition.(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): Removedefintion.(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): Removedefinition.(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): Removedefinition.(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): Removedefinition.(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): Removedefinition.(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): Removedefinition.(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): Removedefinition.(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): Removedefinition.(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): Removedefinition.(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): Removedefinition.(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): Removedefinition.(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): Removedefinition.(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): Removedefinition.(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.hdiff --git a/ChangeLog b/ChangeLogindex 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.shindex 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.Sindex 4993ff5..d4584a9 100644--- a/sysdeps/unix/syscall-template.S+++ b/sysdeps/unix/syscall-template.S@@ -27,7 +27,6 @@ SYSCALL_NAMEsyscall name SYSCALL_NARGSnumber of arguments this call takes SYSCALL_SYMBOLprimary symbol name-SYSCALL_CANCELLABLE1 if the call is a cancelation point SYSCALL_NOERRNO1 to define a no-errno version (see below) SYSCALL_ERRVAL1 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.hindex 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:\-cmnx0, 4095;\-b.cs.Lsyscall_error;\-.subsection 2;\-.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \-ENTRY (name);\-SINGLE_THREAD_P(16);\-cbzw16, .Lpseudo_nocancel;\-/* Setup common stack frame no matter the number of args.\- Also save the first arg, since it's basically free. */\-stpx30, x0, [sp, -64]!;\-cfi_adjust_cfa_offset (64);\-cfi_rel_offset (x30, 0);\-DOCARGS_##args;/* save syscall args around CENABLE. */ \-CENABLE;\-movx16, x0;/* save mask around syscall. */\-UNDOCARGS_##args;/* restore syscall args. */\-DO_CALL (syscall_name, args);\-strx0, [sp, 8];/* save result around CDISABLE. */\-movx0, x16;/* restore mask for CDISABLE. */\-CDISABLE;\-/* Break down the stack frame, restoring result at once. */\-ldpx30, x0, [sp], 64;\-cfi_adjust_cfa_offset (-64);\-cfi_restore (x30);\-b.Lpseudo_finish;\-cfi_endproc;\-.sizename, .-name;\-.previous--# undef PSEUDO_END-# define PSEUDO_END(name)\-SYSCALL_ERROR_HANDLER;\-cfi_endproc--# define DOCARGS_0-# define DOCARGS_1-# define DOCARGS_2str x1, [sp, 16]-# define DOCARGS_3stp x1, x2, [sp, 16]-# define DOCARGS_4DOCARGS_3; str x3, [sp, 32]-# define DOCARGS_5DOCARGS_3; stp x3, x4, [sp, 32]-# define DOCARGS_6DOCARGS_5; str x5, [sp, 48]--# define UNDOCARGS_0-# define UNDOCARGS_1ldr x0, [sp, 8]-# define UNDOCARGS_2ldp x0, x1, [sp, 8]-# define UNDOCARGS_3UNDOCARGS_1; ldp x1, x2, [sp, 16]-# define UNDOCARGS_4UNDOCARGS_2; ldp x2, x3, [sp, 24]-# define UNDOCARGS_5UNDOCARGS_3; ldp x3, x4, [sp, 32]-# define UNDOCARGS_6UNDOCARGS_4; ldp x4, x5, [sp, 40]- # if IS_IN (libpthread)-# define CENABLEbl __pthread_enable_asynccancel-# define CDISABLEbl __pthread_disable_asynccancel # define __local_multiple_threads __pthread_multiple_threads # elif IS_IN (libc)-# define CENABLEbl __libc_enable_asynccancel-# define CDISABLEbl __libc_disable_asynccancel # define __local_multiple_threads __libc_multiple_threads-# elif IS_IN (librt)-# define CENABLEbl __librt_enable_asynccancel-# define CDISABLEbl __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)\-adrpx##R, __local_multiple_threads;\-ldrw##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;\-subx##R, x##R, PTHREAD_SIZEOF;\-ldrw##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)-#endifdiff --git a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.hindex 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)\-ldgpgp, 0(pv);\-PSEUDO_PROF;\-__LABEL($pseudo_nocancel)\-PSEUDO_PREPARE_ARGS;\-ldav0, SYS_ify(syscall_name);\-call_pal PAL_callsys;\-bnea3, SYSCALL_ERROR_LABEL;\-__LABEL($pseudo_ret)\-.subsection 2;\-.size __##syscall_name##_nocancel, .-__##syscall_name##_nocancel; \-.globlname;\-.typename, @function;\-.usepvname, std;\-.align 4;\-cfi_startproc;\-__LABEL(name)\-ldgpgp, 0(pv);\-PSEUDO_PROF;\-SINGLE_THREAD_P(t0);\-beqt0, $pseudo_nocancel;\-subqsp, 64, sp;\-cfi_def_cfa_offset(64);\-stqra, 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. */\-movv0, ra;\-ldav0, SYS_ify(syscall_name);\-call_pal PAL_callsys;\-stqv0, 8(sp);\-movra, a0;\-bnea3, $multi_error;\-CDISABLE;\-ldqra, 0(sp);\-ldqv0, 8(sp);\-addqsp, 64, sp;\-cfi_remember_state;\-cfi_restore(ra);\-cfi_def_cfa_offset(0);\-ret;\-cfi_restore_state;\-__LABEL($multi_error)\-CDISABLE;\-ldqra, 0(sp);\-ldqv0, 8(sp);\-addqsp, 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_1SAVE_ARGS_0; stq a0, 8(sp)-# define SAVE_ARGS_2SAVE_ARGS_1; stq a1, 16(sp)-# define SAVE_ARGS_3SAVE_ARGS_2; stq a2, 24(sp)-# define SAVE_ARGS_4SAVE_ARGS_3; stq a3, 32(sp)-# define SAVE_ARGS_5SAVE_ARGS_4; stq a4, 40(sp)-# define SAVE_ARGS_6SAVE_ARGS_5; stq a5, 48(sp)--# define LOAD_ARGS_0/* Nothing. */-# define LOAD_ARGS_1LOAD_ARGS_0; ldq a0, 8(sp)-# define LOAD_ARGS_2LOAD_ARGS_1; ldq a1, 16(sp)-# define LOAD_ARGS_3LOAD_ARGS_2; ldq a2, 24(sp)-# define LOAD_ARGS_4LOAD_ARGS_3; ldq a3, 32(sp)-# define LOAD_ARGS_5LOAD_ARGS_4; ldq a4, 40(sp)-# define LOAD_ARGS_6LOAD_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 CENABLEbsr ra, __local_enable_asynccancel !samegp-# define CDISABLEbsr ra, __local_disable_asynccancel !samegp-# else-# define CENABLEjsr ra, __local_enable_asynccancel; ldgp ra, 0(gp)-# define CDISABLEjsr 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)\-ldahreg, __local_multiple_threads(gp) !gprelhigh;\-ldlreg, __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)-#endifdiff --git a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.hindex 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);\-cmnr0, $4096;\-PSEUDO_RET;\- END (__##syscall_name##_nocancel);\- ENTRY (name);\-SINGLE_THREAD_P;\-DOARGS_##args;\-bne .Lpseudo_cancel;\-cfi_remember_state;\-ldrr7, =SYS_ify (syscall_name);\-swi0x0;\-UNDOARGS_##args;\-cmnr0, $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. */\-ldrr7, =SYS_ify (syscall_name);\-swi0x0;/* do the call. */\-movr7, r0;/* save syscall return value. */\-movr0, ip;/* get mask back. */\-CDISABLE;\-movr0, r7;/* retrieve return value. */\-RESTORE_LR_##args;\-UNDOARGS_##args;\-cmnr0, $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 CENABLEbl PLTJMP(__pthread_enable_asynccancel)-# define CDISABLEbl PLTJMP(__pthread_disable_asynccancel) # define __local_multiple_threads __pthread_multiple_threads # elif IS_IN (libc)-# define CENABLEbl PLTJMP(__libc_enable_asynccancel)-# define CDISABLEbl PLTJMP(__libc_disable_asynccancel) # define __local_multiple_threads __libc_multiple_threads-# elif IS_IN (librt)-# define CENABLEbl PLTJMP(__librt_enable_asynccancel)-# define CDISABLEbl 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);\-ldrip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET);\-pop{r0, lr};\-cfi_adjust_cfa_offset (-8);\-cfi_restore (lr);\-teqip, #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)-#endifdiff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.hindex 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_##argsASM_LINE_SEP\-stwm TREG, 64(%sp)ASM_LINE_SEP\-.cfi_def_cfa_offset -64ASM_LINE_SEP\-.cfi_offset TREG, 0ASM_LINE_SEP\-stw %sp, -4(%sp)ASM_LINE_SEP\-stw %r19, -32(%sp)ASM_LINE_SEP\-.cfi_offset 19, 32ASM_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,%r1ASM_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_HANDLERASM_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, TREGASM_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, %ret0ASM_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),TREGASM_LINE_SEP\-/* Restore rp before exit */ASM_LINE_SEP\-ldw -20(%sp), %rpASM_LINE_SEP\-retASM_LINE_SEP\-END(__##syscall_name##_nocancel)ASM_LINE_SEP\-/**********************************************/ASM_LINE_SEP\-ENTRY (name)\-DOARGS_##argsASM_LINE_SEP\-stwm TREG, 64(%sp)ASM_LINE_SEP\-.cfi_def_cfa_offset -64ASM_LINE_SEP\-.cfi_offset TREG, 0ASM_LINE_SEP\-stw %sp, -4(%sp)ASM_LINE_SEP\-stw %r19, -32(%sp)ASM_LINE_SEP\-.cfi_offset 19, 32ASM_LINE_SEP\-/* Done setting up frame, continue... */ASM_LINE_SEP\-SINGLE_THREAD_PASM_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,%r1ASM_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_HANDLERASM_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, TREGASM_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_##argsASM_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), %r26ASM_LINE_SEP\-CDISABLEASM_LINE_SEP\-stw %ret0, -24(%sp) /* delay */ASM_LINE_SEP\-/* Restore syscall return */ASM_LINE_SEP\-ldw -24(%sp), %ret0ASM_LINE_SEP\-/* compare error */ASM_LINE_SEP\-ldi NO_ERROR,%r1ASM_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_HANDLERASM_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, %ret0ASM_LINE_SEP\-L(pre_end):ASM_LINE_SEP\-/* No need to LOAD_PIC */ASM_LINE_SEP\-/* Undo frame */ASM_LINE_SEP\-ldwm -64(%sp),TREGASM_LINE_SEP\-/* Restore rp before exit */ASM_LINE_SEP\-ldw -20(%sp), %rpASM_LINE_SEP--/* Save arguments into our frame */-# define PUSHARGS_0/* nothing to do */-# define PUSHARGS_1PUSHARGS_0 stw %r26, -36(%sr0,%sp)ASM_LINE_SEP\-.cfi_offset 26, 28ASM_LINE_SEP-# define PUSHARGS_2PUSHARGS_1 stw %r25, -40(%sr0,%sp)ASM_LINE_SEP\-.cfi_offset 25, 24ASM_LINE_SEP-# define PUSHARGS_3PUSHARGS_2 stw %r24, -44(%sr0,%sp)ASM_LINE_SEP\-.cfi_offset 24, 20ASM_LINE_SEP-# define PUSHARGS_4PUSHARGS_3 stw %r23, -48(%sr0,%sp)ASM_LINE_SEP\-.cfi_offset 23, 16ASM_LINE_SEP-# define PUSHARGS_5PUSHARGS_4 stw %r22, -52(%sr0,%sp)ASM_LINE_SEP\-.cfi_offset 22, 12ASM_LINE_SEP-# define PUSHARGS_6PUSHARGS_5 stw %r21, -56(%sr0,%sp)ASM_LINE_SEP\-.cfi_offset 21, 8ASM_LINE_SEP--/* Bring them back from the stack */-# define POPARGS_0/* nothing to do */-# define POPARGS_1POPARGS_0 ldw -36(%sr0,%sp), %r26ASM_LINE_SEP-# define POPARGS_2POPARGS_1 ldw -40(%sr0,%sp), %r25ASM_LINE_SEP-# define POPARGS_3POPARGS_2 ldw -44(%sr0,%sp), %r24ASM_LINE_SEP-# define POPARGS_4POPARGS_3 ldw -48(%sr0,%sp), %r23ASM_LINE_SEP-# define POPARGS_5POPARGS_4 ldw -52(%sr0,%sp), %r22ASM_LINE_SEP-# define POPARGS_6POPARGS_5 ldw -56(%sr0,%sp), %r21ASM_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, %ret0ASM_LINE_SEP\-ldw MULTIPLE_THREADS_THREAD_OFFSET(%sr0,%ret0),%ret0ASM_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)-#endifdiff --git a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.hindex 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_0movl %eax, %ecx;-# define SAVE_OLDTYPE_1SAVE_OLDTYPE_0-# define SAVE_OLDTYPE_2pushl %eax; cfi_adjust_cfa_offset (4);-# define SAVE_OLDTYPE_3SAVE_OLDTYPE_2-# define SAVE_OLDTYPE_4SAVE_OLDTYPE_2-# define SAVE_OLDTYPE_5SAVE_OLDTYPE_2-# define SAVE_OLDTYPE_6SAVE_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_1movl %ebx, %edx; cfi_register (ebx, edx); PUSHCARGS_0-# define DOCARGS_1_DOARGS_1 (4)-# define POPCARGS_1POPCARGS_0; movl %edx, %ebx; cfi_restore (ebx);-# define _PUSHCARGS_1pushl %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_2PUSHCARGS_1-# define DOCARGS_2_DOARGS_2 (12)-# define POPCARGS_2POPCARGS_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_4pushl %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_5pushl %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_6pushl %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 CENABLEcall __pthread_enable_asynccancel;-# define CDISABLEcall __pthread_disable_asynccancel-# elif IS_IN (libc)-# define CENABLEcall __libc_enable_asynccancel;-# define CDISABLEcall __libc_disable_asynccancel-# elif IS_IN (librt)-# define CENABLEcall __librt_enable_asynccancel;-# define CDISABLEcall __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_1POPSTATE_0-# define POPSTATE_2xchgl (%esp), %eax; CDISABLE; popl %eax; \-cfi_adjust_cfa_offset (-4);-# define POPSTATE_3POPSTATE_2-# define POPSTATE_4POPSTATE_3-# define POPSTATE_5POPSTATE_4-# define POPSTATE_6POPSTATE_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)-#endifdiff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.hindex 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 CENABLEbr.call.sptk.many b0 = __pthread_enable_asynccancel-# define CDISABLEbr.call.sptk.many b0 = __pthread_disable_asynccancel-# elif IS_IN (libc)-# define CENABLEbr.call.sptk.many b0 = __libc_enable_asynccancel-# define CDISABLEbr.call.sptk.many b0 = __libc_disable_asynccancel-# elif IS_IN (librt)-# define CENABLEbr.call.sptk.many b0 = __librt_enable_asynccancel-# define CDISABLEbr.call.sptk.many b0 = __librt_disable_asynccancel-# else-# error Unsupported library-# endif--# define COPY_ARGS_0/* Nothing */-# define COPY_ARGS_1COPY_ARGS_0 mov out0 = in0;-# define COPY_ARGS_2COPY_ARGS_1 mov out1 = in1;-# define COPY_ARGS_3COPY_ARGS_2 mov out2 = in2;-# define COPY_ARGS_4COPY_ARGS_3 mov out3 = in3;-# define COPY_ARGS_5COPY_ARGS_4 mov out4 = in4;-# define COPY_ARGS_6COPY_ARGS_5 mov out5 = in5;-# define COPY_ARGS_7COPY_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)-#endifdiff --git a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.hindex 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_0move.l %d2, -(%sp);\- cfi_adjust_cfa_offset (4); cfi_rel_offset (%d2, 0);-# define UNDOCARGS_0move.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_1UNDOCARGS_0--# define DOCARGS_2_DOCARGS_2 (8)-# define _DOCARGS_2(n)DOCARGS_0 move.l n+4(%sp), %d2; _DOCARGS_1 (n)-# define UNDOCARGS_2UNDOCARGS_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_3UNDOCARGS_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_4UNDOCARGS_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_5UNDOCARGS_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_6UNDOCARGS_5--# ifdef PIC-# define PSEUDO_JMP(sym) jbsr sym ## @PLTPC-# else-# define PSEUDO_JMP(sym) jbsr sym-# endif--# if IS_IN (libpthread)-# define CENABLEPSEUDO_JMP (__pthread_enable_asynccancel)-# define CDISABLEPSEUDO_JMP (__pthread_disable_asynccancel)-# elif IS_IN (libc)-# define CENABLEPSEUDO_JMP (__libc_enable_asynccancel)-# define CDISABLEPSEUDO_JMP (__libc_disable_asynccancel)-# elif IS_IN (librt)-# define CENABLEPSEUDO_JMP (__librt_enable_asynccancel)-# define CDISABLEPSEUDO_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)-#endifdiff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.hindex 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)-#endifdiff --git a/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/mips64/sysdep-cancel.hdeleted file mode 100644index 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_1PUSHARGS_0 REG_S a0, STKOFF_A0(sp); cfi_rel_offset (a0, STKOFF_A0);-# define PUSHARGS_2PUSHARGS_1 REG_S a1, STKOFF_A1(sp); cfi_rel_offset (a1, STKOFF_A1);-# define PUSHARGS_3PUSHARGS_2 REG_S a2, STKOFF_A2(sp); cfi_rel_offset (a2, STKOFF_A2);-# define PUSHARGS_4PUSHARGS_3 REG_S a3, STKOFF_A3(sp); cfi_rel_offset (a3, STKOFF_A3);-# define PUSHARGS_5PUSHARGS_4 REG_S a4, STKOFF_A4(sp); cfi_rel_offset (a3, STKOFF_A4);-# define PUSHARGS_6PUSHARGS_5 REG_S a5, STKOFF_A5(sp); cfi_rel_offset (a3, STKOFF_A5);--# define POPARGS_0/* nothing to do */-# define POPARGS_1POPARGS_0 REG_L a0, STKOFF_A0(sp);-# define POPARGS_2POPARGS_1 REG_L a1, STKOFF_A1(sp);-# define POPARGS_3POPARGS_2 REG_L a2, STKOFF_A2(sp);-# define POPARGS_4POPARGS_3 REG_L a3, STKOFF_A3(sp);-# define POPARGS_5POPARGS_4 REG_L a4, STKOFF_A4(sp);-# define POPARGS_6POPARGS_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_PADSZREG-# else-# define STK_PAD0-# 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 CENABLEPSEUDO_JMP (__pthread_enable_asynccancel)-# define CDISABLEPSEUDO_JMP (__pthread_disable_asynccancel)-# elif IS_IN (librt)-# define CENABLEPSEUDO_JMP (__librt_enable_asynccancel)-# define CDISABLEPSEUDO_JMP (__librt_disable_asynccancel)-# else-# define CENABLEPSEUDO_JMP (__libc_enable_asynccancel)-# define CDISABLEPSEUDO_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)-#endifdiff --git a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.hindex 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_1PUSHARGS_0 sw a0, 0(sp); cfi_rel_offset (a0, 0);-# define PUSHARGS_2PUSHARGS_1 sw a1, 4(sp); cfi_rel_offset (a1, 4);-# define PUSHARGS_3PUSHARGS_2 sw a2, 8(sp); cfi_rel_offset (a2, 8);-# define PUSHARGS_4PUSHARGS_3 sw a3, 12(sp); cfi_rel_offset (a3, 12);-# define PUSHARGS_5PUSHARGS_4 /* handled by SAVESTK_## */-# define PUSHARGS_6PUSHARGS_5-# define PUSHARGS_7PUSHARGS_6--# define POPARGS_0/* nothing to do */-# define POPARGS_1POPARGS_0 lw a0, 0(sp);-# define POPARGS_2POPARGS_1 lw a1, 4(sp);-# define POPARGS_3POPARGS_2 lw a2, 8(sp);-# define POPARGS_4POPARGS_3 lw a3, 12(sp);-# define POPARGS_5POPARGS_4 /* args already in new stackframe */-# define POPARGS_6POPARGS_5-# define POPARGS_7POPARGS_6---# define STKSPACE48-# 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 CENABLEPSEUDO_JMP (__pthread_enable_asynccancel)-# define CDISABLEPSEUDO_JMP (__pthread_disable_asynccancel)-# elif IS_IN (librt)-# define CENABLEPSEUDO_JMP (__librt_enable_asynccancel)-# define CDISABLEPSEUDO_JMP (__librt_disable_asynccancel)-# else-# define CENABLEPSEUDO_JMP (__libc_enable_asynccancel)-# define CDISABLEPSEUDO_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)-#endifdiff --git a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.hindex 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 CENABLEldw r3, %call(__pthread_enable_asynccancel)(r22)-# define CDISABLEldw r3, %call(__pthread_disable_asynccancel)(r22)-# elif IS_IN (librt)-# define CENABLEldw r3, %call(__librt_enable_asynccancel)(r22)-# define CDISABLEldw r3, %call(__librt_disable_asynccancel)(r22)-# elif IS_IN (libc)-# define CENABLEldw r3, %call(__libc_enable_asynccancel)(r22)-# define CDISABLEldw 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)-#endifdiff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.hdeleted file mode 100644index 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_1stw 3,20(1); DOCARGS_0-# define UNDOCARGS_1lwz 3,20(1); UNDOCARGS_0--# define DOCARGS_2stw 4,24(1); DOCARGS_1-# define UNDOCARGS_2lwz 4,24(1); UNDOCARGS_1--# define DOCARGS_3stw 5,28(1); DOCARGS_2-# define UNDOCARGS_3lwz 5,28(1); UNDOCARGS_2--# define DOCARGS_4stw 6,32(1); DOCARGS_3-# define UNDOCARGS_4lwz 6,32(1); UNDOCARGS_3--# define DOCARGS_5stw 7,36(1); DOCARGS_4-# define UNDOCARGS_5lwz 7,36(1); UNDOCARGS_4--# define DOCARGS_6stw 8,40(1); DOCARGS_5-# define UNDOCARGS_6lwz 8,40(1); UNDOCARGS_5--# if IS_IN (libpthread)-# define CENABLEbl __pthread_enable_asynccancel@local-# define CDISABLEbl __pthread_disable_asynccancel@local-# elif IS_IN (libc)-# define CENABLEbl __libc_enable_asynccancel@local-# define CDISABLEbl __libc_disable_asynccancel@local-# elif IS_IN (librt)-# define CENABLEbl __librt_enable_asynccancel@local-# define CDISABLEbl __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)-#endifdiff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.hdeleted file mode 100644index 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_1std 3,CANCEL_PARM_SAVE(1); DOCARGS_0-# define UNDOCARGS_1ld 3,CANCEL_PARM_SAVE(1); UNDOCARGS_0--# define DOCARGS_2std 4,CANCEL_PARM_SAVE+8(1); DOCARGS_1-# define UNDOCARGS_2ld 4,CANCEL_PARM_SAVE+8(1); UNDOCARGS_1--# define DOCARGS_3std 5,CANCEL_PARM_SAVE+16(1); DOCARGS_2-# define UNDOCARGS_3ld 5,CANCEL_PARM_SAVE+16(1); UNDOCARGS_2--# define DOCARGS_4std 6,CANCEL_PARM_SAVE+24(1); DOCARGS_3-# define UNDOCARGS_4ld 6,CANCEL_PARM_SAVE+24(1); UNDOCARGS_3--# define DOCARGS_5std 7,CANCEL_PARM_SAVE+32(1); DOCARGS_4-# define UNDOCARGS_5ld 7,CANCEL_PARM_SAVE+32(1); UNDOCARGS_4--# define DOCARGS_6std 8,CANCEL_PARM_SAVE+40(1); DOCARGS_5-# define UNDOCARGS_6ld 8,CANCEL_PARM_SAVE+40(1); UNDOCARGS_5--# if IS_IN (libpthread)-# ifdef SHARED-# define CENABLEbl JUMPTARGET(__pthread_enable_asynccancel)-# define CDISABLEbl JUMPTARGET(__pthread_disable_asynccancel)-# else-# define CENABLEbl JUMPTARGET(__pthread_enable_asynccancel); nop-# define CDISABLEbl JUMPTARGET(__pthread_disable_asynccancel); nop-# endif-# elif IS_IN (libc)-# ifdef SHARED-# define CENABLEbl JUMPTARGET(__libc_enable_asynccancel)-# define CDISABLEbl JUMPTARGET(__libc_disable_asynccancel)-# else-# define CENABLEbl JUMPTARGET(__libc_enable_asynccancel); nop-# define CDISABLEbl JUMPTARGET(__libc_disable_asynccancel); nop-# endif-# elif IS_IN (librt)-# ifdef SHARED-# define CENABLEbl JUMPTARGET(__librt_enable_asynccancel)-# define CDISABLEbl JUMPTARGET(__librt_disable_asynccancel)-# else-# define CENABLEbl JUMPTARGET(__librt_enable_asynccancel); nop-# define CDISABLEbl 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)-#endifdiff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.hnew file mode 100644index 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.hindex 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; \-jL(pseudo_check); \-1:.longCENABLE-0b; \-2:.longCDISABLE-0b; \-ENTRY(name) \-SINGLE_THREAD_P(%r1) \-jneL(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; \-jnlSYSCALL_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_1st %r2,8(%r15);-#define STM_2stm %r2,%r3,8(%r15);-#define STM_3stm %r2,%r4,8(%r15);-#define STM_4stm %r2,%r5,8(%r15);-#define STM_5stm %r2,%r5,8(%r15);-#define STM_6stm %r2,%r7,8(%r15);--#define LM_0/* Nothing */-#define LM_1l %r2,8+96(%r15);-#define LM_2lm %r2,%r3,8+96(%r15);-#define LM_3lm %r2,%r4,8+96(%r15);-#define LM_4lm %r2,%r5,8+96(%r15);-#define LM_5lm %r2,%r5,8+96(%r15);-#define LM_6lm %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_6l %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) \-earreg,%a0; \-icmreg,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)-#endifdiff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.hindex 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; \-jL(pseudo_check); \-ENTRY(name) \-SINGLE_THREAD_P \-jneL(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; \-jgnlSYSCALL_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_1stg %r2,16(%r15);-#define STM_2stmg %r2,%r3,16(%r15);-#define STM_3stmg %r2,%r4,16(%r15);-#define STM_4stmg %r2,%r5,16(%r15);-#define STM_5stmg %r2,%r5,16(%r15);-#define STM_6stmg %r2,%r7,16(%r15);--#define LM_0/* Nothing */-#define LM_1lg %r2,16+160(%r15);-#define LM_2lmg %r2,%r3,16+160(%r15);-#define LM_3lmg %r2,%r4,16+160(%r15);-#define LM_4lmg %r2,%r5,16+160(%r15);-#define LM_5lmg %r2,%r5,16+160(%r15);-#define LM_6lmg %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_6lg %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)-#endifdiff --git a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.hindex 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_1SAVE_ARGS_0; mov.l r4,@(0,r15); cfi_offset (r4,-4)-# define SAVE_ARGS_2SAVE_ARGS_1; mov.l r5,@(4,r15); cfi_offset (r5,-8)-# define SAVE_ARGS_3SAVE_ARGS_2; mov.l r6,@(8,r15); cfi_offset (r6,-12)-# define SAVE_ARGS_4SAVE_ARGS_3; mov.l r7,@(12,r15); cfi_offset (r7,-16)-# define SAVE_ARGS_5SAVE_ARGS_4-# define SAVE_ARGS_6SAVE_ARGS_5--# define LOAD_ARGS_0/* Nothing. */-# define LOAD_ARGS_1LOAD_ARGS_0; mov.l @(0,r15),r4; cfi_restore (r4)-# define LOAD_ARGS_2LOAD_ARGS_1; mov.l @(4,r15),r5; cfi_restore (r5)-# define LOAD_ARGS_3LOAD_ARGS_2; mov.l @(8,r15),r6; cfi_restore (r6)-# define LOAD_ARGS_4LOAD_ARGS_3; mov.l @(12,r15),r7; cfi_restore (r7)-# define LOAD_ARGS_5LOAD_ARGS_4-# define LOAD_ARGS_6LOAD_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)-#endifdiff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.hdeleted file mode 100644index 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 CENABLEcall __pthread_enable_asynccancel-# define CDISABLEcall __pthread_disable_asynccancel-# elif IS_IN (libc)-# define CENABLEcall __libc_enable_asynccancel-# define CDISABLEcall __libc_disable_asynccancel-# elif IS_IN (librt)-# define CENABLEcall __librt_enable_asynccancel-# define CDISABLEcall __librt_disable_asynccancel-# else-# error Unsupported library-# endif--#define COPY_ARGS_0/* Nothing */-#define COPY_ARGS_1COPY_ARGS_0 mov %i0, %o0;-#define COPY_ARGS_2COPY_ARGS_1 mov %i1, %o1;-#define COPY_ARGS_3COPY_ARGS_2 mov %i2, %o2;-#define COPY_ARGS_4COPY_ARGS_3 mov %i3, %o3;-#define COPY_ARGS_5COPY_ARGS_4 mov %i4, %o4;-#define COPY_ARGS_6COPY_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)-#endifdiff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.hdeleted file mode 100644index 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 CENABLEcall __pthread_enable_asynccancel-# define CDISABLEcall __pthread_disable_asynccancel-# elif IS_IN (libc)-# define CENABLEcall __libc_enable_asynccancel-# define CDISABLEcall __libc_disable_asynccancel-# elif IS_IN (librt)-# define CENABLEcall __librt_enable_asynccancel-# define CDISABLEcall __librt_disable_asynccancel-# else-# error Unsupported library-# endif--#define COPY_ARGS_0/* Nothing */-#define COPY_ARGS_1COPY_ARGS_0 mov %i0, %o0;-#define COPY_ARGS_2COPY_ARGS_1 mov %i1, %o1;-#define COPY_ARGS_3COPY_ARGS_2 mov %i2, %o2;-#define COPY_ARGS_4COPY_ARGS_3 mov %i3, %o3;-#define COPY_ARGS_5COPY_ARGS_4 mov %i4, %o4;-#define COPY_ARGS_6COPY_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)-#endifdiff --git a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.hnew file mode 100644index 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.hindex 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 CENABLEjal __pthread_enable_asynccancel-# define CDISABLEjal __pthread_disable_asynccancel-# elif IS_IN (librt)-# define CENABLEjal __librt_enable_asynccancel-# define CDISABLEjal __librt_disable_asynccancel-# else-# define CENABLEjal __libc_enable_asynccancel-# define CDISABLEjal __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)-#endifdiff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.hindex 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 CENABLEcall __pthread_enable_asynccancel;-# define CDISABLEcall __pthread_disable_asynccancel; # define __local_multiple_threads __pthread_multiple_threads # elif IS_IN (libc)-# define CENABLEcall __libc_enable_asynccancel;-# define CDISABLEcall __libc_disable_asynccancel; # define __local_multiple_threads __libc_multiple_threads # elif IS_IN (librt)-# define CENABLEcall __librt_enable_asynccancel;-# define CDISABLEcall __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-- 2.7.4
[8]ページ先頭