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 > + . */ > + > +#include > +#include > +#include > +#include > + > +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 > 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 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