[1/3] linux: Move flockfile/_IO_flockfile into libc

Message ID 20210506200614.2928007-1-adhemerval.zanella@linaro.org
State Superseded
Delegated to: Adhemerval Zanella Netto
Headers
Series [1/3] linux: Move flockfile/_IO_flockfile into libc |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Adhemerval Zanella Netto May 6, 2021, 8:06 p.m. UTC
  The single-thread optimization is done in a platform neutral way
by using __libc_single_threaded.

Hurd is not change, it is used it own lock scheme (which call
_cthreads_flockfile).

Checked on x86_64-linux-gnu.
---
 nptl/Makefile                                 |  2 --
 stdio-common/flockfile.c                      | 11 +++++--
 sysdeps/pthread/flockfile.c                   | 31 -------------------
 .../sysv/linux/aarch64/libpthread.abilist     |  2 --
 .../unix/sysv/linux/alpha/libpthread.abilist  |  2 --
 .../unix/sysv/linux/arc/libpthread.abilist    |  2 --
 .../unix/sysv/linux/arm/be/libpthread.abilist |  2 --
 .../unix/sysv/linux/arm/le/libpthread.abilist |  2 --
 .../unix/sysv/linux/csky/libpthread.abilist   |  2 --
 .../unix/sysv/linux/hppa/libpthread.abilist   |  2 --
 .../unix/sysv/linux/i386/libpthread.abilist   |  2 --
 .../unix/sysv/linux/ia64/libpthread.abilist   |  2 --
 .../linux/m68k/coldfire/libpthread.abilist    |  2 --
 .../sysv/linux/m68k/m680x0/libpthread.abilist |  2 --
 .../linux/microblaze/be/libpthread.abilist    |  2 --
 .../linux/microblaze/le/libpthread.abilist    |  2 --
 .../sysv/linux/mips/mips32/libpthread.abilist |  2 --
 .../sysv/linux/mips/mips64/libpthread.abilist |  2 --
 .../unix/sysv/linux/nios2/libpthread.abilist  |  2 --
 .../powerpc/powerpc32/libpthread.abilist      |  2 --
 .../powerpc/powerpc64/be/libpthread.abilist   |  2 --
 .../powerpc/powerpc64/le/libpthread.abilist   |  2 --
 .../sysv/linux/riscv/rv32/libpthread.abilist  |  2 --
 .../sysv/linux/riscv/rv64/libpthread.abilist  |  2 --
 .../linux/s390/s390-32/libpthread.abilist     |  2 --
 .../linux/s390/s390-64/libpthread.abilist     |  2 --
 .../unix/sysv/linux/sh/be/libpthread.abilist  |  2 --
 .../unix/sysv/linux/sh/le/libpthread.abilist  |  2 --
 .../linux/sparc/sparc32/libpthread.abilist    |  2 --
 .../linux/sparc/sparc64/libpthread.abilist    |  2 --
 .../sysv/linux/x86_64/64/libpthread.abilist   |  2 --
 .../sysv/linux/x86_64/x32/libpthread.abilist  |  2 --
 32 files changed, 8 insertions(+), 94 deletions(-)
 delete mode 100644 sysdeps/pthread/flockfile.c
  

Comments

Florian Weimer May 6, 2021, 8:34 p.m. UTC | #1
* Adhemerval Zanella:

> diff --git a/stdio-common/flockfile.c b/stdio-common/flockfile.c
> index 0bc856a465..c838dcd538 100644
> --- a/stdio-common/flockfile.c
> +++ b/stdio-common/flockfile.c
> @@ -17,13 +17,18 @@
>     <https://www.gnu.org/licenses/>.  */
>  
>  #include <stdio.h>
> +#include <stdio-lock.h>
> +#include <sys/single_threaded.h>
>  
>  void
>  __flockfile (FILE *stream)
>  {
> +  bool multithread = __libc_single_threaded == 0;
> +  if (multithread)
> +    {
> +      stream->_flags2 |= _IO_FLAGS2_NEED_LOCK;
> +      _IO_lock_lock (*stream->_lock);
> +    }
>  }

