about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog30
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h48
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/sysdep.h2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h46
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sysdep.h2
-rw-r--r--sysdeps/unix/sysv/linux/arm/sysdep-cancel.h47
-rw-r--r--sysdeps/unix/sysv/linux/arm/sysdep.h2
-rw-r--r--sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h46
-rw-r--r--sysdeps/unix/sysv/linux/hppa/sysdep.h2
-rw-r--r--sysdeps/unix/sysv/linux/i386/sysdep-cancel.h35
-rw-r--r--sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h31
-rw-r--r--sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h34
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h45
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/sysdep.h2
-rw-r--r--sysdeps/unix/sysv/linux/mips/sysdep-cancel.h35
-rw-r--r--sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h35
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h35
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h35
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h50
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h2
-rw-r--r--sysdeps/unix/sysv/linux/sh/sysdep-cancel.h34
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h35
-rw-r--r--sysdeps/unix/sysv/linux/sysdep-cancel.h64
-rw-r--r--sysdeps/unix/sysv/linux/tile/sysdep-cancel.h35
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h50
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/sysdep.h2
26 files changed, 108 insertions, 676 deletions
diff --git a/ChangeLog b/ChangeLog
index 1a89064e99..3a1dba9498 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,33 @@
+2017-10-11  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
+
+	* sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h: Remove file.
+	* sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/mips/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/sh/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/tile/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h: Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
+	(SINGLE_THREAD_BY_GLOBAL): Define.
+	* sysdeps/unix/sysv/linux/aarch64/sysdep.h (SINGLE_THREAD_BY_GLOBAL):
+	Likewise.
+	* sysdeps/unix/sysv/linux/alpha/sysdep.h (SINGLE_THREAD_BY_GLOBAL):
+	Likewise.
+	* sysdeps/unix/sysv/linux/arm/sysdep.h (SINGLE_THREAD_BY_GLOBAL):
+	Likewise.
+	* sysdeps/unix/sysv/linux/hppa/sysdep.h (SINGLE_THREAD_BY_GLOBAL):
+	Likewise.
+	* sysdeps/unix/sysv/linux/microblaze/sysdep.h
+	(SINGLE_THREAD_BY_GLOBAL): Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/sysdep.h (SINGLE_THREAD_BY_GLOBAL):
+	Likewise.
+
 2017-10-11  Andreas Schwab  <schwab@suse.de>
 
 	* nis/Makefile (aux): Remove.
diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
deleted file mode 100644
index 27741a3f02..0000000000
--- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h
+++ /dev/null
@@ -1,48 +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 <tls.h>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# if IS_IN (libpthread)
-#  define __local_multiple_threads __pthread_multiple_threads
-# elif IS_IN (libc)
-#  define __local_multiple_threads __libc_multiple_threads
-# endif
-
-# if IS_IN (libpthread) || IS_IN (libc)
-extern int __local_multiple_threads attribute_hidden;
-#  define SINGLE_THREAD_P __glibc_likely (__local_multiple_threads == 0)
-# else
-/*  There is no __local_multiple_threads for librt, so use the TCB.  */
-#  define SINGLE_THREAD_P						\
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-# endif
-
-#else
-
-/* For rtld, et cetera.  */
-# define SINGLE_THREAD_P 1
-
-#endif
-
-# define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/aarch64/sysdep.h b/sysdeps/unix/sysv/linux/aarch64/sysdep.h
index 4bb9112d62..c92a480c88 100644
--- a/sysdeps/unix/sysv/linux/aarch64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/aarch64/sysdep.h
@@ -161,6 +161,8 @@
    which lead in a non existent __send symbol in libc.so.  */
 # undef HAVE_INTERNAL_SEND_SYMBOL
 
+# define SINGLE_THREAD_BY_GLOBAL		1
+
 /* Define a macro which expands into the inline wrapper code for a system
    call.  */
 # undef INLINE_SYSCALL
diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h b/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
deleted file mode 100644
index 561cb67f1c..0000000000
--- a/sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h
+++ /dev/null
@@ -1,46 +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 <tls.h>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# if IS_IN (libpthread)
-#  define __local_multiple_threads	__pthread_multiple_threads
-# elif IS_IN (libc)
-#  define __local_multiple_threads	__libc_multiple_threads
-# endif
-
-# if IS_IN (libpthread) || IS_IN (libc)
-extern int __local_multiple_threads attribute_hidden;
-#  define SINGLE_THREAD_P \
-  __glibc_likely (__local_multiple_threads == 0)
-# else
-#  define SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-# endif
-
-#else
-
-# define SINGLE_THREAD_P (1)
-
-#endif
-
-# define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/alpha/sysdep.h b/sysdeps/unix/sysv/linux/alpha/sysdep.h
index 4dc2d46ecf..5f4c20e367 100644
--- a/sysdeps/unix/sysv/linux/alpha/sysdep.h
+++ b/sysdeps/unix/sysv/linux/alpha/sysdep.h
@@ -70,6 +70,8 @@
 # define __NR_pwrite __NR_pwrite64
 #endif
 
+#define SINGLE_THREAD_BY_GLOBAL 1
+
 /*
  * In order to get the hidden arguments for rt_sigaction set up
  * properly, we need to call the assembly version.  This shouldn't
diff --git a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h b/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
deleted file mode 100644
index b227187ab9..0000000000
--- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h
+++ /dev/null
@@ -1,47 +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 <tls.h>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# if IS_IN (libpthread)
-#  define __local_multiple_threads __pthread_multiple_threads
-# elif IS_IN (libc)
-#  define __local_multiple_threads __libc_multiple_threads
-# endif
-
-# if IS_IN (libpthread) || IS_IN (libc)
-extern int __local_multiple_threads attribute_hidden;
-#  define SINGLE_THREAD_P __glibc_likely (__local_multiple_threads == 0)
-# else
-/*  There is no __local_multiple_threads for librt, so use the TCB.  */
-#  define SINGLE_THREAD_P						\
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-# endif
-
-#else
-
-/* For rtld, et cetera.  */
-# define SINGLE_THREAD_P 1
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h
index 3ca2198596..6a64351cdd 100644
--- a/sysdeps/unix/sysv/linux/arm/sysdep.h
+++ b/sysdeps/unix/sysv/linux/arm/sysdep.h
@@ -437,6 +437,8 @@ __local_syscall_error:						\
 #define INTERNAL_SYSCALL_NCS(number, err, nr, args...)          \
   INTERNAL_SYSCALL_RAW (number, err, nr, args)
 
+#define SINGLE_THREAD_BY_GLOBAL	1
+
 #endif	/* __ASSEMBLER__ */
 
 #endif /* linux/arm/sysdep.h */
diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
deleted file mode 100644
index 8a85fc2144..0000000000
--- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 2005-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 <tls.h>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# if IS_IN (libpthread)
-#  define __local_multiple_threads __pthread_multiple_threads
-# elif IS_IN (libc)
-#  define __local_multiple_threads __libc_multiple_threads
-# elif IS_IN (librt)
-#  define __local_multiple_threads __librt_multiple_threads
-# else
-#  error Unsupported library
-# endif
-
-# define SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-
-#else
-
-/* This code should never be used but we define it anyhow.  */
-# define SINGLE_THREAD_P (1)
-
-#endif
-/* IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt) */
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.h b/sysdeps/unix/sysv/linux/hppa/sysdep.h
index c0cd59e9f5..7163ae457e 100644
--- a/sysdeps/unix/sysv/linux/hppa/sysdep.h
+++ b/sysdeps/unix/sysv/linux/hppa/sysdep.h
@@ -504,4 +504,6 @@ L(pre_end):					ASM_LINE_SEP	\
 #define PTR_MANGLE(var) (void) (var)
 #define PTR_DEMANGLE(var) (void) (var)
 
