[1/8] misc: Add time64 alias for ioctl
Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
Commit Message
---
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
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
* 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
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
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.
@@ -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))
@@ -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
new file mode 100644
@@ -0,0 +1 @@
+#include "tst-ioctl.c"
new file mode 100644
@@ -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>
@@ -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
@@ -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;
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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