On Fri, 14 Feb 2020 08:31:30 -0800 Alistair Francis wrote: > On y2038 safe 32-bit systems the Linux kernel expects itimerval > and rusage to use a 32-bit time_t, even though the other time_t's > are 64-bit. > > There are also other occurances where the time passed to the kernel > via timeval doesn't match the wordsize. > > To handle these cases let's define a new macro > __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64. This macro specifies if the > kernel's old_timeval matches the new timeval64. This should be true > for 64-bit architectures (expect for Alpha) and x32. Reviewed-by: Lukasz Majewski > --- > bits/typesizes.h | 6 ++++++ > sysdeps/unix/sysv/linux/alpha/bits/typesizes.h | 3 +++ > sysdeps/unix/sysv/linux/generic/bits/typesizes.h | 7 +++++++ > sysdeps/unix/sysv/linux/s390/bits/typesizes.h | 6 ++++++ > sysdeps/unix/sysv/linux/sparc/bits/typesizes.h | 6 ++++++ > sysdeps/unix/sysv/linux/x86/bits/typesizes.h | 3 +++ > 6 files changed, 31 insertions(+) > > diff --git a/bits/typesizes.h b/bits/typesizes.h > index 599408973e..8f16903a21 100644 > --- a/bits/typesizes.h > +++ b/bits/typesizes.h > @@ -76,10 +76,16 @@ > > /* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ > # define __STATFS_MATCHES_STATFS64 1 > + > +/* And for getitimer, setitimer and rusage */ > +# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 > #else > # define __RLIM_T_MATCHES_RLIM64_T 0 > > # define __STATFS_MATCHES_STATFS64 0 > + > +/* And for getitimer, setitimer and rusage */ > +# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 0 > #endif > > /* Number of descriptors that can fit in an `fd_set'. */ > diff --git a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h > b/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h index > 28ee3e5920..e5d7774468 100644 --- > a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h +++ > b/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h @@ -73,6 +73,9 @@ > /* Not for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ > # define __STATFS_MATCHES_STATFS64 0 > > +/* And for getitimer, setitimer and rusage */ > +#define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 0 > + > /* Number of descriptors that can fit in an `fd_set'. */ > #define __FD_SETSIZE 1024 > > diff --git a/sysdeps/unix/sysv/linux/generic/bits/typesizes.h > b/sysdeps/unix/sysv/linux/generic/bits/typesizes.h index > 7c963e523e..48727c1da7 100644 --- > a/sysdeps/unix/sysv/linux/generic/bits/typesizes.h +++ > b/sysdeps/unix/sysv/linux/generic/bits/typesizes.h @@ -77,11 +77,18 @@ > > /* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ > # define __STATFS_MATCHES_STATFS64 1 > + > +/* And for getitimer, setitimer and rusage */ > +# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 > #else > # define __RLIM_T_MATCHES_RLIM64_T 0 > > # define __STATFS_MATCHES_STATFS64 0 > + > +/* And for getitimer, setitimer and rusage */ > +# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 0 > #endif > + > /* Number of descriptors that can fit in an `fd_set'. */ > #define __FD_SETSIZE 1024 > > diff --git a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h > b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h index > e775e460bb..2bc87c1079 100644 --- > a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h +++ > b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h @@ -82,10 +82,16 @@ > > /* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ > # define __STATFS_MATCHES_STATFS64 1 > + > +/* And for getitimer, setitimer and rusage */ > +# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 > #else > # define __RLIM_T_MATCHES_RLIM64_T 0 > > # define __STATFS_MATCHES_STATFS64 0 > + > +/* And for getitimer, setitimer and rusage */ > +# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 0 > #endif > > /* Number of descriptors that can fit in an `fd_set'. */ > diff --git a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h > b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h index > ac48c23e37..288a902b5f 100644 --- > a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h +++ > b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h @@ -76,10 +76,16 @@ > > /* And for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */ > # define __STATFS_MATCHES_STATFS64 1 > + > +/* And for getitimer, setitimer and rusage */ > +# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 > #else > # define __RLIM_T_MATCHES_RLIM64_T 0 > > # define __STATFS_MATCHES_STATFS64 0 > + > +/* And for getitimer, setitimer and rusage */ > +# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 0 > #endif > > /* Number of descriptors that can fit in an `fd_set'. */ > diff --git a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h > b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h index > 87c50a4f32..f68dfecc90 100644 --- > a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h +++ > b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h @@ -94,6 +94,9 @@ > # define __STATFS_MATCHES_STATFS64 0 > #endif > > +/* And for getitimer, setitimer and rusage */ > +#define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 > + > /* Number of descriptors that can fit in an `fd_set'. */ > #define __FD_SETSIZE 1024 > 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