+#define SINGLE_THREAD_BY_GLOBAL	1
+
 #endif /* _LINUX_HPPA_SYSDEP_H */
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h b/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
deleted file mode 100644
index 5c11983bb5..0000000000
--- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
+++ /dev/null
@@ -1,35 +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>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# define SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-
-#else
-
-# define SINGLE_THREAD_P (1)
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
deleted file mode 100644
index fe5b35ad88..0000000000
--- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h
+++ /dev/null
@@ -1,31 +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>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-# define SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-#else
-# define SINGLE_THREAD_P (1)
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
deleted file mode 100644
index b192a6875a..0000000000
--- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 2010-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
-
-   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						\
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-#else
-
-# define SINGLE_THREAD_P (1)
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P					  \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
deleted file mode 100644
index 120ea06ba3..0000000000
--- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (C) 2014-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 <tls.h>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# if IS_IN (libpthread)
-#  define __local_multiple_threads __pthread_multiple_threads
-# elif IS_IN (libc)
-#  define __local_multiple_threads __libc_multiple_threads
-# endif
-
-# if IS_IN (libpthread) || IS_IN (libc)
-extern int __local_multiple_threads attribute_hidden;
-#  define SINGLE_THREAD_P __glibc_likely (__local_multiple_threads == 0)
-# else
-#  define SINGLE_THREAD_P                                           \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-# endif
-
-#else
-
-# define SINGLE_THREAD_P (1)
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P                                        \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/microblaze/sysdep.h b/sysdeps/unix/sysv/linux/microblaze/sysdep.h
index 1fbbc55de1..7bf5a4eef1 100644
--- a/sysdeps/unix/sysv/linux/microblaze/sysdep.h
+++ b/sysdeps/unix/sysv/linux/microblaze/sysdep.h
@@ -308,6 +308,8 @@ SYSCALL_ERROR_LABEL_DCL:                            \
 # define PTR_MANGLE(var) (void) (var)
 # define PTR_DEMANGLE(var) (void) (var)
 
+# define SINGLE_THREAD_BY_GLOBAL	1
+
 #endif /* not __ASSEMBLER__ */
 
 #endif /* _LINUX_MICROBLAZE_SYSDEP_H */
diff --git a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h b/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
deleted file mode 100644
index 31dbba0470..0000000000
--- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h
+++ /dev/null
@@ -1,35 +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>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# define SINGLE_THREAD_P						\
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-
-#else
-
-# define SINGLE_THREAD_P 1
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
deleted file mode 100644
index 4e7f5363a1..0000000000
--- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Assembler macros with cancellation support, Nios II version.
-   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 <tls.h>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# define SINGLE_THREAD_P						\
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-
-#else
-
-# define SINGLE_THREAD_P 1
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
deleted file mode 100644
index 59f752f950..0000000000
--- a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Cancellable system call stubs.  Linux/PowerPC version.
-   Copyright (C) 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 <tls.h>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# define SINGLE_THREAD_P						\
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-
-#else
-
-# define SINGLE_THREAD_P (1)
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
deleted file mode 100644
index bd606d5f8e..0000000000
--- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 2003-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Jakub Jelinek <jakub@redhat.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>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# define SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-
-#else
-
-# define SINGLE_THREAD_P (1)
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
deleted file mode 100644
index 2283b861cd..0000000000
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 2003-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Jakub Jelinek <jakub@redhat.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>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# if IS_IN (libpthread)
-#  define __local_multiple_threads	__pthread_multiple_threads
-# elif IS_IN (libc)
-#  define __local_multiple_threads	__libc_multiple_threads
-# endif
-
-# if IS_IN (libpthread) || IS_IN (libc)
-extern int __local_multiple_threads attribute_hidden;
-#  define SINGLE_THREAD_P \
-  __glibc_likely (__local_multiple_threads == 0)
-
-# else
-
-#  define SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-
-# endif
-
-#else
-
-# define SINGLE_THREAD_P (1)
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
index e22d9b6b13..622991d84d 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
@@ -291,6 +291,8 @@
 #define HAVE_GETTIMEOFDAY_VSYSCALL	1
 #define HAVE_GETCPU_VSYSCALL		1
 
+#define SINGLE_THREAD_BY_GLOBAL		1
+
 /* This version is for internal uses when there is no desire
    to set errno */
 #define INTERNAL_VSYSCALL_NO_SYSCALL_FALLBACK(name, err, nr, args...)	      \
