[1/8] misc: Add time64 alias for ioctl

Message ID d26c7694ed8e8a28ccbbe67716afea25cdcb1a01.1625492203.git.fweimer@redhat.com
State Superseded
Delegated to: Adhemerval Zanella Netto
Headers
Series Additional time64 aliases |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Florian Weimer July 5, 2021, 1:41 p.m. UTC
  ---
 misc/Makefile                                 |  7 +++-
 misc/sys/ioctl.h                              | 10 +++++
 misc/tst-ioctl-time64.c                       |  1 +
 misc/tst-ioctl.c                              | 41 +++++++++++++++++++
 sysdeps/unix/syscalls.list                    |  2 +-
 sysdeps/unix/sysv/linux/Versions              |  2 +
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
 .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
 .../sysv/linux/microblaze/be/libc.abilist     |  1 +
 .../sysv/linux/microblaze/le/libc.abilist     |  1 +
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
 .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
 .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/powerpc/ioctl.c       |  3 ++
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
 .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
 .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
 .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
 26 files changed, 82 insertions(+), 3 deletions(-)
 create mode 100644 misc/tst-ioctl-time64.c
 create mode 100644 misc/tst-ioctl.c
  

Comments

Lukasz Majewski July 20, 2021, 8:32 a.m. UTC | #1
Hi Florian,

> ---
>  misc/Makefile                                 |  7 +++-
>  misc/sys/ioctl.h                              | 10 +++++
>  misc/tst-ioctl-time64.c                       |  1 +
>  misc/tst-ioctl.c                              | 41
> +++++++++++++++++++ sysdeps/unix/syscalls.list                    |
> 2 +- sysdeps/unix/sysv/linux/Versions              |  2 +
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
>  .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
>  .../sysv/linux/microblaze/be/libc.abilist     |  1 +
>  .../sysv/linux/microblaze/le/libc.abilist     |  1 +
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
>  sysdeps/unix/sysv/linux/powerpc/ioctl.c       |  3 ++
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
>  .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
>  26 files changed, 82 insertions(+), 3 deletions(-)
>  create mode 100644 misc/tst-ioctl-time64.c
>  create mode 100644 misc/tst-ioctl.c
> 
> diff --git a/misc/Makefile b/misc/Makefile
> index ae03e26f1b..22923efde9 100644
> --- a/misc/Makefile
> +++ b/misc/Makefile
> @@ -88,11 +88,14 @@ tests := tst-dirname tst-tsearch tst-fdset
> tst-mntent tst-hsearch \ tst-preadvwritev tst-preadvwritev64
> tst-makedev tst-empty \ tst-preadvwritev2 tst-preadvwritev64v2
> tst-warn-wide \ tst-ldbl-warn tst-ldbl-error tst-dbl-efgcvt
> tst-ldbl-efgcvt \
> -	 tst-mntent-autofs tst-syscalls tst-mntent-escape tst-select
> +	 tst-mntent-autofs tst-syscalls tst-mntent-escape tst-select
> \
> +	 tst-ioctl
>  
>  tests-time64 := \
>    tst-select-time64 \
> -  tst-pselect-time64
> +  tst-pselect-time64 \
> +  tst-ioctl-time64 \
> +  # tests-time64

Do we need this commented line?

>  
>  # Tests which need libdl.
>  ifeq (yes,$(build-shared))
> diff --git a/misc/sys/ioctl.h b/misc/sys/ioctl.h
> index ddd204d95f..6884d9925f 100644
> --- a/misc/sys/ioctl.h
> +++ b/misc/sys/ioctl.h
> @@ -38,7 +38,17 @@ __BEGIN_DECLS
>  /* Perform the I/O control operation specified by REQUEST on FD.
>     One argument may follow; its presence and type depend on REQUEST.
>     Return value depends on REQUEST.  Usually -1 indicates error.  */
> +#ifndef __USE_TIME_BITS64
>  extern int ioctl (int __fd, unsigned long int __request, ...)
> __THROW; +#else
> +# ifdef __REDIRECT
> +extern int __REDIRECT (ioctl, (int __fd, unsigned long int
> __request, ...),
> +		       __ioctl_time64) __THROW;
> +# else
> +extern int __ioctl_time64 (int __fd, unsigned long int __request,
> ...) __THROW; +#  define ioctl __ioctl_time64
> +# endif
> +#endif
>  