I'm afraid this is not correct because a thread can become multithreaded
between the flockfile/funlockfile calls.  As a result, the lock state
would be wrong at funlockfile time.

In order to optimize locks in such cases, it is necessary to perform the
same actions as the locking/unlocking operations, but without atomic
instructions.

The stream->_flags2 update has a data race with other _flags2 updates
(e.g., in __malloc_stats), but that's a preexisting bug that should be
fixed separately (there might be other affected places).

Thanks,
Florian
  
Adhemerval Zanella Netto May 6, 2021, 9:01 p.m. UTC | #2
On 06/05/2021 17:34, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>> diff --git a/stdio-common/flockfile.c b/stdio-common/flockfile.c
>> index 0bc856a465..c838dcd538 100644
>> --- a/stdio-common/flockfile.c
>> +++ b/stdio-common/flockfile.c
>> @@ -17,13 +17,18 @@
>>     <https://www.gnu.org/licenses/>.  */
>>  
>>  #include <stdio.h>
>> +#include <stdio-lock.h>
>> +#include <sys/single_threaded.h>
>>  
>>  void
>>  __flockfile (FILE *stream)
>>  {
>> +  bool multithread = __libc_single_threaded == 0;
>> +  if (multithread)
>> +    {
>> +      stream->_flags2 |= _IO_FLAGS2_NEED_LOCK;
>> +      _IO_lock_lock (*stream->_lock);
>> +    }
>>  }
> 
> I'm afraid this is not correct because a thread can become multithreaded
> between the flockfile/funlockfile calls.  As a result, the lock state
> would be wrong at funlockfile time.
> 
> In order to optimize locks in such cases, it is necessary to perform the
> same actions as the locking/unlocking operations, but without atomic
> instructions.
> 
> The stream->_flags2 update has a data race with other _flags2 updates
> (e.g., in __malloc_stats), but that's a preexisting bug that should be
> fixed separately (there might be other affected places).
> 

I think both issues are already exist in current code, although libpthread
one always issues the unlock this same issue can happen. 

I tried to just mimic what is currently done, but if you prefer we can
always use the libpthread version as default.  For _IO_FLAGS2_NEED_LOCK
set, I think we should set only when get the stream lock.
  
Florian Weimer May 7, 2021, 6:37 a.m. UTC | #3
* Adhemerval Zanella:

> I tried to just mimic what is currently done, but if you prefer we can
> always use the libpthread version as default.

Yes, please.

> For _IO_FLAGS2_NEED_LOCK set, I think we should set only when get the
> stream lock.

Probably, but let's keep that as a separate change.

Thanks,
Florian
  

Patch

diff --git a/nptl/Makefile b/nptl/Makefile
index b5f26c6864..005fef1bd7 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -178,7 +178,6 @@  libpthread-routines = \
   cleanup \
   cleanup_defer \
   events \
-  flockfile \
   ftrylockfile \
   funlockfile \
   libpthread-compat \
@@ -447,7 +446,6 @@  extra-objs += $(crti-objs) $(crtn-objs)
 extra-objs += pt-crti.o
 endif
 
-CFLAGS-flockfile.c += $(libio-mtsafe)
 CFLAGS-ftrylockfile.c += $(libio-mtsafe)
 CFLAGS-funlockfile.c += $(libio-mtsafe)
 
diff --git a/stdio-common/flockfile.c b/stdio-common/flockfile.c
index 0bc856a465..c838dcd538 100644
--- a/stdio-common/flockfile.c
+++ b/stdio-common/flockfile.c
@@ -17,13 +17,18 @@ 
    <https://www.gnu.org/licenses/>.  */
 
 #include <stdio.h>
-
-#undef _IO_flockfile
+#include <stdio-lock.h>
+#include <sys/single_threaded.h>
 
 void
 __flockfile (FILE *stream)
 {
-  /* Do nothing.  Using this version does not do any locking.  */
+  bool multithread = __libc_single_threaded == 0;
+  if (multithread)
+    {
+      stream->_flags2 |= _IO_FLAGS2_NEED_LOCK;
+      _IO_lock_lock (*stream->_lock);
+    }
 }
 weak_alias (__flockfile, flockfile);
 weak_alias (__flockfile, _IO_flockfile)
