From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: libc-alpha@sourceware.org
Subject: Re: [PATCH] Fix Linux fcntl OFD locks for non-LFS architectures (BZ#20251)
Date: Fri, 04 May 2018 17:54:00 -0000 [thread overview]
Message-ID: <8f7abb3b-a1a3-d5aa-368c-adadedcc02c2@linaro.org> (raw)
In-Reply-To: <d7d22b45-a41a-3629-3216-e42041879c23@linaro.org>
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
>>
next prev parent reply other threads:[~2018-05-04 17:54 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-04 21:27 Adhemerval Zanella
2018-04-30 11:10 ` Adhemerval Zanella
2018-05-04 17:54 ` Adhemerval Zanella [this message]
2018-05-21 19:01 ` Adhemerval Zanella
2018-05-25 20:03 ` Adhemerval Zanella
2018-06-01 14:49 ` Adhemerval Zanella
2018-06-01 15:00 ` Florian Weimer
2018-06-01 20:38 ` Adhemerval Zanella
2018-06-01 20:50 ` Joseph Myers
2018-06-01 21:49 ` Adhemerval Zanella
2018-06-01 21:07 ` Florian Weimer
2018-06-01 21:48 ` Adhemerval Zanella
2018-06-01 21:53 ` Adhemerval Zanella
2018-06-02 8:00 ` Florian Weimer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8f7abb3b-a1a3-d5aa-368c-adadedcc02c2@linaro.org \
--to=adhemerval.zanella@linaro.org \
--cc=libc-alpha@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).