So the idea here is to have the distinction for ioctl's when we decide
to support 64 bit time on 32 bit ports? And as ioctls are often
multiplexed, we will not be able to distinct the time related struct
members passed to this syscall?

>  __END_DECLS
>  
> diff --git a/misc/tst-ioctl-time64.c b/misc/tst-ioctl-time64.c
> new file mode 100644
> index 0000000000..c73e8f649b
> --- /dev/null
> +++ b/misc/tst-ioctl-time64.c
> @@ -0,0 +1 @@
> +#include "tst-ioctl.c"
> diff --git a/misc/tst-ioctl.c b/misc/tst-ioctl.c
> new file mode 100644
> index 0000000000..a09b8ae836
> --- /dev/null
> +++ b/misc/tst-ioctl.c
> @@ -0,0 +1,41 @@
> +/* Smoke test for ioctl.
> +   Copyright (C) 2021 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
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <support/check.h>
> +#include <support/xunistd.h>
> +#include <sys/ioctl.h>
> +#include <sys/socket.h>
> +
> +static int
> +do_test (void)
> +{
> +  int pair[2];
> +  TEST_COMPARE (socketpair (AF_UNIX, SOCK_STREAM, 0, pair), 0);
> +  TEST_COMPARE (write (pair[0], "buffer", sizeof ("buffer")),
> +                sizeof ("buffer"));
> +  int value;
> +  TEST_COMPARE (ioctl (pair[1], FIONREAD, &value), 0);
> +  TEST_COMPARE (value, sizeof ("buffer"));
> +  TEST_COMPARE (ioctl (pair[0], FIONREAD, &value), 0);
> +  TEST_COMPARE (value, 0);
> +  xclose (pair[0]);
> +  xclose (pair[1]);
> +  return 0;
> +}
> +
> +#include <support/test-driver.c>
> diff --git a/sysdeps/unix/syscalls.list b/sysdeps/unix/syscalls.list
> index 341eec20f1..10bd409eef 100644
> --- a/sysdeps/unix/syscalls.list
> +++ b/sysdeps/unix/syscalls.list
> @@ -32,7 +32,7 @@ getrlimit	-	getrlimit
> i:ip	__getrlimit	getrlimit getsockname	-
> getsockname	i:ibN	__getsockname	getsockname
> getsockopt	-	getsockopt	i:iiiBN
> getsockopt getuid		-	getuid
> Ei:	__getuid	getuid -ioctl		-
> ioctl		i:iiI	__ioctl		ioctl
> +ioctl		-	ioctl		i:iiI
> __ioctl		ioctl __ioctl_time64 kill
> -	kill		i:ii	__kill		kill
> link		-	link		i:ss
> __link		link listen		-
> listen		i:ii	__listen	listen diff --git
> a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index 53cb7b23e2..c12ee647ae 100644 ---
> a/sysdeps/unix/sysv/linux/Versions +++
> b/sysdeps/unix/sysv/linux/Versions @@ -209,6 +209,7 @@ libc {
> __ctime64; __ctime64_r; __difftime64;
> +    __fcntl_time64;
>      __fstat64_time64;
>      __fstatat64_time64;
>      __futimens64;
> @@ -229,6 +230,7 @@ libc {
>      __globfree64_time64;
>      __gmtime64;
>      __gmtime64_r;
> +    __ioctl_time64;
>      __localtime64;
>      __localtime64_r;
>      __lstat64_time64;
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> b/sysdeps/unix/sysv/linux/arm/be/libc.abilist index
> 9b824f1605..85d572ba84 100644 ---
> a/sysdeps/unix/sysv/linux/arm/be/libc.abilist +++
> b/sysdeps/unix/sysv/linux/arm/be/libc.abilist @@ -222,6 +222,7 @@
> GLIBC_2.34 __glob64_time64 F GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index
> 443a81b8f7..79be7bcce3 100644 ---
> a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -219,6 +219,7 @@
> GLIBC_2.34 __glob64_time64 F GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist
> b/sysdeps/unix/sysv/linux/csky/libc.abilist index
> 243de3cf93..1aad4a1be0 100644 ---
> a/sysdeps/unix/sysv/linux/csky/libc.abilist +++
> b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -2354,6 +2354,7 @@
> GLIBC_2.34 __glob64_time64 F GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> b/sysdeps/unix/sysv/linux/hppa/libc.abilist index
> 24ae58bb6f..59f61b4b48 100644 ---
> a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++
> b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -2307,6 +2307,7 @@
> GLIBC_2.34 __glob64_time64 F GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist
> b/sysdeps/unix/sysv/linux/i386/libc.abilist index
> 09bebcd5a1..0acf01c432 100644 ---
> a/sysdeps/unix/sysv/linux/i386/libc.abilist +++
> b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -2490,6 +2490,7 @@
> GLIBC_2.34 __glob64_time64 F GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __isnanf128 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index
> c1fcde4c24..a030d33f83 100644 ---
> a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++
> b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -223,6 +223,7
> @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index
> 407651cfd7..9ba724cff0 100644 ---
> a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++
> b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -2434,6 +2434,7
> @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index
> 7da722a734..31a33e2d05 100644 ---
> a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++
> b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -2405,6
> +2405,7 @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34
> __globfree64_time64 F GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist index
> c374607b81..4faaa64714 100644 ---
> a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist @@ -2402,6
> +2402,7 @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34
> __globfree64_time64 F GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index
> b1f426e053..b283bb5a3d 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -2399,6
> +2399,7 @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34
> __globfree64_time64 F GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index
> 066ceb2258..6145a5c1a3 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -2397,6
> +2397,7 @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34
> __globfree64_time64 F GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index
> 51c563ebbe..ebbfdc0fe4 100644 ---
> a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -2405,6
> +2405,7 @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34
> __globfree64_time64 F GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> b/sysdeps/unix/sysv/linux/nios2/libc.abilist index
> ab9f2bd42c..e7cb508d19 100644 ---
> a/sysdeps/unix/sysv/linux/nios2/libc.abilist +++
> b/sysdeps/unix/sysv/linux/nios2/libc.abilist @@ -2444,6 +2444,7 @@
> GLIBC_2.34 __glob64_time64 F GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/ioctl.c
> b/sysdeps/unix/sysv/linux/powerpc/ioctl.c index
> 1ee9d19d4d..a81c7ba54c 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/ioctl.c +++
> b/sysdeps/unix/sysv/linux/powerpc/ioctl.c @@ -63,3 +63,6 @@ __ioctl
> (int fd, unsigned long int request, ...) }
>  libc_hidden_def (__ioctl)
>  weak_alias (__ioctl, ioctl)
> +#if __TIMESIZE != 64
> +weak_alias (__ioctl, __ioctl_time64)
> +#endif
> diff --git
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index
> 83f8513e17..7742c0f9f7 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@
> -2461,6 +2461,7 @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34
> __globfree64_time64 F GLIBC_2.34 __gmtime64 F GLIBC_2.34 __gmtime64_r
> F +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index
> 0fad357bf6..d0786c84a9 100644 ---
> a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++
> b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@
> -2494,6 +2494,7 @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34
> __globfree64_time64 F GLIBC_2.34 __gmtime64 F GLIBC_2.34 __gmtime64_r
> F +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index
> 12aeb82520..fd09d6a21b 100644 ---
> a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -2459,6
> +2459,7 @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34
> __globfree64_time64 F GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> b/sysdeps/unix/sysv/linux/sh/be/libc.abilist index
> 1ce4b54bf2..48f13e2b53 100644 ---
> a/sysdeps/unix/sysv/linux/sh/be/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sh/be/libc.abilist @@ -2314,6 +2314,7 @@
> GLIBC_2.34 __glob64_time64 F GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index
> 7d01add713..e1ff04148b 100644 ---
> a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -2311,6 +2311,7 @@
> GLIBC_2.34 __glob64_time64 F GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index
> b5ef3247d7..2100ecc3f9 100644 ---
> a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++
> b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -2454,6
> +2454,7 @@ GLIBC_2.34 __glob64_time64 F GLIBC_2.34
> __globfree64_time64 F GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F

Reviewed-by: Lukasz Majewski <lukma@denx.de>


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
  
Florian Weimer July 20, 2021, 8:52 a.m. UTC | #2
* Lukasz Majewski:

> So the idea here is to have the distinction for ioctl's when we decide
> to support 64 bit time on 32 bit ports? And as ioctls are often
> multiplexed, we will not be able to distinct the time related struct
> members passed to this syscall?

The idea is this: If we need to add more ioctl rewriting in userspace,
then we can confie that to time64 binaries with this change because they
use a separate function call.  Binaries which use the non-time64
interface (especially old binaries which cannot be recompiled) are
totally unaffected by such potential future changes.

If there is no separate time64 symbols, we would have to hope that we
can identify the need to rewrite based on the arguments alone, which is
likely but not guaranteed.

Thanks,
Florian
  
Lukasz Majewski July 20, 2021, 9:18 a.m. UTC | #3
On Tue, 20 Jul 2021 10:52:57 +0200
Florian Weimer <fweimer@redhat.com> wrote:

> * Lukasz Majewski:
> 
> > So the idea here is to have the distinction for ioctl's when we
> > decide to support 64 bit time on 32 bit ports? And as ioctls are
> > often multiplexed, we will not be able to distinct the time related
> > struct members passed to this syscall?  
> 
> The idea is this: If we need to add more ioctl rewriting in userspace,
> then we can confie that to time64 binaries with this change because
> they use a separate function call.  Binaries which use the non-time64
> interface (especially old binaries which cannot be recompiled) are
> totally unaffected by such potential future changes.
> 
> If there is no separate time64 symbols, we would have to hope that we
> can identify the need to rewrite based on the arguments alone, which
> is likely but not guaranteed.

Thanks for the detailed explanation - now it is clear :-)

> 
> Thanks,
> Florian
> 




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
  
Adhemerval Zanella Netto July 20, 2021, 7:47 p.m. UTC | #4
LGTM with a small fix below.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

On 05/07/2021 10:41, Florian Weimer via Libc-alpha wrote:
> ---
>  misc/Makefile                                 |  7 +++-
>  misc/sys/ioctl.h                              | 10 +++++
>  misc/tst-ioctl-time64.c                       |  1 +
>  misc/tst-ioctl.c                              | 41 +++++++++++++++++++
>  sysdeps/unix/syscalls.list                    |  2 +-
>  sysdeps/unix/sysv/linux/Versions              |  2 +
>  sysdeps/unix/sysv/linux/arm/be/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/arm/le/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/csky/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/hppa/libc.abilist     |  1 +
>  sysdeps/unix/sysv/linux/i386/libc.abilist     |  1 +
>  .../sysv/linux/m68k/coldfire/libc.abilist     |  1 +
>  .../unix/sysv/linux/m68k/m680x0/libc.abilist  |  1 +
>  .../sysv/linux/microblaze/be/libc.abilist     |  1 +
>  .../sysv/linux/microblaze/le/libc.abilist     |  1 +
>  .../sysv/linux/mips/mips32/fpu/libc.abilist   |  1 +
>  .../sysv/linux/mips/mips32/nofpu/libc.abilist |  1 +
>  .../sysv/linux/mips/mips64/n32/libc.abilist   |  1 +
>  sysdeps/unix/sysv/linux/nios2/libc.abilist    |  1 +
>  sysdeps/unix/sysv/linux/powerpc/ioctl.c       |  3 ++
>  .../linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
>  .../powerpc/powerpc32/nofpu/libc.abilist      |  1 +
>  .../unix/sysv/linux/s390/s390-32/libc.abilist |  1 +
>  sysdeps/unix/sysv/linux/sh/be/libc.abilist    |  1 +
>  sysdeps/unix/sysv/linux/sh/le/libc.abilist    |  1 +
>  .../sysv/linux/sparc/sparc32/libc.abilist     |  1 +
>  26 files changed, 82 insertions(+), 3 deletions(-)
>  create mode 100644 misc/tst-ioctl-time64.c
>  create mode 100644 misc/tst-ioctl.c
> 
> diff --git a/misc/Makefile b/misc/Makefile
> index ae03e26f1b..22923efde9 100644
> --- a/misc/Makefile
> +++ b/misc/Makefile
> @@ -88,11 +88,14 @@ tests := tst-dirname tst-tsearch tst-fdset tst-mntent tst-hsearch \
>  	 tst-preadvwritev tst-preadvwritev64 tst-makedev tst-empty \
>  	 tst-preadvwritev2 tst-preadvwritev64v2 tst-warn-wide \
>  	 tst-ldbl-warn tst-ldbl-error tst-dbl-efgcvt tst-ldbl-efgcvt \
> -	 tst-mntent-autofs tst-syscalls tst-mntent-escape tst-select
> +	 tst-mntent-autofs tst-syscalls tst-mntent-escape tst-select \
> +	 tst-ioctl
>  
>  tests-time64 := \
>    tst-select-time64 \
> -  tst-pselect-time64
> +  tst-pselect-time64 \
> +  tst-ioctl-time64 \
> +  # tests-time64
>  
>  # Tests which need libdl.
>  ifeq (yes,$(build-shared))

Ok.

> diff --git a/misc/sys/ioctl.h b/misc/sys/ioctl.h
> index ddd204d95f..6884d9925f 100644
> --- a/misc/sys/ioctl.h
> +++ b/misc/sys/ioctl.h
> @@ -38,7 +38,17 @@ __BEGIN_DECLS
>  /* Perform the I/O control operation specified by REQUEST on FD.
>     One argument may follow; its presence and type depend on REQUEST.
>     Return value depends on REQUEST.  Usually -1 indicates error.  */
> +#ifndef __USE_TIME_BITS64
>  extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
> +#else
> +# ifdef __REDIRECT
> +extern int __REDIRECT (ioctl, (int __fd, unsigned long int __request, ...),
> +		       __ioctl_time64) __THROW;
> +# else
> +extern int __ioctl_time64 (int __fd, unsigned long int __request, ...) __THROW;
> +#  define ioctl __ioctl_time64
> +# endif
> +#endif
>  
>  __END_DECLS
>  