diff --git a/sysdeps/pthread/flockfile.c b/sysdeps/pthread/flockfile.c
deleted file mode 100644
index c67d6c8535..0000000000
--- a/sysdeps/pthread/flockfile.c
+++ /dev/null
@@ -1,31 +0,0 @@ 
-/* Copyright (C) 2002-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@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
-   <https://www.gnu.org/licenses/>.  */
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdio-lock.h>
-
-
-void
-__flockfile (FILE *stream)
-{
-  stream->_flags2 |= _IO_FLAGS2_NEED_LOCK;
-  _IO_lock_lock (*stream->_lock);
-}
-strong_alias (__flockfile, _IO_flockfile)
-weak_alias (__flockfile, flockfile)
diff --git a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
index b4f0fdd999..b5a21ad7cd 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libpthread.abilist
@@ -1,4 +1,3 @@ 
-GLIBC_2.17 _IO_flockfile F
 GLIBC_2.17 _IO_ftrylockfile F
 GLIBC_2.17 _IO_funlockfile F
 GLIBC_2.17 __errno_location F
@@ -6,7 +5,6 @@  GLIBC_2.17 __pthread_register_cancel F
 GLIBC_2.17 __pthread_register_cancel_defer F
 GLIBC_2.17 __pthread_unregister_cancel F
 GLIBC_2.17 __pthread_unregister_cancel_restore F
-GLIBC_2.17 flockfile F
 GLIBC_2.17 ftrylockfile F
 GLIBC_2.17 funlockfile F
 GLIBC_2.17 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
index c2017537e2..d88a55c5dc 100644
--- a/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libpthread.abilist
@@ -1,8 +1,6 @@ 
-GLIBC_2.0 _IO_flockfile F
 GLIBC_2.0 _IO_ftrylockfile F
 GLIBC_2.0 _IO_funlockfile F
 GLIBC_2.0 __errno_location F
-GLIBC_2.0 flockfile F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
 GLIBC_2.0 pthread_cancel F
diff --git a/sysdeps/unix/sysv/linux/arc/libpthread.abilist b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
index bc072be61f..ddda1cb0b8 100644
--- a/sysdeps/unix/sysv/linux/arc/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libpthread.abilist
@@ -1,4 +1,3 @@ 
-GLIBC_2.32 _IO_flockfile F
 GLIBC_2.32 _IO_ftrylockfile F
 GLIBC_2.32 _IO_funlockfile F
 GLIBC_2.32 __errno_location F
@@ -6,7 +5,6 @@  GLIBC_2.32 __pthread_register_cancel F
 GLIBC_2.32 __pthread_register_cancel_defer F
 GLIBC_2.32 __pthread_unregister_cancel F
 GLIBC_2.32 __pthread_unregister_cancel_restore F
-GLIBC_2.32 flockfile F
 GLIBC_2.32 ftrylockfile F
 GLIBC_2.32 funlockfile F
 GLIBC_2.32 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
index 5b52c456fb..ae1defcddc 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libpthread.abilist
@@ -8,7 +8,6 @@  GLIBC_2.28 thrd_detach F
 GLIBC_2.28 thrd_join F
 GLIBC_2.30 __libpthread_version_placeholder F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 _IO_flockfile F
 GLIBC_2.4 _IO_ftrylockfile F
 GLIBC_2.4 _IO_funlockfile F
 GLIBC_2.4 __errno_location F
@@ -17,7 +16,6 @@  GLIBC_2.4 __pthread_register_cancel F
 GLIBC_2.4 __pthread_register_cancel_defer F
 GLIBC_2.4 __pthread_unregister_cancel F
 GLIBC_2.4 __pthread_unregister_cancel_restore F
-GLIBC_2.4 flockfile F
 GLIBC_2.4 ftrylockfile F
 GLIBC_2.4 funlockfile F
 GLIBC_2.4 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
