Message ID | 391746b22a4a3d5ccc71fbdf312bce0826a1792a.1613582255.git.fweimer@redhat.com |
---|---|
State | New |
Headers | show |
Series | More libpthread removal preparations | expand |
On 17/02/2021 14:21, Florian Weimer via Libc-alpha wrote: > And export __lll_lock_wait and __lll_lock_wait_private as > GLIBC_PRIVATE. This should eliminate the need for the previous > riscv kludge. Should it mark BZ#15648 as fixed (Carlos has opened BZ#15658 to track the LTO issue)? LGTM, thanks > --- > nptl/Makefile | 3 +-- > nptl/Versions | 2 ++ > nptl/libc-lowlevellock.c | 20 -------------------- > nptl/lowlevellock.c | 6 ++---- > sysdeps/nptl/lowlevellock.h | 6 ++++-- > sysdeps/riscv/nptl/libc-lowlevellock.c | 8 -------- > 6 files changed, 9 insertions(+), 36 deletions(-) > delete mode 100644 nptl/libc-lowlevellock.c > delete mode 100644 sysdeps/riscv/nptl/libc-lowlevellock.c > > diff --git a/nptl/Makefile b/nptl/Makefile > index 5a7558d943..62f368af1e 100644 > --- a/nptl/Makefile > +++ b/nptl/Makefile > @@ -33,9 +33,9 @@ routines = \ > forward \ > libc-cancellation \ > libc-cleanup \ > - libc-lowlevellock \ > libc_multiple_threads \ > libc_pthread_init \ > + lowlevellock \ > old_pthread_cond_destroy \ > old_pthread_cond_init \ > pthread_atfork \ Ok. > @@ -100,7 +100,6 @@ libpthread-routines = \ > futex-internal \ > herrno \ > libpthread-compat \ > - lowlevellock \ > nptl-init \ > nptlfreeres \ > old_pthread_atfork \ Ok. > diff --git a/nptl/Versions b/nptl/Versions > index 7254ca4750..694747bb44 100644 > --- a/nptl/Versions > +++ b/nptl/Versions > @@ -77,6 +77,8 @@ libc { > __libc_current_sigrtmin_private; > __libc_dl_error_tsd; > __libc_pthread_init; > + __lll_lock_wait; > + __lll_lock_wait_private; > __pthread_attr_copy; > __pthread_attr_destroy; > __pthread_attr_init; Ok. > diff --git a/nptl/libc-lowlevellock.c b/nptl/libc-lowlevellock.c > deleted file mode 100644 > index e840399c41..0000000000 > --- a/nptl/libc-lowlevellock.c > +++ /dev/null > @@ -1,20 +0,0 @@ > -/* Copyright (C) 2003-2021 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - Contributed by Paul Mackerras <paulus@au.ibm.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 > - <https://www.gnu.org/licenses/>. */ > - > -/* No difference to lowlevellock.c, except we lose a couple of functions. */ > -#include <lowlevellock.c> Ok. > diff --git a/nptl/lowlevellock.c b/nptl/lowlevellock.c > index 1ea397d5cb..7976c6d8f5 100644 > --- a/nptl/lowlevellock.c > +++ b/nptl/lowlevellock.c > @@ -35,10 +35,8 @@ __lll_lock_wait_private (int *futex) > futex_wait ((unsigned int *) futex, 2, LLL_PRIVATE); /* Wait if *futex == 2. */ > } > } > +libc_hidden_def (__lll_lock_wait_private) > > - > -/* This function doesn't get included in libc. */ > -#if IS_IN (libpthread) > void > __lll_lock_wait (int *futex, int private) > { > @@ -52,4 +50,4 @@ __lll_lock_wait (int *futex, int private) > futex_wait ((unsigned int *) futex, 2, private); /* Wait if *futex == 2. */ > } > } > -#endif > +libc_hidden_def (__lll_lock_wait) Ok. > diff --git a/sysdeps/nptl/lowlevellock.h b/sysdeps/nptl/lowlevellock.h > index 0a2b413f86..176ba96251 100644 > --- a/sysdeps/nptl/lowlevellock.h > +++ b/sysdeps/nptl/lowlevellock.h > @@ -75,8 +75,10 @@ > #define lll_cond_trylock(lock) \ > __glibc_unlikely (atomic_compare_and_exchange_bool_acq (&(lock), 2, 0)) > > -extern void __lll_lock_wait_private (int *futex) attribute_hidden; > -extern void __lll_lock_wait (int *futex, int private) attribute_hidden; > +extern void __lll_lock_wait_private (int *futex); > +libc_hidden_proto (__lll_lock_wait_private) > +extern void __lll_lock_wait (int *futex, int private); > +libc_hidden_proto (__lll_lock_wait) > > /* This is an expression rather than a statement even though its value is > void, so that it can be used in a comma expression or as an expression Ok. > diff --git a/sysdeps/riscv/nptl/libc-lowlevellock.c b/sysdeps/riscv/nptl/libc-lowlevellock.c > deleted file mode 100644 > index 9523fb46a5..0000000000 > --- a/sysdeps/riscv/nptl/libc-lowlevellock.c > +++ /dev/null > @@ -1,8 +0,0 @@ > -/* This kludge works around a libpthread static linking problem: > - https://sourceware.org/bugzilla/show_bug.cgi?id=15648. */ > - > -#ifndef SHARED > -# define __lll_lock_wait_private weak_function __lll_lock_wait_private > -#endif > - > -#include <lowlevellock.c> > Ok.
* Adhemerval Zanella: > On 17/02/2021 14:21, Florian Weimer via Libc-alpha wrote: >> And export __lll_lock_wait and __lll_lock_wait_private as >> GLIBC_PRIVATE. This should eliminate the need for the previous >> riscv kludge. > > Should it mark BZ#15648 as fixed (Carlos has opened BZ#15658 to track > the LTO issue)? Makes sense, I've added the [BZ #15648] reference. The multiple definition issue will definitely be gone after this change. Thanks, Florian
diff --git a/nptl/Makefile b/nptl/Makefile index 5a7558d943..62f368af1e 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -33,9 +33,9 @@ routines = \ forward \ libc-cancellation \ libc-cleanup \ - libc-lowlevellock \ libc_multiple_threads \ libc_pthread_init \ + lowlevellock \ old_pthread_cond_destroy \ old_pthread_cond_init \ pthread_atfork \ @@ -100,7 +100,6 @@ libpthread-routines = \ futex-internal \ herrno \ libpthread-compat \ - lowlevellock \ nptl-init \ nptlfreeres \ old_pthread_atfork \ diff --git a/nptl/Versions b/nptl/Versions index 7254ca4750..694747bb44 100644 --- a/nptl/Versions +++ b/nptl/Versions @@ -77,6 +77,8 @@ libc { __libc_current_sigrtmin_private; __libc_dl_error_tsd; __libc_pthread_init; + __lll_lock_wait; + __lll_lock_wait_private; __pthread_attr_copy; __pthread_attr_destroy; __pthread_attr_init; diff --git a/nptl/libc-lowlevellock.c b/nptl/libc-lowlevellock.c deleted file mode 100644 index e840399c41..0000000000 --- a/nptl/libc-lowlevellock.c +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2003-2021 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras <paulus@au.ibm.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 - <https://www.gnu.org/licenses/>. */ - -/* No difference to lowlevellock.c, except we lose a couple of functions. */ -#include <lowlevellock.c> diff --git a/nptl/lowlevellock.c b/nptl/lowlevellock.c index 1ea397d5cb..7976c6d8f5 100644 --- a/nptl/lowlevellock.c +++ b/nptl/lowlevellock.c @@ -35,10 +35,8 @@ __lll_lock_wait_private (int *futex) futex_wait ((unsigned int *) futex, 2, LLL_PRIVATE); /* Wait if *futex == 2. */ } } +libc_hidden_def (__lll_lock_wait_private) - -/* This function doesn't get included in libc. */ -#if IS_IN (libpthread) void __lll_lock_wait (int *futex, int private) { @@ -52,4 +50,4 @@ __lll_lock_wait (int *futex, int private) futex_wait ((unsigned int *) futex, 2, private); /* Wait if *futex == 2. */ } } -#endif +libc_hidden_def (__lll_lock_wait) diff --git a/sysdeps/nptl/lowlevellock.h b/sysdeps/nptl/lowlevellock.h index 0a2b413f86..176ba96251 100644 --- a/sysdeps/nptl/lowlevellock.h +++ b/sysdeps/nptl/lowlevellock.h @@ -75,8 +75,10 @@ #define lll_cond_trylock(lock) \ __glibc_unlikely (atomic_compare_and_exchange_bool_acq (&(lock), 2, 0)) -extern void __lll_lock_wait_private (int *futex) attribute_hidden; -extern void __lll_lock_wait (int *futex, int private) attribute_hidden; +extern void __lll_lock_wait_private (int *futex); +libc_hidden_proto (__lll_lock_wait_private) +extern void __lll_lock_wait (int *futex, int private); +libc_hidden_proto (__lll_lock_wait) /* This is an expression rather than a statement even though its value is void, so that it can be used in a comma expression or as an expression diff --git a/sysdeps/riscv/nptl/libc-lowlevellock.c b/sysdeps/riscv/nptl/libc-lowlevellock.c deleted file mode 100644 index 9523fb46a5..0000000000 --- a/sysdeps/riscv/nptl/libc-lowlevellock.c +++ /dev/null @@ -1,8 +0,0 @@ -/* This kludge works around a libpthread static linking problem: - https://sourceware.org/bugzilla/show_bug.cgi?id=15648. */ - -#ifndef SHARED -# define __lll_lock_wait_private weak_function __lll_lock_wait_private -#endif - -#include <lowlevellock.c>