From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 112899 invoked by alias); 1 Jun 2018 14:49:18 -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 112729 invoked by uid 89); 1 Jun 2018 14:49:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.5 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=redirect, tile, wrappers, HX-Received:sk:c18-v6m X-HELO: mail-qt0-f194.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=MPHt5H0aCVUT/oT21zJgxgISEcJaOlIrXQg91iA+k0I=; b=MBHc/K3vVCwyJH2bQiOe1ne8vcibJ/ZvpdR/Y1CRuDazpBPno06dYifSJpauN51QJC 8tEABY5AM2bxRzKvKrckHjdSTMBQkLZXzpMnIXpFGY9D20/OLVrWGv5kDgX+nriG4ax7 KdCy23ui3GcxduWRd0ElNdOxRXp3MjmytDvMEboczR0RnLT3jYUZD8wh8q8QuOuxublZ Q7lytJuCCJzWcy1iySN4GCGzgLUDiFNbF9SEfhmmyX5qM5sNgJczZbfS7WNQq6zrpnW6 HCA2foExdBlWj40DJuBQ73CMdkuokIYy4XH+pI+W3nYq6abYxkhi8LzkayAXQhhLyaQU ySZQ== X-Gm-Message-State: APt69E0UaZoJST6sHRnbZtIOd+v1s9qZPHwUuQ4CjKDgLaT9MZfCrnwt ssQvnl7losBfZIx0nvMgCbsFioOAQaM= X-Google-Smtp-Source: ADUXVKIteQl7IJIEa6Fdv946Q9aFmqpzl9f0r1qEVgROP4h6hBPZx1C4nwLw7/IDwId8qkASordPLQ== X-Received: by 2002:ac8:6612:: with SMTP id c18-v6mr11272601qtp.343.1527864522750; Fri, 01 Jun 2018 07:48:42 -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> <8f7abb3b-a1a3-d5aa-368c-adadedcc02c2@linaro.org> <55193f9d-1163-2860-e036-19fd72507d60@linaro.org> <71dcc28c-b909-2cb8-7694-8208cc19e798@linaro.org> Openpgp: preference=signencrypt Message-ID: <98246ffc-8f26-9fac-496f-71835313fcc5@linaro.org> Date: Fri, 01 Jun 2018 14:49:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <71dcc28c-b909-2cb8-7694-8208cc19e798@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2018-06/txt/msg00008.txt.bz2 I will commit this shortly if no one opposes it. On 25/05/2018 17:03, Adhemerval Zanella wrote: > Ping. > > On 21/05/2018 16:00, Adhemerval Zanella wrote: >> Updated version, change from previous one: >> >> - Adjsut abilist with recent changes to remove the ABI tags. >> - Do not export __fcntl64 (there is no need to mimic old behavior). >> >> --- >> >> This patch fixes the OFD ("file private") locks for architectures that >> support non-LFS flock definition (__USE_FILE_OFFSET64 not defined). The >> issue in this case is both F_OFD_{GETLK,SETLK,SETLKW} and >> F_{SET,GET}L{W}K64 expects a flock64 argument and when using old F_OFD_* >> flags with a non LFS flock argument the kernel might interpret the underlying >> data wrongly. Kernel idea originally was to avoid using such flags in >> non-LFS syscall, but since GLIBC uses fcntl with LFS semantic as default >> it is possible to 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 | 54 ++++++++++ >> 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 | 2 + >> sysdeps/unix/sysv/linux/aarch64/libc.abilist | 1 + >> sysdeps/unix/sysv/linux/alpha/libc.abilist | 1 + >> sysdeps/unix/sysv/linux/arm/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/fcntl.c | 111 +++++++++++++-------- >> sysdeps/unix/sysv/linux/fcntl64.c | 99 ++++++++++++++++++ >> sysdeps/unix/sysv/linux/hppa/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/i386/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/ia64/libc.abilist | 1 + >> sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/microblaze/libc.abilist | 2 + >> .../unix/sysv/linux/mips/mips32/fpu/libc.abilist | 2 + >> .../unix/sysv/linux/mips/mips32/nofpu/libc.abilist | 2 + >> .../unix/sysv/linux/mips/mips64/n32/libc.abilist | 2 + >> .../unix/sysv/linux/mips/mips64/n64/libc.abilist | 1 + >> sysdeps/unix/sysv/linux/nios2/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/powerpc/kernel-features.h | 9 ++ >> .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist | 2 + >> .../linux/powerpc/powerpc32/nofpu/libc.abilist | 2 + >> .../sysv/linux/powerpc/powerpc64/libc-le.abilist | 3 + >> .../unix/sysv/linux/powerpc/powerpc64/libc.abilist | 1 + >> sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist | 1 + >> sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist | 1 + >> sysdeps/unix/sysv/linux/sh/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist | 2 + >> sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist | 1 + >> sysdeps/unix/sysv/linux/x86_64/64/libc.abilist | 1 + >> sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist | 1 + >> 38 files changed, 323 insertions(+), 52 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..374e784 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, ...) attribute_hidden; >> +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..7653588 100644 >> --- a/io/Versions >> +++ b/io/Versions >> @@ -128,4 +128,7 @@ libc { >> GLIBC_2.27 { >> copy_file_range; >> } >> + GLIBC_2.28 { >> + 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 2cb5070..3d46de7 100644 >> --- a/sysdeps/mach/hurd/i386/libc.abilist >> +++ b/sysdeps/mach/hurd/i386/libc.abilist >> @@ -2033,6 +2033,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist >> index 80cdb98..884d0df 100644 >> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist >> @@ -2131,3 +2131,4 @@ 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 fcntl64 F >> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist >> index c761f61..28d54b9 100644 >> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist >> @@ -2026,6 +2026,7 @@ 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 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/arm/libc.abilist b/sysdeps/unix/sysv/linux/arm/libc.abilist >> index 6aa58c3..dfde3bd 100644 >> --- a/sysdeps/unix/sysv/linux/arm/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/arm/libc.abilist >> @@ -115,6 +115,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.4 _Exit F >> GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 >> GLIBC_2.4 _IO_2_1_stdin_ D 0xa0 >> diff --git a/sysdeps/unix/sysv/linux/fcntl.c b/sysdeps/unix/sysv/linux/fcntl.c >> index a3cb2ae..ada922b 100644 >> --- a/sysdeps/unix/sysv/linux/fcntl.c >> +++ b/sysdeps/unix/sysv/linux/fcntl.c >> @@ -19,33 +19,12 @@ >> #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 >> - >> -static int >> -fcntl_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); >> -} >> +# ifndef FCNTL_ADJUST_CMD >> +# define FCNTL_ADJUST_CMD(__cmd) __cmd >> +# endif >> >> int >> __libc_fcntl (int fd, int cmd, ...) >> @@ -59,16 +38,71 @@ __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 = >> + { >> + .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 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 flock *flk = (struct flock *) arg; >> + struct flock64 flk64 = >> + { >> + .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 >> + }; >> + 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 +111,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 d10695b..06b00f7 100644 >> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist >> @@ -1872,6 +1872,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist >> index 23092ab..1c1cc00 100644 >> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist >> @@ -2037,6 +2037,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist >> index 7bf259e..f6e17a0 100644 >> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist >> @@ -1907,6 +1907,7 @@ 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 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist >> index 4673bcd..ee054a6 100644 >> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist >> @@ -116,6 +116,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.4 _Exit F >> GLIBC_2.4 _IO_2_1_stderr_ D 0x98 >> GLIBC_2.4 _IO_2_1_stdin_ D 0x98 >> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist >> index 1f8ac40..227a058 100644 >> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist >> @@ -1981,6 +1981,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/microblaze/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/libc.abilist >> index 09277f5..18781b3 100644 >> --- a/sysdeps/unix/sysv/linux/microblaze/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/microblaze/libc.abilist >> @@ -2122,3 +2122,5 @@ 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 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 f562e20..2d86989 100644 >> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist >> @@ -1959,6 +1959,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_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 ceb7388..b8b113e 100644 >> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist >> @@ -1957,6 +1957,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_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 5765f48..6a3cd13 100644 >> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist >> @@ -1965,6 +1965,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_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 a84bb45..596ec05 100644 >> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist >> @@ -1961,6 +1961,7 @@ 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 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist >> index e432959..8da18ee 100644 >> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist >> @@ -2163,3 +2163,5 @@ 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 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..dd8a7ea 100644 >> --- a/sysdeps/unix/sysv/linux/powerpc/kernel-features.h >> +++ b/sysdeps/unix/sysv/linux/powerpc/kernel-features.h >> @@ -52,3 +52,12 @@ >> >> #undef __ASSUME_CLONE_DEFAULT >> #define __ASSUME_CLONE_BACKWARDS 1 >> + >> +#ifdef __powerpc64__ >> +# define FCNTL_ADJUST_CMD(__cmd) \ >> + ({ int __cmdadj = (__cmd); \ >> + if (__cmdadj >= F_GETLK64 && __cmdadj <= F_SETLKW64) \ >> + __cmdadj -= F_GETLK64 - F_GETLK; \ >> + __cmdadj; \ >> + }) >> +#endif >> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist >> index a5f2b23..555751e 100644 >> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist >> @@ -1985,6 +1985,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_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 e4cbe36..80324e4 100644 >> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist >> @@ -1989,6 +1989,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_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 9869feb..079bbb4 100644 >> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist >> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist >> @@ -2221,3 +2221,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 e526dc4..15be314 100644 >> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist >> @@ -116,6 +116,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 fcntl64 F >> GLIBC_2.3 _Exit F >> GLIBC_2.3 _IO_2_1_stderr_ D 0xe0 >> GLIBC_2.3 _IO_2_1_stdin_ D 0xe0 >> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist >> index e6319ee..436b992 100644 >> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist >> @@ -2093,3 +2093,4 @@ 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 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 41cdda0..f66715f 100644 >> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist >> @@ -1994,6 +1994,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_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 8a756cf..bd62428 100644 >> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist >> @@ -1900,6 +1900,7 @@ 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 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/sh/libc.abilist b/sysdeps/unix/sysv/linux/sh/libc.abilist >> index 999bddd..f2f070f 100644 >> --- a/sysdeps/unix/sysv/linux/sh/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/sh/libc.abilist >> @@ -1876,6 +1876,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist >> index 7c4296f..265087f 100644 >> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist >> @@ -1988,6 +1988,8 @@ 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 fcntl F >> +GLIBC_2.28 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist >> index dafe9d7..16a6981 100644 >> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist >> @@ -1930,6 +1930,7 @@ 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 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_loc F >> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist >> index f72d494..fa8c198 100644 >> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist >> @@ -1888,6 +1888,7 @@ 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 fcntl64 F >> GLIBC_2.3 __ctype_b_loc F >> GLIBC_2.3 __ctype_tolower_loc F >> GLIBC_2.3 __ctype_toupper_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 96c9fa0..2536971 100644 >> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist >> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist >> @@ -2139,3 +2139,4 @@ 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 fcntl64 F >>