index 5b52c456fb..ae1defcddc 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libpthread.abilist
@@ -8,7 +8,6 @@  GLIBC_2.28 thrd_detach F
 GLIBC_2.28 thrd_join F
 GLIBC_2.30 __libpthread_version_placeholder F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 _IO_flockfile F
 GLIBC_2.4 _IO_ftrylockfile F
 GLIBC_2.4 _IO_funlockfile F
 GLIBC_2.4 __errno_location F
@@ -17,7 +16,6 @@  GLIBC_2.4 __pthread_register_cancel F
 GLIBC_2.4 __pthread_register_cancel_defer F
 GLIBC_2.4 __pthread_unregister_cancel F
 GLIBC_2.4 __pthread_unregister_cancel_restore F
-GLIBC_2.4 flockfile F
 GLIBC_2.4 ftrylockfile F
 GLIBC_2.4 funlockfile F
 GLIBC_2.4 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/csky/libpthread.abilist b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
index d55f09a9fe..760a569b51 100644
--- a/sysdeps/unix/sysv/linux/csky/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libpthread.abilist
@@ -1,4 +1,3 @@ 
-GLIBC_2.29 _IO_flockfile F
 GLIBC_2.29 _IO_ftrylockfile F
 GLIBC_2.29 _IO_funlockfile F
 GLIBC_2.29 __errno_location F
@@ -6,7 +5,6 @@  GLIBC_2.29 __pthread_register_cancel F
 GLIBC_2.29 __pthread_register_cancel_defer F
 GLIBC_2.29 __pthread_unregister_cancel F
 GLIBC_2.29 __pthread_unregister_cancel_restore F
-GLIBC_2.29 flockfile F
 GLIBC_2.29 ftrylockfile F
 GLIBC_2.29 funlockfile F
 GLIBC_2.29 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
index 2c4a7041b6..4ff101d7f2 100644
--- a/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libpthread.abilist
@@ -3,11 +3,9 @@  GLIBC_2.12 pthread_getname_np F
 GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.2 _IO_flockfile F
 GLIBC_2.2 _IO_ftrylockfile F
 GLIBC_2.2 _IO_funlockfile F
 GLIBC_2.2 __errno_location F
-GLIBC_2.2 flockfile F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
 GLIBC_2.2 pthread_attr_getguardsize F
diff --git a/sysdeps/unix/sysv/linux/i386/libpthread.abilist b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
index 1cbc49b937..36d415aef5 100644
--- a/sysdeps/unix/sysv/linux/i386/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libpthread.abilist
@@ -1,8 +1,6 @@ 
-GLIBC_2.0 _IO_flockfile F
 GLIBC_2.0 _IO_ftrylockfile F
 GLIBC_2.0 _IO_funlockfile F
 GLIBC_2.0 __errno_location F
-GLIBC_2.0 flockfile F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
 GLIBC_2.0 pthread_cancel F
diff --git a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
index 6b87a988d4..3c59353815 100644
--- a/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libpthread.abilist
@@ -3,11 +3,9 @@  GLIBC_2.12 pthread_getname_np F
 GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.2 _IO_flockfile F
 GLIBC_2.2 _IO_ftrylockfile F
 GLIBC_2.2 _IO_funlockfile F
 GLIBC_2.2 __errno_location F
-GLIBC_2.2 flockfile F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
 GLIBC_2.2 pthread_attr_getguardsize F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
index 5b52c456fb..ae1defcddc 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libpthread.abilist
@@ -8,7 +8,6 @@  GLIBC_2.28 thrd_detach F
 GLIBC_2.28 thrd_join F
 GLIBC_2.30 __libpthread_version_placeholder F
 GLIBC_2.31 pthread_clockjoin_np F
-GLIBC_2.4 _IO_flockfile F
 GLIBC_2.4 _IO_ftrylockfile F
 GLIBC_2.4 _IO_funlockfile F
 GLIBC_2.4 __errno_location F
