Message ID | 1502140314-16598-2-git-send-email-adhemerval.zanella@linaro.org |
---|---|
State | New |
Headers | show |
Series | [1/3] Remove NO_CANCELLATION macro | expand |
On 08/07/2017 11:11 PM, Adhemerval Zanella wrote: > * sysdeps/unix/sysv/linux/x86_64/sysdep.h (SINGLE_THREAD_BY_GLOBAL): > Likewise. Is this correct? Should it be guarded by IS_IN (libc)? Thanks, Florian
On 08/08/2017 03:18, Florian Weimer wrote: > On 08/07/2017 11:11 PM, Adhemerval Zanella wrote: >> * sysdeps/unix/sysv/linux/x86_64/sysdep.h (SINGLE_THREAD_BY_GLOBAL): >> Likewise. > > Is this correct? Should it be guarded by IS_IN (libc)? > > Thanks, > Florian > SINGLE_THREAD_BY_GLOBAL is already used guarded with IS_IN (libc) for the cases where the code is build on both libc and libpthread: nptl/libc_multiple_threads.c:21:#if IS_IN (libc) && defined (SINGLE_THREAD_BY_GLOBAL) nptl/vars.c:38:#if IS_IN (libpthread) && defined (SINGLE_THREAD_BY_GLOBAL)
Ping. On 07/08/2017 18:11, Adhemerval Zanella wrote: > Current GLIBC has two ways to implement the single thread optimization > on syscalls to avoid calling the cancellation path: either by using > global variables (__{libc,pthread}_multiple_thread or by accessing > the TCB/pthread_t field (defined by TLS_MULTIPLE_THREADS_IN_TCB). > Both the variables and the macros to accessing its values are defined > in the architecture sysdep-cancel.h. > > This patch consolidates its definition on only one header, > sysdeps/unix/sysv/linux/sysdep-cancel.h, and adds a new define, > SINGLE_THREAD_BY_GLOBAL, which the architecture defines if it > prefer to use the global variables instead of the TCP/pthread_t > field. This is an optimization, so it the architecture does > not define it TCB/pthread_t method will be used (and that's why > I have decided not to use two defines so default sysdep-cancel.h > could warn if one is not defined). > > Checked on x86_64-linux-gnu and on a build with major touched > ABis (aarch64-linux-gnu, alpha-linux-gnu, arm-linux-gnueabihf, > hppa-linux-gnu, i686-linux-gnu, m68k-linux-gnu, microblaze-linux-gnu, > mips-linux-gnu, mips64-linux-gnu, powerpc-linux-gnu, > powerpc64le-linux-gnu, s390-linux-gnu, s390x-linux-gnu, sh4-linux-gnu, > sparcv9-linux-gnu, sparc64-linux-gnu, tilegx-linux-gnu). > > This is based on my "Remove sysdep-cancel assembly macro" patchset [1]. > > * 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. > > [1] https://sourceware.org/ml/libc-alpha/2017-08/msg00095.html > > --- > ChangeLog | 28 ++++++++++ > sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h | 52 ------------------ > sysdeps/unix/sysv/linux/aarch64/sysdep.h | 2 + > sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h | 48 ----------------- > sysdeps/unix/sysv/linux/alpha/sysdep.h | 2 + > sysdeps/unix/sysv/linux/arm/sysdep-cancel.h | 51 ------------------ > sysdeps/unix/sysv/linux/arm/sysdep.h | 2 + > sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h | 50 ----------------- > sysdeps/unix/sysv/linux/hppa/sysdep.h | 2 + > sysdeps/unix/sysv/linux/i386/sysdep-cancel.h | 39 -------------- > sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h | 34 ------------ > sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h | 37 ------------- > sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h | 49 ----------------- > sysdeps/unix/sysv/linux/microblaze/sysdep.h | 2 + > sysdeps/unix/sysv/linux/mips/sysdep-cancel.h | 38 ------------- > sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h | 38 ------------- > sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h | 37 ------------- > .../unix/sysv/linux/s390/s390-32/sysdep-cancel.h | 39 -------------- > .../unix/sysv/linux/s390/s390-64/sysdep-cancel.h | 52 ------------------ > sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h | 2 + > sysdeps/unix/sysv/linux/sh/sysdep-cancel.h | 38 ------------- > sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h | 37 ------------- > sysdeps/unix/sysv/linux/sysdep-cancel.h | 62 ++++++++++++++++++++++ > sysdeps/unix/sysv/linux/tile/sysdep-cancel.h | 38 ------------- > sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h | 54 ------------------- > sysdeps/unix/sysv/linux/x86_64/sysdep.h | 2 + > 26 files changed, 104 insertions(+), 731 deletions(-) > delete mode 100644 sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/alpha/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/arm/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/i386/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/mips/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/sh/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h > create mode 100644 sysdeps/unix/sysv/linux/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/tile/sysdep-cancel.h > delete mode 100644 sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h > > 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 2299526..0000000 > --- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h > +++ /dev/null > @@ -1,52 +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> > -#ifndef __ASSEMBLER__ > -# include <nptl/pthreadP.h> > -#endif > - > -#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 __builtin_expect (__local_multiple_threads == 0, 1) > -# else > -/* There is no __local_multiple_threads for librt, so use the TCB. */ > -# define SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > -# endif > - > -#else > - > -/* For rtld, et cetera. */ > -# define SINGLE_THREAD_P 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/aarch64/sysdep.h b/sysdeps/unix/sysv/linux/aarch64/sysdep.h > index 4bb9112..c92a480 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 e7d080d..0000000 > --- a/sysdeps/unix/sysv/linux/alpha/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 \ > - __builtin_expect (__local_multiple_threads == 0, 1) > -# else > -# define SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > -# endif > - > -#else > - > -# define SINGLE_THREAD_P (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/alpha/sysdep.h b/sysdeps/unix/sysv/linux/alpha/sysdep.h > index 4dc2d46..5f4c20e 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 3e6840e..0000000 > --- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h > +++ /dev/null > @@ -1,51 +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> > -#ifndef __ASSEMBLER__ > -# include <nptl/pthreadP.h> > -#endif > - > -#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 __builtin_expect (__local_multiple_threads == 0, 1) > -# else > -/* There is no __local_multiple_threads for librt, so use the TCB. */ > -# define SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > -# endif > - > -#else > - > -/* For rtld, et cetera. */ > -# define SINGLE_THREAD_P 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/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h > index 3ca2198..6a64351 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 d5966d9..0000000 > --- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h > +++ /dev/null > @@ -1,50 +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> > -#ifndef __ASSEMBLER__ > -# include <nptl/pthreadP.h> > -#endif > - > -#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 \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > - > -#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 \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.h b/sysdeps/unix/sysv/linux/hppa/sysdep.h > index c0cd59e..7163ae4 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 42ec62f..0000000 > --- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h > +++ /dev/null > @@ -1,39 +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) > - > -# define SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > - > -#else > - > -# define SINGLE_THREAD_P (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/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h > deleted file mode 100644 > index 02117ad..0000000 > --- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h > +++ /dev/null > @@ -1,34 +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) > -# define SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0, 1) > -#else > -# define SINGLE_THREAD_P (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/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h > deleted file mode 100644 > index b91451d..0000000 > --- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h > +++ /dev/null > @@ -1,37 +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 \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > -#else > - > -# define SINGLE_THREAD_P (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/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h > deleted file mode 100644 > index ec32745..0000000 > --- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h > +++ /dev/null > @@ -1,49 +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> > -#ifndef __ASSEMBLER__ > -# include <nptl/pthreadP.h> > -#endif > - > -#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 __builtin_expect (__local_multiple_threads == 0, 1) > -# else > -# define SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > -# endif > - > -#else > - > -# define SINGLE_THREAD_P (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/microblaze/sysdep.h b/sysdeps/unix/sysv/linux/microblaze/sysdep.h > index 1fbbc55..7bf5a4e 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 f40a86d..0000000 > --- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h > +++ /dev/null > @@ -1,38 +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 \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) \ > - == 0, 1) > - > -#else > - > -# define SINGLE_THREAD_P 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/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h > deleted file mode 100644 > index b84365a..0000000 > --- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h > +++ /dev/null > @@ -1,38 +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 \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) \ > - == 0, 1) > - > -#else > - > -# define SINGLE_THREAD_P 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/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h > deleted file mode 100644 > index 23dbbbd..0000000 > --- a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h > +++ /dev/null > @@ -1,37 +0,0 @@ > -/* 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) > - > -#endif > - > -#define RTLD_SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h > deleted file mode 100644 > index a6ff391..0000000 > --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h > +++ /dev/null > @@ -1,39 +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> > -#ifndef __ASSEMBLER__ > -# include <nptl/pthreadP.h> > -#endif > - > -#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) > - > -#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-64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h > deleted file mode 100644 > index e54a696..0000000 > --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h > +++ /dev/null > @@ -1,52 +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 \ > - __builtin_expect (__local_multiple_threads == 0, 1) > - > -# else > - > -# define SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > - > -# endif > - > -#else > - > -# define SINGLE_THREAD_P (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-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h > index e22d9b6..622991d 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 1b8c5d7..0000000 > --- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h > +++ /dev/null > @@ -1,38 +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> > -#ifndef __ASSEMBLER__ > -# include <nptl/pthreadP.h> > -#endif > - > -#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) > - > -#endif > - > -#define RTLD_SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > 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 f3eb49f..0000000 > --- a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h > +++ /dev/null > @@ -1,37 +0,0 @@ > -/* 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) > - > -#endif > - > -#define RTLD_SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > diff --git a/sysdeps/unix/sysv/linux/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sysdep-cancel.h > new file mode 100644 > index 0000000..821114b > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/sysdep-cancel.h > @@ -0,0 +1,62 @@ > +/* 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 process is single thread is 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 basically used on x86 for some 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 > +# 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 > + > +#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 fedabfb..0000000 > --- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h > +++ /dev/null > @@ -1,38 +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 \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) \ > - == 0, 1) > - > -#else > - > -# define SINGLE_THREAD_P 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/x86_64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h > deleted file mode 100644 > index 39f9453..0000000 > --- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h > +++ /dev/null > @@ -1,54 +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) > - > -# 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 \ > - __builtin_expect (__local_multiple_threads == 0, 1) > -# else > -# define SINGLE_THREAD_P \ > - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ > - header.multiple_threads) == 0, 1) > -# endif > - > -#else > - > -# define SINGLE_THREAD_P (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/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h > index f299bf2..ad78dd6 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__ */ > > >
On 08/08/2017 08:59, Adhemerval Zanella wrote: > > > On 08/08/2017 03:18, Florian Weimer wrote: >> On 08/07/2017 11:11 PM, Adhemerval Zanella wrote: >>> * sysdeps/unix/sysv/linux/x86_64/sysdep.h (SINGLE_THREAD_BY_GLOBAL): >>> Likewise. >> >> Is this correct? Should it be guarded by IS_IN (libc)? >> >> Thanks, >> Florian >> > > SINGLE_THREAD_BY_GLOBAL is already used guarded with IS_IN (libc) > for the cases where the code is build on both libc and libpthread: > > nptl/libc_multiple_threads.c:21:#if IS_IN (libc) && defined (SINGLE_THREAD_BY_GLOBAL) > nptl/vars.c:38:#if IS_IN (libpthread) && defined (SINGLE_THREAD_BY_GLOBAL) > If noone objects I will commit it.
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 2299526..0000000 --- a/sysdeps/unix/sysv/linux/aarch64/sysdep-cancel.h +++ /dev/null @@ -1,52 +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> -#ifndef __ASSEMBLER__ -# include <nptl/pthreadP.h> -#endif - -#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 __builtin_expect (__local_multiple_threads == 0, 1) -# else -/* There is no __local_multiple_threads for librt, so use the TCB. */ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# endif - -#else - -/* For rtld, et cetera. */ -# define SINGLE_THREAD_P 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/aarch64/sysdep.h b/sysdeps/unix/sysv/linux/aarch64/sysdep.h index 4bb9112..c92a480 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 e7d080d..0000000 --- a/sysdeps/unix/sysv/linux/alpha/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 \ - __builtin_expect (__local_multiple_threads == 0, 1) -# else -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# endif - -#else - -# define SINGLE_THREAD_P (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/alpha/sysdep.h b/sysdeps/unix/sysv/linux/alpha/sysdep.h index 4dc2d46..5f4c20e 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 3e6840e..0000000 --- a/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h +++ /dev/null @@ -1,51 +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> -#ifndef __ASSEMBLER__ -# include <nptl/pthreadP.h> -#endif - -#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 __builtin_expect (__local_multiple_threads == 0, 1) -# else -/* There is no __local_multiple_threads for librt, so use the TCB. */ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# endif - -#else - -/* For rtld, et cetera. */ -# define SINGLE_THREAD_P 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/arm/sysdep.h b/sysdeps/unix/sysv/linux/arm/sysdep.h index 3ca2198..6a64351 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 d5966d9..0000000 --- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h +++ /dev/null @@ -1,50 +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> -#ifndef __ASSEMBLER__ -# include <nptl/pthreadP.h> -#endif - -#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 \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) - -#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 \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.h b/sysdeps/unix/sysv/linux/hppa/sysdep.h index c0cd59e..7163ae4 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 42ec62f..0000000 --- a/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h +++ /dev/null @@ -1,39 +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) - -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) - -#else - -# define SINGLE_THREAD_P (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/ia64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h deleted file mode 100644 index 02117ad..0000000 --- a/sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h +++ /dev/null @@ -1,34 +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) -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, header.multiple_threads) == 0, 1) -#else -# define SINGLE_THREAD_P (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/m68k/sysdep-cancel.h b/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h deleted file mode 100644 index b91451d..0000000 --- a/sysdeps/unix/sysv/linux/m68k/sysdep-cancel.h +++ /dev/null @@ -1,37 +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 \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#else - -# define SINGLE_THREAD_P (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/microblaze/sysdep-cancel.h b/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h deleted file mode 100644 index ec32745..0000000 --- a/sysdeps/unix/sysv/linux/microblaze/sysdep-cancel.h +++ /dev/null @@ -1,49 +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> -#ifndef __ASSEMBLER__ -# include <nptl/pthreadP.h> -#endif - -#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 __builtin_expect (__local_multiple_threads == 0, 1) -# else -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# endif - -#else - -# define SINGLE_THREAD_P (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/microblaze/sysdep.h b/sysdeps/unix/sysv/linux/microblaze/sysdep.h index 1fbbc55..7bf5a4e 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 f40a86d..0000000 --- a/sysdeps/unix/sysv/linux/mips/sysdep-cancel.h +++ /dev/null @@ -1,38 +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 \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) \ - == 0, 1) - -#else - -# define SINGLE_THREAD_P 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/nios2/sysdep-cancel.h b/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h deleted file mode 100644 index b84365a..0000000 --- a/sysdeps/unix/sysv/linux/nios2/sysdep-cancel.h +++ /dev/null @@ -1,38 +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 \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) \ - == 0, 1) - -#else - -# define SINGLE_THREAD_P 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/powerpc/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h deleted file mode 100644 index 23dbbbd..0000000 --- a/sysdeps/unix/sysv/linux/powerpc/sysdep-cancel.h +++ /dev/null @@ -1,37 +0,0 @@ -/* 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) - -#endif - -#define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h deleted file mode 100644 index a6ff391..0000000 --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h +++ /dev/null @@ -1,39 +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> -#ifndef __ASSEMBLER__ -# include <nptl/pthreadP.h> -#endif - -#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) - -#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-64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h deleted file mode 100644 index e54a696..0000000 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h +++ /dev/null @@ -1,52 +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 \ - __builtin_expect (__local_multiple_threads == 0, 1) - -# else - -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) - -# endif - -#else - -# define SINGLE_THREAD_P (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-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h index e22d9b6..622991d 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 1b8c5d7..0000000 --- a/sysdeps/unix/sysv/linux/sh/sysdep-cancel.h +++ /dev/null @@ -1,38 +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> -#ifndef __ASSEMBLER__ -# include <nptl/pthreadP.h> -#endif - -#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) - -#endif - -#define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) 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 f3eb49f..0000000 --- a/sysdeps/unix/sysv/linux/sparc/sysdep-cancel.h +++ /dev/null @@ -1,37 +0,0 @@ -/* 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) - -#endif - -#define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) diff --git a/sysdeps/unix/sysv/linux/sysdep-cancel.h b/sysdeps/unix/sysv/linux/sysdep-cancel.h new file mode 100644 index 0000000..821114b --- /dev/null +++ b/sysdeps/unix/sysv/linux/sysdep-cancel.h @@ -0,0 +1,62 @@ +/* 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 process is single thread is 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 basically used on x86 for some 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 +# 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 + +#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 fedabfb..0000000 --- a/sysdeps/unix/sysv/linux/tile/sysdep-cancel.h +++ /dev/null @@ -1,38 +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 \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) \ - == 0, 1) - -#else - -# define SINGLE_THREAD_P 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/x86_64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h deleted file mode 100644 index 39f9453..0000000 --- a/sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h +++ /dev/null @@ -1,54 +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) - -# 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 \ - __builtin_expect (__local_multiple_threads == 0, 1) -# else -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# endif - -#else - -# define SINGLE_THREAD_P (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/x86_64/sysdep.h b/sysdeps/unix/sysv/linux/x86_64/sysdep.h index f299bf2..ad78dd6 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__ */