diff --git a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
deleted file mode 100644
index b2deb1191b..0000000000
--- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h
+++ /dev/null
@@ -1,34 +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 <tls.h>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# define SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-
-#else
-
-# define SINGLE_THREAD_P (1)
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
deleted file mode 100644
index 7fe0deee63..0000000000
--- a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Cancellable system call stubs.  Linux/Sparc version.
-   Copyright (C) 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 <tls.h>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# define SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-
-#else
-
-# define SINGLE_THREAD_P (1)
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sysdep-cancel.h
new file mode 100644
index 0000000000..57bd093de1
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sysdep-cancel.h
@@ -0,0 +1,64 @@
+/* Single-thread optimization definitions.  Linux version.
+   Copyright (C) 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 <tls.h>
+#include <nptl/pthreadP.h>
+
+/* The default way to check if the process is single thread is by using the
+   pthread_t 'multiple_threads' field.  However for some architectures it
+   is faster to either use an extra field on TCB or global varibles
+   (the TCB field is also used on x86 for some single-thread atomic
+   optimizations).
+
+   The ABI might define SINGLE_THREAD_BY_GLOBAL to enable the single
+   thread check to use global variables instead of the pthread_t
+   field.  */
+
+#ifdef SINGLE_THREAD_BY_GLOBAL
+# if IS_IN (libc)
+extern int __libc_multiple_threads;
+#  define SINGLE_THREAD_P \
+  __glibc_likely (__libc_multiple_threads == 0)
+# elif IS_IN (libpthread)
+extern int __pthread_multiple_threads;
+#  define SINGLE_THREAD_P \
+  __glibc_likely (__pthread_multiple_threads == 0)
+# elif IS_IN (librt)
+#   define SINGLE_THREAD_P					\
+  __glibc_likely (THREAD_GETMEM (THREAD_SELF,			\
+				 header.multiple_threads) == 0)
+# else
+/* For rtld, et cetera.  */
+#  define SINGLE_THREAD_P (1)
+# endif
+#else /* SINGLE_THREAD_BY_GLOBAL  */
+# if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
+#   define SINGLE_THREAD_P					\
+  __glibc_likely (THREAD_GETMEM (THREAD_SELF,			\
+				 header.multiple_threads) == 0)
+# else
+/* For rtld, et cetera.  */
+#  define SINGLE_THREAD_P (1)
+# endif
+#endif /* SINGLE_THREAD_BY_GLOBAL  */
+
+#define RTLD_SINGLE_THREAD_P \
+  __glibc_likely (THREAD_GETMEM (THREAD_SELF, \
+				 header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h b/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
deleted file mode 100644
index a606b0ceaa..0000000000
--- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
-
-   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						\
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-
-#else
-
-# define SINGLE_THREAD_P 1
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P                                           \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
deleted file mode 100644
index 34f14c6bc9..0000000000
--- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h
+++ /dev/null
@@ -1,50 +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>
-#include <nptl/pthreadP.h>
-
-#if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
-
-# if IS_IN (libpthread)
-#  define __local_multiple_threads __pthread_multiple_threads
-# elif IS_IN (libc)
-#  define __local_multiple_threads __libc_multiple_threads
-# elif IS_IN (librt)
-# else
-#  error Unsupported library
-# endif
-
-# if IS_IN (libpthread) || IS_IN (libc)
-extern int __local_multiple_threads attribute_hidden;
-#  define SINGLE_THREAD_P \
-  __glibc_likely (__local_multiple_threads == 0)
-# else
-#  define SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
-# endif
-
-#else
-
-# define SINGLE_THREAD_P (1)
-
-#endif
-
-#define RTLD_SINGLE_THREAD_P \
-  __glibc_likely (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0)
diff --git a/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
index f299bf2ca9..ad78dd6bb3 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sysdep.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sysdep.h
@@ -376,6 +376,8 @@
 # define HAVE_GETTIMEOFDAY_VSYSCALL     1
 # define HAVE_GETCPU_VSYSCALL		1
 
+# define SINGLE_THREAD_BY_GLOBAL		1
+
 #endif	/* __ASSEMBLER__ */