@@ -17,7 +16,6 @@  GLIBC_2.4 __pthread_register_cancel F
 GLIBC_2.4 __pthread_register_cancel_defer F
 GLIBC_2.4 __pthread_unregister_cancel F
 GLIBC_2.4 __pthread_unregister_cancel_restore F
-GLIBC_2.4 flockfile F
 GLIBC_2.4 ftrylockfile F
 GLIBC_2.4 funlockfile F
 GLIBC_2.4 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
index 1cbc49b937..36d415aef5 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libpthread.abilist
@@ -1,8 +1,6 @@ 
-GLIBC_2.0 _IO_flockfile F
 GLIBC_2.0 _IO_ftrylockfile F
 GLIBC_2.0 _IO_funlockfile F
 GLIBC_2.0 __errno_location F
-GLIBC_2.0 flockfile F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
 GLIBC_2.0 pthread_cancel F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
index ee29730057..5c6c7b229c 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libpthread.abilist
@@ -1,4 +1,3 @@ 
-GLIBC_2.18 _IO_flockfile F
 GLIBC_2.18 _IO_ftrylockfile F
 GLIBC_2.18 _IO_funlockfile F
 GLIBC_2.18 __errno_location F
@@ -6,7 +5,6 @@  GLIBC_2.18 __pthread_register_cancel F
 GLIBC_2.18 __pthread_register_cancel_defer F
 GLIBC_2.18 __pthread_unregister_cancel F
 GLIBC_2.18 __pthread_unregister_cancel_restore F
-GLIBC_2.18 flockfile F
 GLIBC_2.18 ftrylockfile F
 GLIBC_2.18 funlockfile F
 GLIBC_2.18 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
index ee29730057..5c6c7b229c 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libpthread.abilist
@@ -1,4 +1,3 @@ 
-GLIBC_2.18 _IO_flockfile F
 GLIBC_2.18 _IO_ftrylockfile F
 GLIBC_2.18 _IO_funlockfile F
 GLIBC_2.18 __errno_location F
@@ -6,7 +5,6 @@  GLIBC_2.18 __pthread_register_cancel F
 GLIBC_2.18 __pthread_register_cancel_defer F
 GLIBC_2.18 __pthread_unregister_cancel F
 GLIBC_2.18 __pthread_unregister_cancel_restore F
-GLIBC_2.18 flockfile F
 GLIBC_2.18 ftrylockfile F
 GLIBC_2.18 funlockfile F
 GLIBC_2.18 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
index e523996633..1d36022ee2 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libpthread.abilist
@@ -1,8 +1,6 @@ 
-GLIBC_2.0 _IO_flockfile F
 GLIBC_2.0 _IO_ftrylockfile F
 GLIBC_2.0 _IO_funlockfile F
 GLIBC_2.0 __errno_location F
-GLIBC_2.0 flockfile F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
 GLIBC_2.0 pthread_cancel F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
index e523996633..1d36022ee2 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libpthread.abilist
@@ -1,8 +1,6 @@ 
-GLIBC_2.0 _IO_flockfile F
 GLIBC_2.0 _IO_ftrylockfile F
 GLIBC_2.0 _IO_funlockfile F
 GLIBC_2.0 __errno_location F
-GLIBC_2.0 flockfile F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
 GLIBC_2.0 pthread_cancel F
diff --git a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
index 059b21f854..5611822c38 100644
--- a/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libpthread.abilist
@@ -1,4 +1,3 @@ 
-GLIBC_2.21 _IO_flockfile F
 GLIBC_2.21 _IO_ftrylockfile F
 GLIBC_2.21 _IO_funlockfile F
 GLIBC_2.21 __errno_location F
@@ -6,7 +5,6 @@  GLIBC_2.21 __pthread_register_cancel F
 GLIBC_2.21 __pthread_register_cancel_defer F
 GLIBC_2.21 __pthread_unregister_cancel F
 GLIBC_2.21 __pthread_unregister_cancel_restore F
-GLIBC_2.21 flockfile F
 GLIBC_2.21 ftrylockfile F
 GLIBC_2.21 funlockfile F
 GLIBC_2.21 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