Ok.

> diff --git a/misc/tst-ioctl-time64.c b/misc/tst-ioctl-time64.c
> new file mode 100644
> index 0000000000..c73e8f649b
> --- /dev/null
> +++ b/misc/tst-ioctl-time64.c
> @@ -0,0 +1 @@
> +#include "tst-ioctl.c"

Ok.

> diff --git a/misc/tst-ioctl.c b/misc/tst-ioctl.c
> new file mode 100644
> index 0000000000..a09b8ae836
> --- /dev/null
> +++ b/misc/tst-ioctl.c
> @@ -0,0 +1,41 @@
> +/* Smoke test for ioctl.
> +   Copyright (C) 2021 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
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#include <support/check.h>
> +#include <support/xunistd.h>
> +#include <sys/ioctl.h>
> +#include <sys/socket.h>
> +
> +static int
> +do_test (void)
> +{
> +  int pair[2];
> +  TEST_COMPARE (socketpair (AF_UNIX, SOCK_STREAM, 0, pair), 0);
> +  TEST_COMPARE (write (pair[0], "buffer", sizeof ("buffer")),
> +                sizeof ("buffer"));
> +  int value;
> +  TEST_COMPARE (ioctl (pair[1], FIONREAD, &value), 0);
> +  TEST_COMPARE (value, sizeof ("buffer"));
> +  TEST_COMPARE (ioctl (pair[0], FIONREAD, &value), 0);
> +  TEST_COMPARE (value, 0);
> +  xclose (pair[0]);
> +  xclose (pair[1]);
> +  return 0;
> +}
> +
> +#include <support/test-driver.c>

Ok.

> diff --git a/sysdeps/unix/syscalls.list b/sysdeps/unix/syscalls.list
> index 341eec20f1..10bd409eef 100644
> --- a/sysdeps/unix/syscalls.list
> +++ b/sysdeps/unix/syscalls.list
> @@ -32,7 +32,7 @@ getrlimit	-	getrlimit	i:ip	__getrlimit	getrlimit
>  getsockname	-	getsockname	i:ibN	__getsockname	getsockname
>  getsockopt	-	getsockopt	i:iiiBN	getsockopt
>  getuid		-	getuid		Ei:	__getuid	getuid
> -ioctl		-	ioctl		i:iiI	__ioctl		ioctl
> +ioctl		-	ioctl		i:iiI	__ioctl		ioctl __ioctl_time64
>  kill		-	kill		i:ii	__kill		kill
>  link		-	link		i:ss	__link		link
>  listen		-	listen		i:ii	__listen	listen

Ok.

> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index 53cb7b23e2..c12ee647ae 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -209,6 +209,7 @@ libc {
>      __ctime64;
>      __ctime64_r;
>      __difftime64;
> +    __fcntl_time64;
>      __fstat64_time64;
>      __fstatat64_time64;
>      __futimens64;

I think this is a spillover from the subsequent patch.

> @@ -229,6 +230,7 @@ libc {
>      __globfree64_time64;
>      __gmtime64;
>      __gmtime64_r;
> +    __ioctl_time64;
>      __localtime64;
>      __localtime64_r;
>      __lstat64_time64;

Ok.

> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index 9b824f1605..85d572ba84 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -222,6 +222,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 443a81b8f7..79be7bcce3 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -219,6 +219,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 243de3cf93..1aad4a1be0 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2354,6 +2354,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 24ae58bb6f..59f61b4b48 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2307,6 +2307,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 09bebcd5a1..0acf01c432 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2490,6 +2490,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __isnanf128 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index c1fcde4c24..a030d33f83 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -223,6 +223,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index 407651cfd7..9ba724cff0 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2434,6 +2434,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 7da722a734..31a33e2d05 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2405,6 +2405,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index c374607b81..4faaa64714 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2402,6 +2402,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index b1f426e053..b283bb5a3d 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2399,6 +2399,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index 066ceb2258..6145a5c1a3 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2397,6 +2397,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 51c563ebbe..ebbfdc0fe4 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2405,6 +2405,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index ab9f2bd42c..e7cb508d19 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -2444,6 +2444,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/ioctl.c b/sysdeps/unix/sysv/linux/powerpc/ioctl.c
> index 1ee9d19d4d..a81c7ba54c 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/ioctl.c
> +++ b/sysdeps/unix/sysv/linux/powerpc/ioctl.c
> @@ -63,3 +63,6 @@ __ioctl (int fd, unsigned long int request, ...)
>  }
>  libc_hidden_def (__ioctl)
>  weak_alias (__ioctl, ioctl)
> +#if __TIMESIZE != 64
> +weak_alias (__ioctl, __ioctl_time64)
> +#endif
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 83f8513e17..7742c0f9f7 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2461,6 +2461,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 0fad357bf6..d0786c84a9 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2494,6 +2494,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 12aeb82520..fd09d6a21b 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2459,6 +2459,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index 1ce4b54bf2..48f13e2b53 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2314,6 +2314,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 7d01add713..e1ff04148b 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2311,6 +2311,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index b5ef3247d7..2100ecc3f9 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2454,6 +2454,7 @@ GLIBC_2.34 __glob64_time64 F
>  GLIBC_2.34 __globfree64_time64 F
>  GLIBC_2.34 __gmtime64 F
>  GLIBC_2.34 __gmtime64_r F
> +GLIBC_2.34 __ioctl_time64 F
>  GLIBC_2.34 __libc_start_main F
>  GLIBC_2.34 __localtime64 F
>  GLIBC_2.34 __localtime64_r F
> 

Ok.
  

Patch

diff --git a/misc/Makefile b/misc/Makefile
index ae03e26f1b..22923efde9 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -88,11 +88,14 @@  tests := tst-dirname tst-tsearch tst-fdset tst-mntent tst-hsearch \
 	 tst-preadvwritev tst-preadvwritev64 tst-makedev tst-empty \
 	 tst-preadvwritev2 tst-preadvwritev64v2 tst-warn-wide \
 	 tst-ldbl-warn tst-ldbl-error tst-dbl-efgcvt tst-ldbl-efgcvt \
-	 tst-mntent-autofs tst-syscalls tst-mntent-escape tst-select
+	 tst-mntent-autofs tst-syscalls tst-mntent-escape tst-select \
+	 tst-ioctl
 
 tests-time64 := \
   tst-select-time64 \
-  tst-pselect-time64
+  tst-pselect-time64 \
+  tst-ioctl-time64 \
+  # tests-time64
 
 # Tests which need libdl.
 ifeq (yes,$(build-shared))
diff --git a/misc/sys/ioctl.h b/misc/sys/ioctl.h
index ddd204d95f..6884d9925f 100644
--- a/misc/sys/ioctl.h
+++ b/misc/sys/ioctl.h
@@ -38,7 +38,17 @@  __BEGIN_DECLS
 /* Perform the I/O control operation specified by REQUEST on FD.
    One argument may follow; its presence and type depend on REQUEST.
    Return value depends on REQUEST.  Usually -1 indicates error.  */
