From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 50080 invoked by alias); 4 May 2018 17:54:45 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 50071 invoked by uid 89); 4 May 2018 17:54:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=1923, 1319, cancellation, k64 X-HELO: mail-qt0-f195.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:references:openpgp:autocrypt :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=+mncOIJ1BYkDoTRJNdvEbkyNunKmIu4WQQM0ylKwbvg=; b=WTLQyjHwKc19Obeh1aVt+sbhZW1lKMQJU3l4mRFFEH32jAcV4OWKw9sAiGhrQO2YWi WGlgs80rBkjlPwNlIbtSKXDx1V2jX7br1o9O2dOyO4pPjH/haobjwxF66otIGLOT6JiD 8Is+QSsXgdqxUIsZTiSBT/r726yJ2YUtU3bMlOSBb409xcAz+pYRAQ4ua/+stXqVj3ax P6p2zzBjMYfwkM5ZLTyl64gTS+xJF75cV6bPf5iPivmt+vWaLJs9bPYxlCVyG290Hb9d qjmlzkkvcKuoJ+THD1TqJBDfp6nAFQ5kXfep8d0mPMJeJS2dXCEwkjd1CUu5vkue0z6z qaWg== X-Gm-Message-State: ALQs6tBeyeDZfPfkT0socZO9h3D9xaW2FlKTxEuSV9ys3IFJSwqwr3GC pbLOgae3BuCDKAkPNsoMb0z63LZeQ9U= X-Google-Smtp-Source: AB8JxZp/lgp1OBz8qXVL6G7vXKOQ5DHmXkPETlWJbc46SCaxSoi2AklO4vO2d+jNeBpC1tY5eAG0Tg== X-Received: by 2002:ac8:36b9:: with SMTP id a54-v6mr25731623qtc.123.1525456476996; Fri, 04 May 2018 10:54:36 -0700 (PDT) Subject: Re: [PATCH] Fix Linux fcntl OFD locks for non-LFS architectures (BZ#20251) From: Adhemerval Zanella To: libc-alpha@sourceware.org References: <1522877210-27934-1-git-send-email-adhemerval.zanella@linaro.org> Openpgp: preference=signencrypt Autocrypt: addr=adhemerval.zanella@linaro.org; prefer-encrypt=mutual; keydata= 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 Message-ID: <8f7abb3b-a1a3-d5aa-368c-adadedcc02c2@linaro.org> Date: Fri, 04 May 2018 17:54:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2018-05/txt/msg00096.txt.bz2 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 >> . */ >> >> -#include >> +#include >> #include >> >> -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 >> +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 >> #include >> #include >> -#include >> >> -#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 >> +# 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 >> + . */ >> + >> +#define fcntl __no_decl_fcntl >> +#define __fcntl __no_decl___fcntl >> +#include >> +#undef fcntl >> +#undef __fcntl >> +#include >> +#include >> +#include >> + >> +#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 >>