index 84312f522b..aa24808b1e 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/libpthread.abilist
@@ -1,8 +1,6 @@ 
-GLIBC_2.0 _IO_flockfile F
 GLIBC_2.0 _IO_ftrylockfile F
 GLIBC_2.0 _IO_funlockfile F
 GLIBC_2.0 __errno_location F
-GLIBC_2.0 flockfile F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
 GLIBC_2.0 pthread_cancel F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
index 2d5583ebe8..5f5abdae73 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libpthread.abilist
@@ -6,11 +6,9 @@  GLIBC_2.18 pthread_setattr_default_np F
 GLIBC_2.28 thrd_create F
 GLIBC_2.28 thrd_detach F
 GLIBC_2.28 thrd_join F
-GLIBC_2.3 _IO_flockfile F
 GLIBC_2.3 _IO_ftrylockfile F
 GLIBC_2.3 _IO_funlockfile F
 GLIBC_2.3 __errno_location F
-GLIBC_2.3 flockfile F
 GLIBC_2.3 ftrylockfile F
 GLIBC_2.3 funlockfile F
 GLIBC_2.3 pthread_attr_getguardsize F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
index b4f0fdd999..b5a21ad7cd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libpthread.abilist
@@ -1,4 +1,3 @@ 
-GLIBC_2.17 _IO_flockfile F
 GLIBC_2.17 _IO_ftrylockfile F
 GLIBC_2.17 _IO_funlockfile F
 GLIBC_2.17 __errno_location F
@@ -6,7 +5,6 @@  GLIBC_2.17 __pthread_register_cancel F
 GLIBC_2.17 __pthread_register_cancel_defer F
 GLIBC_2.17 __pthread_unregister_cancel F
 GLIBC_2.17 __pthread_unregister_cancel_restore F
-GLIBC_2.17 flockfile F
 GLIBC_2.17 ftrylockfile F
 GLIBC_2.17 funlockfile F
 GLIBC_2.17 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
index cc35881f1a..f0493d8973 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libpthread.abilist
@@ -1,4 +1,3 @@ 
-GLIBC_2.33 _IO_flockfile F
 GLIBC_2.33 _IO_ftrylockfile F
 GLIBC_2.33 _IO_funlockfile F
 GLIBC_2.33 __errno_location F
@@ -6,7 +5,6 @@  GLIBC_2.33 __pthread_register_cancel F
 GLIBC_2.33 __pthread_register_cancel_defer F
 GLIBC_2.33 __pthread_unregister_cancel F
 GLIBC_2.33 __pthread_unregister_cancel_restore F
-GLIBC_2.33 flockfile F
 GLIBC_2.33 ftrylockfile F
 GLIBC_2.33 funlockfile F
 GLIBC_2.33 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
index 6946ced1b9..c0279888a0 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libpthread.abilist
@@ -1,4 +1,3 @@ 
-GLIBC_2.27 _IO_flockfile F
 GLIBC_2.27 _IO_ftrylockfile F
 GLIBC_2.27 _IO_funlockfile F
 GLIBC_2.27 __errno_location F
@@ -6,7 +5,6 @@  GLIBC_2.27 __pthread_register_cancel F
 GLIBC_2.27 __pthread_register_cancel_defer F
 GLIBC_2.27 __pthread_unregister_cancel F
 GLIBC_2.27 __pthread_unregister_cancel_restore F
-GLIBC_2.27 flockfile F
 GLIBC_2.27 ftrylockfile F
 GLIBC_2.27 funlockfile F
 GLIBC_2.27 pthread_attr_getaffinity_np F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
index 0c6df4a437..286aedf9ca 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libpthread.abilist
@@ -1,8 +1,6 @@ 
-GLIBC_2.0 _IO_flockfile F
 GLIBC_2.0 _IO_ftrylockfile F
 GLIBC_2.0 _IO_funlockfile F
 GLIBC_2.0 __errno_location F
-GLIBC_2.0 flockfile F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
 GLIBC_2.0 pthread_cancel F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
