generic/typesizes.h: Add support for 32-bit arches with 64-bit types

Update the default typesizes.h to match the new kernel sizes for 32-bit
architectures with a 64-bit time_t and friends. This follows the sizes
used for RV32 which is a y2038 safe architecture added after Linux 5.1.

Reviewed-by: Vineet Gupta <vgupta@synopsys.com>
Tested-by: Vineet Gupta <vgupta@synopsys.com>
This commit is contained in:
Alistair Francis 2020-02-14 11:02:29 -08:00
parent 05332ac38b
commit 07fe93cd98
1 changed files with 23 additions and 10 deletions

View File

@ -26,31 +26,44 @@
/* See <bits/types.h> for the meaning of these macros. This file exists so /* See <bits/types.h> for the meaning of these macros. This file exists so
that <bits/types.h> need not vary across different GNU platforms. */ that <bits/types.h> need not vary across different GNU platforms. */
#if __TIMESIZE == 64 && __WORDSIZE == 32
/* These are the "new" y2038 types defined for architectures added after
the 5.1 kernel. */
# define __INO_T_TYPE __UQUAD_TYPE
# define __OFF_T_TYPE __SQUAD_TYPE
# define __RLIM_T_TYPE __UQUAD_TYPE
# define __BLKCNT_T_TYPE __SQUAD_TYPE
# define __FSBLKCNT_T_TYPE __UQUAD_TYPE
# define __FSFILCNT_T_TYPE __UQUAD_TYPE
# define __TIME_T_TYPE __SQUAD_TYPE
# define __SUSECONDS_T_TYPE __SQUAD_TYPE
#else
# define __INO_T_TYPE __ULONGWORD_TYPE
# define __OFF_T_TYPE __SLONGWORD_TYPE
# define __RLIM_T_TYPE __ULONGWORD_TYPE
# define __BLKCNT_T_TYPE __SLONGWORD_TYPE
# define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE
# define __FSFILCNT_T_TYPE __ULONGWORD_TYPE
# define __TIME_T_TYPE __SLONGWORD_TYPE
# define __SUSECONDS_T_TYPE __SLONGWORD_TYPE
#endif
#define __DEV_T_TYPE __UQUAD_TYPE #define __DEV_T_TYPE __UQUAD_TYPE
#define __UID_T_TYPE __U32_TYPE #define __UID_T_TYPE __U32_TYPE
#define __GID_T_TYPE __U32_TYPE #define __GID_T_TYPE __U32_TYPE
#define __INO_T_TYPE __ULONGWORD_TYPE
#define __INO64_T_TYPE __UQUAD_TYPE #define __INO64_T_TYPE __UQUAD_TYPE
#define __MODE_T_TYPE __U32_TYPE #define __MODE_T_TYPE __U32_TYPE
#define __NLINK_T_TYPE __U32_TYPE #define __NLINK_T_TYPE __U32_TYPE
#define __OFF_T_TYPE __SLONGWORD_TYPE
#define __OFF64_T_TYPE __SQUAD_TYPE #define __OFF64_T_TYPE __SQUAD_TYPE
#define __PID_T_TYPE __S32_TYPE #define __PID_T_TYPE __S32_TYPE
#define __RLIM_T_TYPE __ULONGWORD_TYPE
#define __RLIM64_T_TYPE __UQUAD_TYPE #define __RLIM64_T_TYPE __UQUAD_TYPE
#define __BLKCNT_T_TYPE __SLONGWORD_TYPE
#define __BLKCNT64_T_TYPE __SQUAD_TYPE #define __BLKCNT64_T_TYPE __SQUAD_TYPE
#define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE
#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE #define __FSBLKCNT64_T_TYPE __UQUAD_TYPE
#define __FSFILCNT_T_TYPE __ULONGWORD_TYPE
#define __FSFILCNT64_T_TYPE __UQUAD_TYPE #define __FSFILCNT64_T_TYPE __UQUAD_TYPE
#define __FSWORD_T_TYPE __SWORD_TYPE #define __FSWORD_T_TYPE __SWORD_TYPE
#define __ID_T_TYPE __U32_TYPE #define __ID_T_TYPE __U32_TYPE
#define __CLOCK_T_TYPE __SLONGWORD_TYPE #define __CLOCK_T_TYPE __SLONGWORD_TYPE
#define __TIME_T_TYPE __SLONGWORD_TYPE
#define __USECONDS_T_TYPE __U32_TYPE #define __USECONDS_T_TYPE __U32_TYPE
#define __SUSECONDS_T_TYPE __SLONGWORD_TYPE
#define __SUSECONDS64_T_TYPE __SQUAD_TYPE #define __SUSECONDS64_T_TYPE __SQUAD_TYPE
#define __DADDR_T_TYPE __S32_TYPE #define __DADDR_T_TYPE __S32_TYPE
#define __KEY_T_TYPE __S32_TYPE #define __KEY_T_TYPE __S32_TYPE
@ -63,7 +76,7 @@
#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE #define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE
#define __CPU_MASK_TYPE __ULONGWORD_TYPE #define __CPU_MASK_TYPE __ULONGWORD_TYPE
#ifdef __LP64__ #if defined __LP64__ || (__TIMESIZE == 64 && __WORDSIZE == 32)
/* Tell the libc code that off_t and off64_t are actually the same type /* Tell the libc code that off_t and off64_t are actually the same type
for all ABI purposes, even if possibly expressed as different base types for all ABI purposes, even if possibly expressed as different base types
for C type-checking purposes. */ for C type-checking purposes. */
@ -79,7 +92,7 @@
# define __STATFS_MATCHES_STATFS64 1 # define __STATFS_MATCHES_STATFS64 1
/* And for getitimer, setitimer and rusage */ /* And for getitimer, setitimer and rusage */
# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1 # define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 (__WORDSIZE == 64)
#else #else
# define __RLIM_T_MATCHES_RLIM64_T 0 # define __RLIM_T_MATCHES_RLIM64_T 0