This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix Linux fcntl OFD locks for non-LFS architectures (BZ#20251)


Ping.

On 30/04/2018 08:10, Adhemerval Zanella wrote:
> Ping.
> 
> On 04/04/2018 18:26, Adhemerval Zanella wrote:
>> This patch fixes the OFD ("file private") locks for architectures that
>> support non-LFS flock definition (__USE_FILE_OFFSET64 not defined).
>> The problem in this case is both F_OFD_{GETLK,SETLK,SETLKW} and
>> F_{SET,GET}L{W}K64 expects a flock64 argument.  Kernel idea originally was
>> to avoid using such flags in non-LFS syscall, but since GLIBC uses fcntl64
>> as default it still can provide the functionality and avoid the bogus
>> struct kernel passing by adjusting the struct manually for the required
>> flags.
>>
>> The idea follows other LFS interfaces that provide two symbols:
>>
>>   1. A new LFS fcntl64 is added on default ABI with the usual macros to select
>>      it for FILE_OFFSET_BITS=64.
>>
>>   2. The Linux non-LFS fcntl use a stack allocated struct flock64 for
>>      F_OFD_{GETLK,SETLK,SETLKW} and F_{SET,GET}L{W}K64 and copy the results on
>>      the user provided struct.
>>
>>   3. Keep a compat symbol with old broken semantic for architectures that do
>>      not define __OFF_T_MATCHES_OFF64_T.
>>
>> So for architectures which defines __USE_FILE_OFFSET64, fcntl64 will aliased
>> to fcntl and no adjustment would be required.
>>
>> Checked on x86_64-linux-gnu and i686-linux-gnu.
>>
>> 	[BZ #20251]
>> 	* include/fcntl.h (__libc_fcntl64, __fcntl64): New prototype.
>> 	* io/Makefile (routines): Add fcntl64.
>> 	(CFLAGS-fcntl64.c): New rule.
>> 	* io/fcntl.h (fcntl64): Add prototype and redirect if
>> 	__USE_FILE_OFFSET64 is defined.
>> 	* sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Remove file.
>> 	* io/fcntl64.c: New file.
>> 	* nptl/Makefile (pthread-compat-wrappers): Add fcntl64.
>> 	(CFLAGS-fcntl64.c): New rule.
>> 	* sysdeps/mach/hurd/fcntl.c: Alias fcntl to fcntl64 symbols.
>> 	* io/Versions [GLIBC_2.28] (fcntl64; __fcntl64): New symbols.
>> 	* sysdeps/unix/sysv/linux/fcntl.c (__libc_fcntl): Fix F_GETLK64,
>> 	F_OFD_GETLK, F_SETLK64, F_SETLKW64, F_OFD_SETLK, and F_OFD_SETLKW for
>> 	non-LFS case.
>> 	(fcntl_common, __fcntl_nocancel): Remove function.
>> 	(flock_to_flock64): New function.
>> 	* sysdeps/unix/sysv/linux/fcntl64.c: New file.
>> 	* sysdeps/mach/hurd/i386/libc.abilist [GLIBC_2.28] (__fcntl64, fcntl,
>> 	fcntl64): New symbols.
>> 	* sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/i386/libc.abilis: Likewise.
>> 	* sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/powerpc/kernel-features.h: Likewise.
>> 	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
>> 	Likewise.
>> 	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist:
>> 	Likewise.
>> 	* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/aarch64/libc.abilist [GLIBC_2.28] (__fcntl64,
>> 	fcntl64): New symbols.
>> 	* sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise.
>> 	* sysdeps/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/tile/tilegx32/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/tile/tilegx64/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
>> 	* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
>> ---
>>  ChangeLog                                          |  56 +++++++++++
>>  include/fcntl.h                                    |   4 +
>>  io/Makefile                                        |   3 +-
>>  io/Versions                                        |   3 +
>>  io/fcntl.h                                         |  11 +++
>>  .../powerpc/powerpc64/fcntl.c => io/fcntl64.c      |  28 +++---
>>  nptl/Makefile                                      |   3 +-
>>  sysdeps/mach/hurd/fcntl.c                          |   5 +
>>  sysdeps/mach/hurd/i386/libc.abilist                |   4 +
>>  sysdeps/unix/sysv/linux/aarch64/libc.abilist       |   3 +
>>  sysdeps/unix/sysv/linux/alpha/libc.abilist         |   3 +
>>  sysdeps/unix/sysv/linux/arm/libc.abilist           |   4 +
>>  sysdeps/unix/sysv/linux/fcntl.c                    | 102 +++++++++++++--------
>>  sysdeps/unix/sysv/linux/fcntl64.c                  |  99 ++++++++++++++++++++
>>  sysdeps/unix/sysv/linux/hppa/libc.abilist          |   4 +
>>  sysdeps/unix/sysv/linux/i386/libc.abilist          |   4 +
>>  sysdeps/unix/sysv/linux/ia64/libc.abilist          |   3 +
>>  sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist |   4 +
>>  sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist   |   4 +
>>  sysdeps/unix/sysv/linux/microblaze/libc.abilist    |   4 +
>>  .../unix/sysv/linux/mips/mips32/fpu/libc.abilist   |   4 +
>>  .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist |   4 +
>>  .../unix/sysv/linux/mips/mips64/n32/libc.abilist   |   4 +
>>  .../unix/sysv/linux/mips/mips64/n64/libc.abilist   |   3 +
>>  sysdeps/unix/sysv/linux/nios2/libc.abilist         |   4 +
>>  sysdeps/unix/sysv/linux/powerpc/kernel-features.h  |   8 ++
>>  .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist  |   4 +
>>  .../linux/powerpc/powerpc32/nofpu/libc.abilist     |   4 +
>>  .../sysv/linux/powerpc/powerpc64/libc-le.abilist   |   3 +
>>  .../unix/sysv/linux/powerpc/powerpc64/libc.abilist |   3 +
>>  sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist    |   3 +
>>  sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist  |   4 +
>>  sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist  |   3 +
>>  sysdeps/unix/sysv/linux/sh/libc.abilist            |   4 +
>>  sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist |   4 +
>>  sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist |   3 +
>>  sysdeps/unix/sysv/linux/tile/tilegx32/libc.abilist |   3 +
>>  sysdeps/unix/sysv/linux/tile/tilegx64/libc.abilist |   3 +
>>  sysdeps/unix/sysv/linux/x86_64/64/libc.abilist     |   3 +
>>  sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist    |   3 +
>>  40 files changed, 376 insertions(+), 49 deletions(-)
>>  rename sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c => io/fcntl64.c (65%)
>>  create mode 100644 sysdeps/unix/sysv/linux/fcntl64.c
>>
>> diff --git a/include/fcntl.h b/include/fcntl.h
>> index 3d68c5e..5fac115 100644
>> --- a/include/fcntl.h
>> +++ b/include/fcntl.h
>> @@ -10,10 +10,14 @@ extern int __libc_open (const char *file, int oflag, ...);
>>  libc_hidden_proto (__libc_open)
>>  extern int __libc_fcntl (int fd, int cmd, ...) attribute_hidden;
>>  libc_hidden_proto (__libc_fcntl)
>> +extern int __libc_fcntl64 (int fd, int cmd, ...) attribute_hidden;
>> +libc_hidden_proto (__libc_fcntl64)
>>  extern int __open (const char *__file, int __oflag, ...);
>>  libc_hidden_proto (__open)
>>  extern int __fcntl (int __fd, int __cmd, ...);
>>  libc_hidden_proto (__fcntl)
>> +extern int __fcntl64 (int __fd, int __cmd, ...);
>> +libc_hidden_proto (__fcntl64)
>>  extern int __openat (int __fd, const char *__file, int __oflag, ...)
>>    __nonnull ((2));
>>  libc_hidden_proto (__openat)
>> diff --git a/io/Makefile b/io/Makefile
>> index 2117cb6..4a0d8fe 100644
>> --- a/io/Makefile
>> +++ b/io/Makefile
>> @@ -40,7 +40,7 @@ routines :=								\
>>  	mkdir mkdirat							\
>>  	open open_2 open64 open64_2 openat openat_2 openat64 openat64_2	\
>>  	read write lseek lseek64 access euidaccess faccessat		\
>> -	fcntl flock lockf lockf64					\
>> +	fcntl fcntl64 flock lockf lockf64				\
>>  	close dup dup2 dup3 pipe pipe2					\
>>  	creat creat64							\
>>  	chdir fchdir							\
>> @@ -89,6 +89,7 @@ CFLAGS-open64.c += -fexceptions -fasynchronous-unwind-tables
>>  CFLAGS-creat.c += -fexceptions -fasynchronous-unwind-tables
>>  CFLAGS-creat64.c += -fexceptions -fasynchronous-unwind-tables
>>  CFLAGS-fcntl.c += -fexceptions -fasynchronous-unwind-tables
>> +CFLAGS-fcntl64.c += -fexceptions -fasynchronous-unwind-tables
>>  CFLAGS-poll.c += -fexceptions -fasynchronous-unwind-tables
>>  CFLAGS-ppoll.c += -fexceptions -fasynchronous-unwind-tables
>>  CFLAGS-lockf.c += -fexceptions
>> diff --git a/io/Versions b/io/Versions
>> index 98898cb..492e72c 100644
>> --- a/io/Versions
>> +++ b/io/Versions
>> @@ -128,4 +128,7 @@ libc {
>>    GLIBC_2.27 {
>>      copy_file_range;
>>    }
>> +  GLIBC_2.28 {
>> +    fcntl64; __fcntl64;
>> +  }
>>  }
>> diff --git a/io/fcntl.h b/io/fcntl.h
>> index 69a4394..3afc620 100644
>> --- a/io/fcntl.h
>> +++ b/io/fcntl.h
>> @@ -167,7 +167,18 @@ typedef __pid_t pid_t;
>>  
>>     This function is a cancellation point and therefore not marked with
>>     __THROW.  */
>> +#ifndef __USE_FILE_OFFSET64
>>  extern int fcntl (int __fd, int __cmd, ...);
>> +#else
>> +# ifdef __REDIRECT
>> +extern int __REDIRECT (fcntl, (int __fd, int __cmd, ...), fcntl64);
>> +# else
>> +#  define fcntl fcntl64
>> +# endif
>> +#endif
>> +#ifdef __USE_LARGEFILE64
>> +extern int fcntl64 (int __fd, int __cmd, ...);
>> +#endif
>>  
>>  /* Open FILE and return a new file descriptor for it, or -1 on error.
>>     OFLAG determines the type of access used.  If O_CREAT or O_TMPFILE is set
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c b/io/fcntl64.c
>> similarity index 65%
>> rename from sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c
>> rename to io/fcntl64.c
>> index 48198c1..f4e6809 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c
>> +++ b/io/fcntl64.c
>> @@ -1,4 +1,5 @@
>> -/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
>> +/* Manipulate file descriptor.  Stub LFS version.
>> +   Copyright (C) 2018 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
>> @@ -15,18 +16,23 @@
>>     License along with the GNU C Library; if not, see
>>     <http://www.gnu.org/licenses/>.  */
>>  
>> -#include <unistd.h>
>> +#include <errno.h>
>>  #include <fcntl.h>
>>  
>> -static inline int
>> -fcntl_adjust_cmd (int cmd)
>> +/* Perform file control operations on FD.  */
>> +int
>> +__fcntl64 (int fd, int cmd, ...)
>>  {
>> -  if (cmd >= F_GETLK64 && cmd <= F_SETLKW64)
>> -    cmd -= F_GETLK64 - F_GETLK;
>> -  return cmd;
>> -}
>> +  if (fd < 0)
>> +    {
>> +      __set_errno (EBADF);
>> +      return -1;
>> +    }
>>  
>> -#define FCNTL_ADJUST_CMD(__cmd) \
>> -  fcntl_adjust_cmd (__cmd)
>> +  __set_errno (ENOSYS);
>> +  return -1;
>> +}
>> +libc_hidden_def (__fcntl64)
>> +stub_warning (fcntl64)
>>  
>> -#include <sysdeps/unix/sysv/linux/fcntl.c>
>> +weak_alias (__fcntl64, fcntl64)
>> diff --git a/nptl/Makefile b/nptl/Makefile
>> index 94be92c..13d485c 100644
>> --- a/nptl/Makefile
>> +++ b/nptl/Makefile
>> @@ -36,7 +36,7 @@ static-only-routines = pthread_atfork
>>  # We need to provide certain routines for compatibility with existing
>>  # binaries.
>>  pthread-compat-wrappers = \
>> -		      write read close fcntl accept \
>> +		      write read close fcntl fcntl64 accept \
>>  		      connect recv recvfrom send \
>>  		      sendto fsync lseek lseek64 \
>>  		      msync nanosleep open open64 pause \
>> @@ -191,6 +191,7 @@ CFLAGS-sem_timedwait.c += -fexceptions -fasynchronous-unwind-tables
>>  
>>  # These are the function wrappers we have to duplicate here.
>>  CFLAGS-fcntl.c += -fexceptions -fasynchronous-unwind-tables
>> +CFLAGS-fcntl64.c += -fexceptions -fasynchronous-unwind-tables
>>  CFLAGS-lockf.c += -fexceptions
>>  CFLAGS-pread.c += -fexceptions -fasynchronous-unwind-tables
>>  CFLAGS-pread64.c += -fexceptions -fasynchronous-unwind-tables
>> diff --git a/sysdeps/mach/hurd/fcntl.c b/sysdeps/mach/hurd/fcntl.c
>> index 0b23164..598317d 100644
>> --- a/sysdeps/mach/hurd/fcntl.c
>> +++ b/sysdeps/mach/hurd/fcntl.c
>> @@ -210,3 +210,8 @@ libc_hidden_def (__libc_fcntl)
>>  weak_alias (__libc_fcntl, __fcntl)
>>  libc_hidden_weak (__fcntl)
>>  weak_alias (__libc_fcntl, fcntl)
>> +
>> +strong_alias (__libc_fcntl, __libc_fcntl64)
>> +libc_hidden_def (__libc_fcntl64)
>> +weak_alias (__libc_fcntl64, __fcntl64)
>> +libc_hidden_weak (__fcntl64)
>> diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
>> index 9545e89..36f1a2d 100644
>> --- a/sysdeps/mach/hurd/i386/libc.abilist
>> +++ b/sysdeps/mach/hurd/i386/libc.abilist
>> @@ -2049,6 +2049,10 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
>> index 90c9bc8..6fb0c38 100644
>> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
>> @@ -2139,3 +2139,6 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
>> index 8674a87..e8dd80c 100644
>> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
>> @@ -2054,6 +2054,9 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/arm/libc.abilist b/sysdeps/unix/sysv/linux/arm/libc.abilist
>> index 044ec10..69bf5a3 100644
>> --- a/sysdeps/unix/sysv/linux/arm/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/arm/libc.abilist
>> @@ -130,6 +130,10 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.4 GLIBC_2.4 A
>>  GLIBC_2.4 _Exit F
>>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
>> diff --git a/sysdeps/unix/sysv/linux/fcntl.c b/sysdeps/unix/sysv/linux/fcntl.c
>> index a3cb2ae..5a8fbb5 100644
>> --- a/sysdeps/unix/sysv/linux/fcntl.c
>> +++ b/sysdeps/unix/sysv/linux/fcntl.c
>> @@ -19,32 +19,23 @@
>>  #include <stdarg.h>
>>  #include <errno.h>
>>  #include <sysdep-cancel.h>
>> -#include <not-cancel.h>
>>  
>> -#ifndef __NR_fcntl64
>> -# define __NR_fcntl64 __NR_fcntl
>> -#endif
>> +#ifndef __OFF_T_MATCHES_OFF64_T
>>  
>> -#ifndef FCNTL_ADJUST_CMD
>> -# define FCNTL_ADJUST_CMD(__cmd) __cmd
>> -#endif
>> +# ifndef FCNTL_ADJUST_CMD
>> +#  define FCNTL_ADJUST_CMD(__cmd) __cmd
>> +# endif
>>  
>> -static int
>> -fcntl_common (int fd, int cmd, void *arg)
>> +static inline struct flock64
>> +flock_to_flock64 (const struct flock *flk)
>>  {
>> -  if (cmd == F_GETOWN)
>> -    {
>> -      INTERNAL_SYSCALL_DECL (err);
>> -      struct f_owner_ex fex;
>> -      int res = INTERNAL_SYSCALL_CALL (fcntl64, err, fd, F_GETOWN_EX, &fex);
>> -      if (!INTERNAL_SYSCALL_ERROR_P (res, err))
>> -	return fex.type == F_OWNER_GID ? -fex.pid : fex.pid;
>> -
>> -      return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (res,
>> -								    err));
>> -    }
>> -
>> -  return INLINE_SYSCALL_CALL (fcntl64, fd, cmd, (void *) arg);
>> +  return (struct flock64) {
>> +    .l_type = flk->l_type,
>> +    .l_whence = flk->l_whence,
>> +    .l_start = flk->l_start,
>> +    .l_len = flk->l_len,
>> +    .l_pid = flk->l_pid
>> +  };
>>  }
>>  
>>  int
>> @@ -59,16 +50,56 @@ __libc_fcntl (int fd, int cmd, ...)
>>  
>>    cmd = FCNTL_ADJUST_CMD (cmd);
>>  
>> -  if (cmd == F_SETLKW || cmd == F_SETLKW64)
>> -    return SYSCALL_CANCEL (fcntl64, fd, cmd, (void *) arg);
>> -
>> -  return fcntl_common (fd, cmd, arg);
>> +  switch (cmd)
>> +    {
>> +      case F_SETLKW:
>> +	return SYSCALL_CANCEL (fcntl64, fd, cmd, arg);
>> +      case F_GETLK64:
>> +      case F_OFD_GETLK:
>> +	{
>> +	  struct flock *flk = (struct flock *) arg;
>> +	  struct flock64 flk64 = flock_to_flock64 (flk);
>> +	  int ret = SYSCALL_CANCEL (fcntl64, fd, cmd, &flk64);
>> +	  if (ret == -1)
>> +	    return -1;
>> +	  flk->l_type = flk64.l_type;
>> +	  flk->l_whence = flk64.l_whence;
>> +	  flk->l_start = flk64.l_start;
>> +	  flk->l_len = flk64.l_len;
>> +	  flk->l_pid = flk64.l_pid;
>> +	  return ret;
>> +	}
>> +      case F_SETLK64:
>> +      case F_SETLKW64:
>> +      case F_OFD_SETLK:
>> +      case F_OFD_SETLKW:
>> +	{
>> +	  struct flock64 flk64 = flock_to_flock64 (arg);
>> +	  return SYSCALL_CANCEL (fcntl64, fd, cmd, &flk64);
>> +	}
>> +      case F_GETOWN:
>> +	{
>> +	  INTERNAL_SYSCALL_DECL (err);
>> +	  struct f_owner_ex fex;
>> +	  int res = INTERNAL_SYSCALL_CALL (fcntl64, err, fd, F_GETOWN_EX, &fex);
>> +	    if (!INTERNAL_SYSCALL_ERROR_P (res, err))
>> +	  return fex.type == F_OWNER_GID ? -fex.pid : fex.pid;
>> +
>> +	  return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (res,
>> +									    err));
>> +	}
>> +      default:
>> +	return INLINE_SYSCALL_CALL (fcntl64, fd, cmd, arg);
>> +    }
>>  }
>>  libc_hidden_def (__libc_fcntl)
>> +weak_alias (__libc_fcntl, __fcntl)
>> +libc_hidden_weak (__fcntl)
>>  
>> -#if !IS_IN (rtld)
>> +# include <shlib-compat.h>
>> +# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_28)
>>  int
>> -__fcntl_nocancel (int fd, int cmd, ...)
>> +__old_libc_fcntl64 (int fd, int cmd, ...)
>>  {
>>    va_list ap;
>>    void *arg;
>> @@ -77,13 +108,12 @@ __fcntl_nocancel (int fd, int cmd, ...)
>>    arg = va_arg (ap, void *);
>>    va_end (ap);
>>  
>> -  return fcntl_common (fd, cmd, arg);
>> +  return __libc_fcntl64 (fd, cmd, arg);
>>  }
>> -#else
>> -strong_alias (__libc_fcntl, __fcntl_nocancel)
>> -#endif
>> -libc_hidden_def (__fcntl_nocancel)
>> -
>> -weak_alias (__libc_fcntl, __fcntl)
>> -libc_hidden_weak (__fcntl)
>> +compat_symbol (libc, __old_libc_fcntl64, fcntl, GLIBC_2_0);
>> +versioned_symbol (libc, __libc_fcntl, fcntl, GLIBC_2_28);
>> +# else
>>  weak_alias (__libc_fcntl, fcntl)
>> +# endif
>> +
>> +#endif /* __OFF_T_MATCHES_OFF64_T  */
>> diff --git a/sysdeps/unix/sysv/linux/fcntl64.c b/sysdeps/unix/sysv/linux/fcntl64.c
>> new file mode 100644
>> index 0000000..b7f50b0
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/fcntl64.c
>> @@ -0,0 +1,99 @@
>> +/* Manipulate file descriptor.  Linux LFS version.
>> +   Copyright (C) 2018 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/>.  */
>> +
>> +#define fcntl __no_decl_fcntl
>> +#define __fcntl __no_decl___fcntl
>> +#include <fcntl.h>
>> +#undef fcntl
>> +#undef __fcntl
>> +#include <stdarg.h>
>> +#include <errno.h>
>> +#include <sysdep-cancel.h>
>> +
>> +#ifndef __NR_fcntl64
>> +# define __NR_fcntl64 __NR_fcntl
>> +#endif
>> +
>> +#ifndef FCNTL_ADJUST_CMD
>> +# define FCNTL_ADJUST_CMD(__cmd) __cmd
>> +#endif
>> +
>> +static int
>> +fcntl64_common (int fd, int cmd, void *arg)
>> +{
>> +  if (cmd == F_GETOWN)
>> +    {
>> +      INTERNAL_SYSCALL_DECL (err);
>> +      struct f_owner_ex fex;
>> +      int res = INTERNAL_SYSCALL_CALL (fcntl64, err, fd, F_GETOWN_EX, &fex);
>> +      if (!INTERNAL_SYSCALL_ERROR_P (res, err))
>> +	return fex.type == F_OWNER_GID ? -fex.pid : fex.pid;
>> +
>> +      return INLINE_SYSCALL_ERROR_RETURN_VALUE (INTERNAL_SYSCALL_ERRNO (res,
>> +								    err));
>> +    }
>> +
>> +  return INLINE_SYSCALL_CALL (fcntl64, fd, cmd, (void *) arg);
>> +}
>> +
>> +int
>> +__libc_fcntl64 (int fd, int cmd, ...)
>> +{
>> +  va_list ap;
>> +  void *arg;
>> +
>> +  va_start (ap, cmd);
>> +  arg = va_arg (ap, void *);
>> +  va_end (ap);
>> +
>> +  cmd = FCNTL_ADJUST_CMD (cmd);
>> +
>> +  if (cmd == F_SETLKW || cmd == F_SETLKW64)
>> +    return SYSCALL_CANCEL (fcntl64, fd, cmd, (void *) arg);
>> +
>> +  return fcntl64_common (fd, cmd, arg);
>> +}
>> +libc_hidden_def (__libc_fcntl64)
>> +weak_alias (__libc_fcntl64, __fcntl64)
>> +libc_hidden_weak (__fcntl64)
>> +weak_alias (__libc_fcntl64, fcntl64)
>> +
>> +#ifdef __OFF_T_MATCHES_OFF64_T
>> +weak_alias (__libc_fcntl64, __libc_fcntl)
>> +weak_alias (__libc_fcntl64, __fcntl)
>> +weak_alias (__libc_fcntl64, __GI___fcntl)
>> +weak_alias (__libc_fcntl64, fcntl)
>> +#endif
>> +
>> +#if !IS_IN (rtld)
>> +int
>> +__fcntl_nocancel (int fd, int cmd, ...)
>> +{
>> +  va_list ap;
>> +  void *arg;
>> +
>> +  va_start (ap, cmd);
>> +  arg = va_arg (ap, void *);
>> +  va_end (ap);
>> +
>> +  return fcntl64_common (fd, cmd, arg);
>> +}
>> +#else
>> +weak_alias (__libc_fcntl64, __fcntl_nocancel)
>> +#endif
>> +weak_alias (__fcntl_nocancel, __GI___fcntl_nocancel)
>> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
>> index 2360130..d87eb4c 100644
>> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
>> @@ -1894,6 +1894,10 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
>> index 39c993f..177b07a 100644
>> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
>> @@ -2064,6 +2064,10 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
>> index 68496aa..87571f1 100644
>> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
>> @@ -1928,6 +1928,9 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
>> index b676025..afb9e05 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
>> @@ -131,6 +131,10 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.4 GLIBC_2.4 A
>>  GLIBC_2.4 _Exit F
>>  GLIBC_2.4 _IO_2_1_stderr_ D 0x98
>> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
>> index cdd1df5..034ff04 100644
>> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
>> @@ -2008,6 +2008,10 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/microblaze/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/libc.abilist
>> index e4265fd..8586123 100644
>> --- a/sysdeps/unix/sysv/linux/microblaze/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/microblaze/libc.abilist
>> @@ -2129,3 +2129,7 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
>> index 3a7e0b4..2187c72 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
>> @@ -1983,6 +1983,10 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
>> index 5e80592..4ee5454 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
>> @@ -1981,6 +1981,10 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
>> index 1973fac..62468d6 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
>> @@ -1989,6 +1989,10 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
>> index 5e18ab8..48d07e3 100644
>> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
>> @@ -1984,6 +1984,9 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
>> index cc5885a..ee0b7c0 100644
>> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
>> @@ -2170,3 +2170,7 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
>> index 503f562..d755f1d 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
>> +++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h
>> @@ -52,3 +52,11 @@
>>  
>>  #undef __ASSUME_CLONE_DEFAULT
>>  #define __ASSUME_CLONE_BACKWARDS	1
>> +
>> +#define FCNTL_ADJUST_CMD(__cmd)					\
>> +  ({ int __cmdadj = (__cmd);					\
>> +     if (__cmdadj >= F_GETLK64 && __cmdadj <= F_SETLKW64)	\
>> +      __cmdadj -= F_GETLK64 - F_GETLK;				\
>> +     __cmdadj;							\
>> +  })
>> +
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
>> index 676aa50..6c72516 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
>> @@ -2012,6 +2012,10 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
>> index 2016c7c..0499171 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
>> @@ -2017,6 +2017,10 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist
>> index 3d19e38..17a56de 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist
>> @@ -2229,3 +2229,6 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist
>> index c57ab21..1e625c6 100644
>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist
>> @@ -131,6 +131,9 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 _Exit F
>>  GLIBC_2.3 _IO_2_1_stderr_ D 0xe0
>> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
>> index 8ab44ec..dce49e0 100644
>> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
>> @@ -2094,3 +2094,6 @@ GLIBC_2.27 xdrstdio_create F
>>  GLIBC_2.27 xencrypt F
>>  GLIBC_2.27 xprt_register F
>>  GLIBC_2.27 xprt_unregister F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
>> index 2590372..a9db23c 100644
>> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
>> @@ -2022,6 +2022,10 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
>> index 5d6800c..a0e275f 100644
>> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
>> @@ -1923,6 +1923,9 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/sh/libc.abilist b/sysdeps/unix/sysv/linux/sh/libc.abilist
>> index c04872c..e3db11b 100644
>> --- a/sysdeps/unix/sysv/linux/sh/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sh/libc.abilist
>> @@ -1898,6 +1898,10 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
>> index 85cbe30..8b4d22d 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
>> @@ -2015,6 +2015,10 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
>> index f7a1ab8..bc1eba3 100644
>> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
>> @@ -1952,6 +1952,9 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/tile/tilegx32/libc.abilist b/sysdeps/unix/sysv/linux/tile/tilegx32/libc.abilist
>> index ab56ece..d6506ed 100644
>> --- a/sysdeps/unix/sysv/linux/tile/tilegx32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/tile/tilegx32/libc.abilist
>> @@ -2136,3 +2136,6 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>> diff --git a/sysdeps/unix/sysv/linux/tile/tilegx64/libc.abilist b/sysdeps/unix/sysv/linux/tile/tilegx64/libc.abilist
>> index f2518c0..ede48fc 100644
>> --- a/sysdeps/unix/sysv/linux/tile/tilegx64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/tile/tilegx64/libc.abilist
>> @@ -2136,3 +2136,6 @@ GLIBC_2.27 wcstof32x F
>>  GLIBC_2.27 wcstof32x_l F
>>  GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
>> index 2a3cc40..4a5729f 100644
>> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
>> @@ -1905,6 +1905,9 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>>  GLIBC_2.3 GLIBC_2.3 A
>>  GLIBC_2.3 __ctype_b_loc F
>>  GLIBC_2.3 __ctype_tolower_loc F
>> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
>> index 8bc16b9..0745aee 100644
>> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
>> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
>> @@ -2148,3 +2148,6 @@ GLIBC_2.27 wcstof64 F
>>  GLIBC_2.27 wcstof64_l F
>>  GLIBC_2.27 wcstof64x F
>>  GLIBC_2.27 wcstof64x_l F
>> +GLIBC_2.28 GLIBC_2.28 A
>> +GLIBC_2.28 __fcntl64 F
>> +GLIBC_2.28 fcntl64 F
>>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]