index d287d8fe7a..35248d9303 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libpthread.abilist
@@ -4,11 +4,9 @@  GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
 GLIBC_2.19 __libpthread_version_placeholder F
-GLIBC_2.2 _IO_flockfile F
 GLIBC_2.2 _IO_ftrylockfile F
 GLIBC_2.2 _IO_funlockfile F
 GLIBC_2.2 __errno_location F
-GLIBC_2.2 flockfile F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
 GLIBC_2.2 pthread_attr_getguardsize F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
index 2c4a7041b6..4ff101d7f2 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libpthread.abilist
@@ -3,11 +3,9 @@  GLIBC_2.12 pthread_getname_np F
 GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.2 _IO_flockfile F
 GLIBC_2.2 _IO_ftrylockfile F
 GLIBC_2.2 _IO_funlockfile F
 GLIBC_2.2 __errno_location F
-GLIBC_2.2 flockfile F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
 GLIBC_2.2 pthread_attr_getguardsize F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
index 2c4a7041b6..4ff101d7f2 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libpthread.abilist
@@ -3,11 +3,9 @@  GLIBC_2.12 pthread_getname_np F
 GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.2 _IO_flockfile F
 GLIBC_2.2 _IO_ftrylockfile F
 GLIBC_2.2 _IO_funlockfile F
 GLIBC_2.2 __errno_location F
-GLIBC_2.2 flockfile F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
 GLIBC_2.2 pthread_attr_getguardsize F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
index c2017537e2..d88a55c5dc 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libpthread.abilist
@@ -1,8 +1,6 @@ 
-GLIBC_2.0 _IO_flockfile F
 GLIBC_2.0 _IO_ftrylockfile F
 GLIBC_2.0 _IO_funlockfile F
 GLIBC_2.0 __errno_location F
-GLIBC_2.0 flockfile F
 GLIBC_2.0 ftrylockfile F
 GLIBC_2.0 funlockfile F
 GLIBC_2.0 pthread_cancel F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
index 6b87a988d4..3c59353815 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libpthread.abilist
@@ -3,11 +3,9 @@  GLIBC_2.12 pthread_getname_np F
 GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.2 _IO_flockfile F
 GLIBC_2.2 _IO_ftrylockfile F
 GLIBC_2.2 _IO_funlockfile F
 GLIBC_2.2 __errno_location F
-GLIBC_2.2 flockfile F
 GLIBC_2.2 ftrylockfile F
 GLIBC_2.2 funlockfile F
 GLIBC_2.2 pthread_attr_getguardsize F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
index cea092874a..732e55148d 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libpthread.abilist
@@ -3,11 +3,9 @@  GLIBC_2.12 pthread_getname_np F
 GLIBC_2.12 pthread_setname_np F
 GLIBC_2.18 pthread_getattr_default_np F
 GLIBC_2.18 pthread_setattr_default_np F
-GLIBC_2.2.5 _IO_flockfile F
 GLIBC_2.2.5 _IO_ftrylockfile F
 GLIBC_2.2.5 _IO_funlockfile F
 GLIBC_2.2.5 __errno_location F
-GLIBC_2.2.5 flockfile F
 GLIBC_2.2.5 ftrylockfile F
 GLIBC_2.2.5 funlockfile F
 GLIBC_2.2.5 pthread_attr_getguardsize F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
index 394748f198..22262d9ceb 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libpthread.abilist
@@ -1,4 +1,3 @@ 
-GLIBC_2.16 _IO_flockfile F
 GLIBC_2.16 _IO_ftrylockfile F
 GLIBC_2.16 _IO_funlockfile F
 GLIBC_2.16 __errno_location F
@@ -6,7 +5,6 @@  GLIBC_2.16 __pthread_register_cancel F
 GLIBC_2.16 __pthread_register_cancel_defer F
 GLIBC_2.16 __pthread_unregister_cancel F
 GLIBC_2.16 __pthread_unregister_cancel_restore F
-GLIBC_2.16 flockfile F
 GLIBC_2.16 ftrylockfile F
 GLIBC_2.16 funlockfile F
 GLIBC_2.16 pthread_attr_getaffinity_np F