+#ifndef __USE_TIME_BITS64
 extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT (ioctl, (int __fd, unsigned long int __request, ...),
+		       __ioctl_time64) __THROW;
+# else
+extern int __ioctl_time64 (int __fd, unsigned long int __request, ...) __THROW;
+#  define ioctl __ioctl_time64
+# endif
+#endif
 
 __END_DECLS
 
diff --git a/misc/tst-ioctl-time64.c b/misc/tst-ioctl-time64.c
new file mode 100644
index 0000000000..c73e8f649b
--- /dev/null
+++ b/misc/tst-ioctl-time64.c
@@ -0,0 +1 @@ 
+#include "tst-ioctl.c"
diff --git a/misc/tst-ioctl.c b/misc/tst-ioctl.c
new file mode 100644
index 0000000000..a09b8ae836
--- /dev/null
+++ b/misc/tst-ioctl.c
@@ -0,0 +1,41 @@ 
+/* Smoke test for ioctl.
+   Copyright (C) 2021 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
+   <https://www.gnu.org/licenses/>.  */
+
+#include <support/check.h>
+#include <support/xunistd.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+
+static int
+do_test (void)
+{
+  int pair[2];
+  TEST_COMPARE (socketpair (AF_UNIX, SOCK_STREAM, 0, pair), 0);
+  TEST_COMPARE (write (pair[0], "buffer", sizeof ("buffer")),
+                sizeof ("buffer"));
+  int value;
+  TEST_COMPARE (ioctl (pair[1], FIONREAD, &value), 0);
+  TEST_COMPARE (value, sizeof ("buffer"));
+  TEST_COMPARE (ioctl (pair[0], FIONREAD, &value), 0);
+  TEST_COMPARE (value, 0);
+  xclose (pair[0]);
+  xclose (pair[1]);
+  return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/sysdeps/unix/syscalls.list b/sysdeps/unix/syscalls.list
index 341eec20f1..10bd409eef 100644
--- a/sysdeps/unix/syscalls.list
+++ b/sysdeps/unix/syscalls.list
@@ -32,7 +32,7 @@  getrlimit	-	getrlimit	i:ip	__getrlimit	getrlimit
 getsockname	-	getsockname	i:ibN	__getsockname	getsockname
 getsockopt	-	getsockopt	i:iiiBN	getsockopt
 getuid		-	getuid		Ei:	__getuid	getuid
-ioctl		-	ioctl		i:iiI	__ioctl		ioctl
+ioctl		-	ioctl		i:iiI	__ioctl		ioctl __ioctl_time64
 kill		-	kill		i:ii	__kill		kill
 link		-	link		i:ss	__link		link
 listen		-	listen		i:ii	__listen	listen
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 53cb7b23e2..c12ee647ae 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -209,6 +209,7 @@  libc {
     __ctime64;
     __ctime64_r;
     __difftime64;
+    __fcntl_time64;
     __fstat64_time64;
     __fstatat64_time64;
     __futimens64;
@@ -229,6 +230,7 @@  libc {
     __globfree64_time64;
     __gmtime64;
     __gmtime64_r;
+    __ioctl_time64;
     __localtime64;
     __localtime64_r;
     __lstat64_time64;
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 9b824f1605..85d572ba84 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -222,6 +222,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 443a81b8f7..79be7bcce3 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -219,6 +219,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 243de3cf93..1aad4a1be0 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2354,6 +2354,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 24ae58bb6f..59f61b4b48 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2307,6 +2307,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 09bebcd5a1..0acf01c432 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2490,6 +2490,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __isnanf128 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index c1fcde4c24..a030d33f83 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -223,6 +223,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 407651cfd7..9ba724cff0 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2434,6 +2434,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 7da722a734..31a33e2d05 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2405,6 +2405,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index c374607b81..4faaa64714 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2402,6 +2402,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index b1f426e053..b283bb5a3d 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2399,6 +2399,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 066ceb2258..6145a5c1a3 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2397,6 +2397,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 51c563ebbe..ebbfdc0fe4 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2405,6 +2405,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index ab9f2bd42c..e7cb508d19 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2444,6 +2444,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/powerpc/ioctl.c b/sysdeps/unix/sysv/linux/powerpc/ioctl.c
index 1ee9d19d4d..a81c7ba54c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/ioctl.c
+++ b/sysdeps/unix/sysv/linux/powerpc/ioctl.c
@@ -63,3 +63,6 @@  __ioctl (int fd, unsigned long int request, ...)
 }
 libc_hidden_def (__ioctl)
 weak_alias (__ioctl, ioctl)
+#if __TIMESIZE != 64
+weak_alias (__ioctl, __ioctl_time64)
+#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 83f8513e17..7742c0f9f7 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2461,6 +2461,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 0fad357bf6..d0786c84a9 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2494,6 +2494,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 12aeb82520..fd09d6a21b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2459,6 +2459,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 1ce4b54bf2..48f13e2b53 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2314,6 +2314,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 7d01add713..e1ff04148b 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2311,6 +2311,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index b5ef3247d7..2100ecc3f9 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2454,6 +2454,7 @@  GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
 GLIBC_2.34 __gmtime64 F
 GLIBC_2.34 __gmtime64_r F
+GLIBC_2.34 __ioctl_time64 F
 GLIBC_2.34 __libc_start_main F
 GLIBC_2.34 __localtime64 F
 GLIBC_2.34 __localtime64_r F