[4/5] Consolidate Linux fcntl implementation
Commit Message
This patch consolidates the fcntl Linux syscall generation on
sysdeps/unix/sysv/linux/fcntl.c. It basically removes all the
architecture define implementations.
Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
I also did a sanity check with fcntl tests from LTP to check for
possible issue on the aforementioned architectures.
* sysdeps/unix/sysv/linux/arm/fcntl.c: Remove file.
* sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/hppa/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/m68k/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/microblaze/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/sh/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/fcntl.c: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Refactor to
use default implementation.
---
ChangeLog | 16 ++++
sysdeps/unix/sysv/linux/arm/fcntl.c | 1 -
sysdeps/unix/sysv/linux/fcntl.c | 52 ++++++-------
.../unix/sysv/linux/generic/wordsize-32/fcntl.c | 86 ----------------------
sysdeps/unix/sysv/linux/hppa/fcntl.c | 1 -
sysdeps/unix/sysv/linux/i386/fcntl.c | 61 ---------------
sysdeps/unix/sysv/linux/m68k/fcntl.c | 1 -
sysdeps/unix/sysv/linux/microblaze/fcntl.c | 1 -
sysdeps/unix/sysv/linux/mips/mips32/fcntl.c | 1 -
sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c | 1 -
sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c | 1 -
sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c | 49 ++----------
sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c | 1 -
sysdeps/unix/sysv/linux/sh/fcntl.c | 1 -
sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c | 1 -
15 files changed, 50 insertions(+), 224 deletions(-)
delete mode 100644 sysdeps/unix/sysv/linux/arm/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/hppa/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/i386/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/m68k/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/microblaze/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/sh/fcntl.c
delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c
Comments
Ping.
On 23/05/2017 15:25, Adhemerval Zanella wrote:
> This patch consolidates the fcntl Linux syscall generation on
> sysdeps/unix/sysv/linux/fcntl.c. It basically removes all the
> architecture define implementations.
>
> Checked on i686-linux-gnu, x86_64-linux-gnu, x86_64-linux-gnux32,
> aarch64-linux-gnu, arm-linux-gnueabihf, and powerpc64le-linux-gnu.
>
> I also did a sanity check with fcntl tests from LTP to check for
> possible issue on the aforementioned architectures.
>
> * sysdeps/unix/sysv/linux/arm/fcntl.c: Remove file.
> * sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/hppa/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/m68k/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/microblaze/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/mips/mips32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/sh/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/fcntl.c: New file.
> * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Refactor to
> use default implementation.
> ---
> ChangeLog | 16 ++++
> sysdeps/unix/sysv/linux/arm/fcntl.c | 1 -
> sysdeps/unix/sysv/linux/fcntl.c | 52 ++++++-------
> .../unix/sysv/linux/generic/wordsize-32/fcntl.c | 86 ----------------------
> sysdeps/unix/sysv/linux/hppa/fcntl.c | 1 -
> sysdeps/unix/sysv/linux/i386/fcntl.c | 61 ---------------
> sysdeps/unix/sysv/linux/m68k/fcntl.c | 1 -
> sysdeps/unix/sysv/linux/microblaze/fcntl.c | 1 -
> sysdeps/unix/sysv/linux/mips/mips32/fcntl.c | 1 -
> sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c | 1 -
> sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c | 1 -
> sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c | 49 ++----------
> sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c | 1 -
> sysdeps/unix/sysv/linux/sh/fcntl.c | 1 -
> sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c | 1 -
> 15 files changed, 50 insertions(+), 224 deletions(-)
> delete mode 100644 sysdeps/unix/sysv/linux/arm/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/hppa/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/i386/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/m68k/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/microblaze/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/mips/mips32/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/sh/fcntl.c
> delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c
>
> diff --git a/ChangeLog b/ChangeLog
> index 2928e25..bb5d320 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,21 @@
> 2017-05-23 Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> + * sysdeps/unix/sysv/linux/arm/fcntl.c: Remove file.
> + * sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/hppa/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/m68k/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/microblaze/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/mips/mips32/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/sh/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c: Likewise.
> + * sysdeps/unix/sysv/linux/fcntl.c: New file.
> + * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Refactor to
> + use default implementation.
> +
> * io/Makefile (CFLAGS-sync_file_range.c): Remove rule.
> * sysdeps/unix/sysv/linux/Makefile (CFLAGS-sync_file_range.c): New
> rule.
> diff --git a/sysdeps/unix/sysv/linux/arm/fcntl.c b/sysdeps/unix/sysv/linux/arm/fcntl.c
> deleted file mode 100644
> index ea951bc..0000000
> --- a/sysdeps/unix/sysv/linux/arm/fcntl.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
> diff --git a/sysdeps/unix/sysv/linux/fcntl.c b/sysdeps/unix/sysv/linux/fcntl.c
> index 02f3252..76e846c 100644
> --- a/sysdeps/unix/sysv/linux/fcntl.c
> +++ b/sysdeps/unix/sysv/linux/fcntl.c
> @@ -15,31 +15,36 @@
> License along with the GNU C Library; if not, see
> <http://www.gnu.org/licenses/>. */
>
> -#include <assert.h>
> -#include <errno.h>
> -#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */
> #include <fcntl.h>
> #include <stdarg.h>
> +#include <errno.h>
> +#include <sysdep-cancel.h>
>
> -#include <sys/syscall.h>
> +#ifndef __NR_fcntl64
> +# define __NR_fcntl64 __NR_fcntl
> +#endif
>
> +#ifndef FCNTL_ADJUST_CMD
> +# define FCNTL_ADJUST_CMD(__cmd) __cmd
> +#endif
>
> static int
> -do_fcntl (int fd, int cmd, void *arg)
> +fcntl_common (int fd, int cmd, void *arg)
> {
> - if (cmd != F_GETOWN)
> - return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
> -
> - INTERNAL_SYSCALL_DECL (err);
> - struct f_owner_ex fex;
> - int res = INTERNAL_SYSCALL (fcntl, err, 3, 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,
> + 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 NO_CANCELLATION
> int
> @@ -52,11 +57,10 @@ __fcntl_nocancel (int fd, int cmd, ...)
> arg = va_arg (ap, void *);
> va_end (ap);
>
> - return do_fcntl (fd, cmd, arg);
> + return fcntl_common (fd, cmd, arg);
> }
> #endif
>
> -
> int
> __libc_fcntl (int fd, int cmd, ...)
> {
> @@ -67,16 +71,12 @@ __libc_fcntl (int fd, int cmd, ...)
> arg = va_arg (ap, void *);
> va_end (ap);
>
> - if (SINGLE_THREAD_P || cmd != F_SETLKW)
> - return do_fcntl (fd, cmd, arg);
> -
> - int oldtype = LIBC_CANCEL_ASYNC ();
> -
> - int result = do_fcntl (fd, cmd, arg);
> + cmd = FCNTL_ADJUST_CMD (cmd);
>
> - LIBC_CANCEL_RESET (oldtype);
> + if (cmd == F_SETLKW || cmd == F_SETLKW64)
> + return SYSCALL_CANCEL (fcntl64, fd, cmd, (void *) arg);
>
> - return result;
> + return fcntl_common (fd, cmd, arg);
> }
> libc_hidden_def (__libc_fcntl)
>
> diff --git a/sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c b/sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c
> deleted file mode 100644
> index 20399f9..0000000
> --- a/sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c
> +++ /dev/null
> @@ -1,86 +0,0 @@
> -/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
> - This file is part of the GNU C Library.
> - Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
> -
> - 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/>. */
> -
> -#include <assert.h>
> -#include <errno.h>
> -#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */
> -#include <fcntl.h>
> -#include <stdarg.h>
> -
> -#include <sys/syscall.h>
> -
> -
> -static int
> -do_fcntl (int fd, int cmd, void *arg)
> -{
> - if (cmd != F_GETOWN)
> - return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
> -
> - INTERNAL_SYSCALL_DECL (err);
> - struct f_owner_ex fex;
> - int res = INTERNAL_SYSCALL (fcntl64, err, 3, fd, F_GETOWN_EX, &fex);
> - if (!INTERNAL_SYSCALL_ERROR_P (res, err))
> - return fex.type == F_OWNER_GID ? -fex.pid : fex.pid;
> -
> - __set_errno (INTERNAL_SYSCALL_ERRNO (res, err));
> - return -1;
> -}
> -
> -
> -#ifndef NO_CANCELLATION
> -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 do_fcntl (fd, cmd, arg);
> -}
> -#endif
> -
> -
> -int
> -__libc_fcntl (int fd, int cmd, ...)
> -{
> - va_list ap;
> - void *arg;
> -
> - va_start (ap, cmd);
> - arg = va_arg (ap, void *);
> - va_end (ap);
> -
> - if (SINGLE_THREAD_P || cmd != F_SETLKW)
> - return do_fcntl (fd, cmd, arg);
> -
> - int oldtype = LIBC_CANCEL_ASYNC ();
> -
> - int result = do_fcntl (fd, cmd, arg);
> -
> - LIBC_CANCEL_RESET (oldtype);
> -
> - return result;
> -}
> -libc_hidden_def (__libc_fcntl)
> -
> -weak_alias (__libc_fcntl, __fcntl)
> -libc_hidden_weak (__fcntl)
> -weak_alias (__libc_fcntl, fcntl)
> diff --git a/sysdeps/unix/sysv/linux/hppa/fcntl.c b/sysdeps/unix/sysv/linux/hppa/fcntl.c
> deleted file mode 100644
> index ea951bc..0000000
> --- a/sysdeps/unix/sysv/linux/hppa/fcntl.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
> diff --git a/sysdeps/unix/sysv/linux/i386/fcntl.c b/sysdeps/unix/sysv/linux/i386/fcntl.c
> deleted file mode 100644
> index b0a5783..0000000
> --- a/sysdeps/unix/sysv/linux/i386/fcntl.c
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -/* Copyright (C) 2000-2017 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/>. */
> -
> -#include <assert.h>
> -#include <errno.h>
> -#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */
> -#include <fcntl.h>
> -#include <stdarg.h>
> -
> -#include <sys/syscall.h>
> -
> -#ifndef NO_CANCELLATION
> -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 INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
> -}
> -#endif /* NO_CANCELLATION */
> -
> -
> -int
> -__libc_fcntl (int fd, int cmd, ...)
> -{
> - va_list ap;
> - void *arg;
> -
> - va_start (ap, cmd);
> - arg = va_arg (ap, void *);
> - va_end (ap);
> -
> - if ((cmd != F_SETLKW) && (cmd != F_SETLKW64))
> - return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
> -
> - return SYSCALL_CANCEL (fcntl64, fd, cmd, arg);
> -}
> -libc_hidden_def (__libc_fcntl)
> -
> -weak_alias (__libc_fcntl, __fcntl)
> -libc_hidden_weak (__fcntl)
> -weak_alias (__libc_fcntl, fcntl)
> diff --git a/sysdeps/unix/sysv/linux/m68k/fcntl.c b/sysdeps/unix/sysv/linux/m68k/fcntl.c
> deleted file mode 100644
> index ea951bc..0000000
> --- a/sysdeps/unix/sysv/linux/m68k/fcntl.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
> diff --git a/sysdeps/unix/sysv/linux/microblaze/fcntl.c b/sysdeps/unix/sysv/linux/microblaze/fcntl.c
> deleted file mode 100644
> index ea951bc..0000000
> --- a/sysdeps/unix/sysv/linux/microblaze/fcntl.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fcntl.c b/sysdeps/unix/sysv/linux/mips/mips32/fcntl.c
> deleted file mode 100644
> index ea951bc..0000000
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fcntl.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c b/sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c
> deleted file mode 100644
> index ea951bc..0000000
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c
> deleted file mode 100644
> index ea951bc..0000000
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c
> index 85ae8a2..d382d08 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c
> @@ -15,51 +15,18 @@
> License along with the GNU C Library; if not, see
> <http://www.gnu.org/licenses/>. */
>
> -#include <assert.h>
> -#include <errno.h>
> -#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */
> +#include <unistd.h>
> #include <fcntl.h>
> -#include <stdarg.h>
>
> -#include <sys/syscall.h>
> -
> -
> -#ifndef NO_CANCELLATION
> -int
> -__fcntl_nocancel (int fd, int cmd, ...)
> +static inline int
> +__libc_fcntl_adjust_cmd (int cmd)
> {
> - va_list ap;
> - void *arg;
> -
> - va_start (ap, cmd);
> - arg = va_arg (ap, void *);
> - va_end (ap);
> -
> - return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
> -}
> -#endif
> -
> -
> -int
> -__libc_fcntl (int fd, int cmd, ...)
> -{
> - va_list ap;
> - void *arg;
> -
> - va_start (ap, cmd);
> - arg = va_arg (ap, void *);
> - va_end (ap);
> -
> if (cmd >= F_GETLK64 && cmd <= F_SETLKW64)
> cmd -= F_GETLK64 - F_GETLK;
> -
> - if (cmd != F_SETLKW)
> - return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
> -
> - return SYSCALL_CANCEL (fcntl, fd, cmd, arg);
> + return cmd;
> }
> -libc_hidden_def (__libc_fcntl)
>
> -weak_alias (__libc_fcntl, __fcntl)
> -libc_hidden_weak (__fcntl)
> -weak_alias (__libc_fcntl, fcntl)
> +#define FCNTL_ADJUST_CMD(__cmd) \
> + __libc_fcntl_adjust_cmd (__cmd)
> +
> +#include <sysdeps/unix/sysv/linux/fcntl.c>
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c b/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c
> deleted file mode 100644
> index ea951bc..0000000
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
> diff --git a/sysdeps/unix/sysv/linux/sh/fcntl.c b/sysdeps/unix/sysv/linux/sh/fcntl.c
> deleted file mode 100644
> index ea951bc..0000000
> --- a/sysdeps/unix/sysv/linux/sh/fcntl.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c b/sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c
> deleted file mode 100644
> index ea951bc..0000000
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c
> +++ /dev/null
> @@ -1 +0,0 @@
> -#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
>
On Mai 23 2017, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:
> * sysdeps/unix/sysv/linux/arm/fcntl.c: Remove file.
> * sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/hppa/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/m68k/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/microblaze/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/mips/mips32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/sh/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c: Likewise.
> * sysdeps/unix/sysv/linux/fcntl.c: New file.
That's not a new file.
> * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Refactor to
> use default implementation.
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c
> index 85ae8a2..d382d08 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c
> @@ -15,51 +15,18 @@
> License along with the GNU C Library; if not, see
> <http://www.gnu.org/licenses/>. */
>
> -#include <assert.h>
> -#include <errno.h>
> -#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */
> +#include <unistd.h>
> #include <fcntl.h>
> -#include <stdarg.h>
>
> -#include <sys/syscall.h>
> -
> -
> -#ifndef NO_CANCELLATION
> -int
> -__fcntl_nocancel (int fd, int cmd, ...)
> +static inline int
> +__libc_fcntl_adjust_cmd (int cmd)
No need for __libc prefix, since this is static.
Ok with those changes.
Andreas.
@@ -1,5 +1,21 @@
2017-05-23 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ * sysdeps/unix/sysv/linux/arm/fcntl.c: Remove file.
+ * sysdeps/unix/sysv/linux/generic/wordsize-32/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/hppa/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/m68k/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/microblaze/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/mips/mips32/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/mips/mips64/n32/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/sh/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/fcntl.c: New file.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Refactor to
+ use default implementation.
+
* io/Makefile (CFLAGS-sync_file_range.c): Remove rule.
* sysdeps/unix/sysv/linux/Makefile (CFLAGS-sync_file_range.c): New
rule.
deleted file mode 100644
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
@@ -15,31 +15,36 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <assert.h>
-#include <errno.h>
-#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */
#include <fcntl.h>
#include <stdarg.h>
+#include <errno.h>
+#include <sysdep-cancel.h>
-#include <sys/syscall.h>
+#ifndef __NR_fcntl64
+# define __NR_fcntl64 __NR_fcntl
+#endif
+#ifndef FCNTL_ADJUST_CMD
+# define FCNTL_ADJUST_CMD(__cmd) __cmd
+#endif
static int
-do_fcntl (int fd, int cmd, void *arg)
+fcntl_common (int fd, int cmd, void *arg)
{
- if (cmd != F_GETOWN)
- return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
-
- INTERNAL_SYSCALL_DECL (err);
- struct f_owner_ex fex;
- int res = INTERNAL_SYSCALL (fcntl, err, 3, 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,
+ 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 NO_CANCELLATION
int
@@ -52,11 +57,10 @@ __fcntl_nocancel (int fd, int cmd, ...)
arg = va_arg (ap, void *);
va_end (ap);
- return do_fcntl (fd, cmd, arg);
+ return fcntl_common (fd, cmd, arg);
}
#endif
-
int
__libc_fcntl (int fd, int cmd, ...)
{
@@ -67,16 +71,12 @@ __libc_fcntl (int fd, int cmd, ...)
arg = va_arg (ap, void *);
va_end (ap);
- if (SINGLE_THREAD_P || cmd != F_SETLKW)
- return do_fcntl (fd, cmd, arg);
-
- int oldtype = LIBC_CANCEL_ASYNC ();
-
- int result = do_fcntl (fd, cmd, arg);
+ cmd = FCNTL_ADJUST_CMD (cmd);
- LIBC_CANCEL_RESET (oldtype);
+ if (cmd == F_SETLKW || cmd == F_SETLKW64)
+ return SYSCALL_CANCEL (fcntl64, fd, cmd, (void *) arg);
- return result;
+ return fcntl_common (fd, cmd, arg);
}
libc_hidden_def (__libc_fcntl)
deleted file mode 100644
@@ -1,86 +0,0 @@
-/* Copyright (C) 2011-2017 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
-
- 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/>. */
-
-#include <assert.h>
-#include <errno.h>
-#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */
-#include <fcntl.h>
-#include <stdarg.h>
-
-#include <sys/syscall.h>
-
-
-static int
-do_fcntl (int fd, int cmd, void *arg)
-{
- if (cmd != F_GETOWN)
- return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
-
- INTERNAL_SYSCALL_DECL (err);
- struct f_owner_ex fex;
- int res = INTERNAL_SYSCALL (fcntl64, err, 3, fd, F_GETOWN_EX, &fex);
- if (!INTERNAL_SYSCALL_ERROR_P (res, err))
- return fex.type == F_OWNER_GID ? -fex.pid : fex.pid;
-
- __set_errno (INTERNAL_SYSCALL_ERRNO (res, err));
- return -1;
-}
-
-
-#ifndef NO_CANCELLATION
-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 do_fcntl (fd, cmd, arg);
-}
-#endif
-
-
-int
-__libc_fcntl (int fd, int cmd, ...)
-{
- va_list ap;
- void *arg;
-
- va_start (ap, cmd);
- arg = va_arg (ap, void *);
- va_end (ap);
-
- if (SINGLE_THREAD_P || cmd != F_SETLKW)
- return do_fcntl (fd, cmd, arg);
-
- int oldtype = LIBC_CANCEL_ASYNC ();
-
- int result = do_fcntl (fd, cmd, arg);
-
- LIBC_CANCEL_RESET (oldtype);
-
- return result;
-}
-libc_hidden_def (__libc_fcntl)
-
-weak_alias (__libc_fcntl, __fcntl)
-libc_hidden_weak (__fcntl)
-weak_alias (__libc_fcntl, fcntl)
deleted file mode 100644
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
deleted file mode 100644
@@ -1,61 +0,0 @@
-/* Copyright (C) 2000-2017 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/>. */
-
-#include <assert.h>
-#include <errno.h>
-#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */
-#include <fcntl.h>
-#include <stdarg.h>
-
-#include <sys/syscall.h>
-
-#ifndef NO_CANCELLATION
-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 INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
-}
-#endif /* NO_CANCELLATION */
-
-
-int
-__libc_fcntl (int fd, int cmd, ...)
-{
- va_list ap;
- void *arg;
-
- va_start (ap, cmd);
- arg = va_arg (ap, void *);
- va_end (ap);
-
- if ((cmd != F_SETLKW) && (cmd != F_SETLKW64))
- return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
-
- return SYSCALL_CANCEL (fcntl64, fd, cmd, arg);
-}
-libc_hidden_def (__libc_fcntl)
-
-weak_alias (__libc_fcntl, __fcntl)
-libc_hidden_weak (__fcntl)
-weak_alias (__libc_fcntl, fcntl)
deleted file mode 100644
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
deleted file mode 100644
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
deleted file mode 100644
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
deleted file mode 100644
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
deleted file mode 100644
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
@@ -15,51 +15,18 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <assert.h>
-#include <errno.h>
-#include <sysdep-cancel.h> /* Must come before <fcntl.h>. */
+#include <unistd.h>
#include <fcntl.h>
-#include <stdarg.h>
-#include <sys/syscall.h>
-
-
-#ifndef NO_CANCELLATION
-int
-__fcntl_nocancel (int fd, int cmd, ...)
+static inline int
+__libc_fcntl_adjust_cmd (int cmd)
{
- va_list ap;
- void *arg;
-
- va_start (ap, cmd);
- arg = va_arg (ap, void *);
- va_end (ap);
-
- return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
-}
-#endif
-
-
-int
-__libc_fcntl (int fd, int cmd, ...)
-{
- va_list ap;
- void *arg;
-
- va_start (ap, cmd);
- arg = va_arg (ap, void *);
- va_end (ap);
-
if (cmd >= F_GETLK64 && cmd <= F_SETLKW64)
cmd -= F_GETLK64 - F_GETLK;
-
- if (cmd != F_SETLKW)
- return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
-
- return SYSCALL_CANCEL (fcntl, fd, cmd, arg);
+ return cmd;
}
-libc_hidden_def (__libc_fcntl)
-weak_alias (__libc_fcntl, __fcntl)
-libc_hidden_weak (__fcntl)
-weak_alias (__libc_fcntl, fcntl)
+#define FCNTL_ADJUST_CMD(__cmd) \
+ __libc_fcntl_adjust_cmd (__cmd)
+
+#include <sysdeps/unix/sysv/linux/fcntl.c>
deleted file mode 100644
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
deleted file mode 100644
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
deleted file mode 100644
@@ -1 +0,0 @@
-#include <sysdeps/unix/sysv/linux/i386/fcntl.c>