diff mbox series

[4/5] Consolidate Linux fcntl implementation

Message ID 1495563960-669-5-git-send-email-adhemerval.zanella@linaro.org
State Accepted
Commit 9b8f8593e5d919d8ea9a5f21ce7473246651ec2f
Headers show
Series Remove sysdep-cancel assembly macro | expand

Commit Message

Adhemerval Zanella May 23, 2017, 6:25 p.m. UTC
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

-- 
2.7.4

Comments

Adhemerval Zanella June 29, 2017, 2:15 p.m. UTC | #1
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>

>
Andreas Schwab June 29, 2017, 3:01 p.m. UTC | #2
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.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."
diff mbox series

Patch

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>