diff --git a/sysdeps/unix/sysv/linux/x86/bits/shm-pad.h b/bits/timesize.h
similarity index 68%
rename from sysdeps/unix/sysv/linux/x86/bits/shm-pad.h
rename to bits/timesize.h
index 277a70fe6c..cc47ff165f 100644
--- a/sysdeps/unix/sysv/linux/x86/bits/shm-pad.h
+++ b/bits/timesize.h
@@ -1,4 +1,4 @@
-/* Define where padding goes in struct shmid_ds.  x86 version.
+/* Bit size of the time_t type at glibc build time, general case.
    Copyright (C) 2018 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -16,15 +16,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifndef _SYS_SHM_H
-# error "Never use <bits/shm-pad.h> directly; include <sys/shm.h> instead."
-#endif
+#include <bits/wordsize.h>
 
-#ifdef __x86_64__
-# define __SHM_PAD_AFTER_TIME 0
-#else
-# define __SHM_PAD_AFTER_TIME 1
-#endif
-#define __SHM_PAD_BEFORE_TIME 0
-#define __SHM_SEGSZ_AFTER_TIME 0
-#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ 0
+/* Size in bits of the 'time_t' type of the default ABI.  */
+#define __TIMESIZE	__WORDSIZE
diff --git a/stdlib/Makefile b/stdlib/Makefile
index 01194bbf7c..1773a341b5 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -24,7 +24,7 @@ include ../Makeconfig
 
 headers	:= stdlib.h bits/stdlib.h bits/stdlib-ldbl.h bits/stdlib-float.h      \
 	   monetary.h bits/monetary-ldbl.h				      \
-	   inttypes.h stdint.h bits/wordsize.h				      \
+	   inttypes.h stdint.h bits/wordsize.h bits/timesize.h		      \
 	   errno.h sys/errno.h bits/errno.h bits/types/error_t.h	      \
 	   ucontext.h sys/ucontext.h bits/indirect-return.h		      \
 	   alloca.h fmtmsg.h						      \
diff --git a/sysdeps/unix/sysv/linux/bits/msq-pad.h b/sysdeps/unix/sysv/linux/bits/msq-pad.h
index 97dee0beff..53f367dfa2 100644
--- a/sysdeps/unix/sysv/linux/bits/msq-pad.h
+++ b/sysdeps/unix/sysv/linux/bits/msq-pad.h
@@ -20,12 +20,12 @@
 # error "Never use <bits/msq-pad.h> directly; include <sys/msg.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 /* On most architectures, padding goes after time fields for 32-bit
    systems and is omitted for 64-bit systems.  Some architectures pad
    before time fields instead, or omit padding despite being
    32-bit.  */
 
-#define __MSQ_PAD_AFTER_TIME (__WORDSIZE == 32)
+#define __MSQ_PAD_AFTER_TIME (__TIMESIZE == 32)
 #define __MSQ_PAD_BEFORE_TIME 0
diff --git a/sysdeps/unix/sysv/linux/bits/sem-pad.h b/sysdeps/unix/sysv/linux/bits/sem-pad.h
index c57fea4ac8..488b591d5a 100644
--- a/sysdeps/unix/sysv/linux/bits/sem-pad.h
+++ b/sysdeps/unix/sysv/linux/bits/sem-pad.h
@@ -20,7 +20,7 @@
 # error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 /* On most architectures, padding goes after time fields for 32-bit
    systems and is omitted for 64-bit systems.  Some architectures pad
@@ -29,5 +29,5 @@
    used for struct semid64_ds in <asm/sembuf.h>, as glibc does not do
    layout conversions for this structure.  */
 
-#define __SEM_PAD_AFTER_TIME (__WORDSIZE == 32)
+#define __SEM_PAD_AFTER_TIME (__TIMESIZE == 32)
 #define __SEM_PAD_BEFORE_TIME 0
diff --git a/sysdeps/unix/sysv/linux/bits/shm-pad.h b/sysdeps/unix/sysv/linux/bits/shm-pad.h
index 9233c95a9f..d3cc5ebde6 100644
--- a/sysdeps/unix/sysv/linux/bits/shm-pad.h
+++ b/sysdeps/unix/sysv/linux/bits/shm-pad.h
@@ -20,7 +20,7 @@
 # error "Never use <bits/shm-pad.h> directly; include <sys/shm.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 /* On most architectures, padding goes after time fields for 32-bit
    systems and is omitted for 64-bit systems.  Some architectures pad
@@ -31,7 +31,7 @@
    layout used for struct shmid64_ds in <asm/shmbuf.h>, as glibc does
    not do layout conversions for this structure.  */
 
-#define __SHM_PAD_AFTER_TIME (__WORDSIZE == 32)
+#define __SHM_PAD_AFTER_TIME (__TIMESIZE == 32)
 #define __SHM_PAD_BEFORE_TIME 0
 #define __SHM_SEGSZ_AFTER_TIME 0
 #define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ 0
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/msq-pad.h b/sysdeps/unix/sysv/linux/hppa/bits/msq-pad.h
index 10b26b7ea6..05db3fd65b 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/msq-pad.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/msq-pad.h
@@ -20,7 +20,7 @@
 # error "Never use <bits/msq-pad.h> directly; include <sys/msg.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 #define __MSQ_PAD_AFTER_TIME 0
-#define __MSQ_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __MSQ_PAD_BEFORE_TIME (__TIMESIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h b/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h
index a938c2c92b..f250f64426 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h
@@ -20,7 +20,7 @@
 # error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 #define __SEM_PAD_AFTER_TIME 0
-#define __SEM_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h b/sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h
index 6a9c5ddce2..8764bde08b 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h
@@ -20,9 +20,9 @@
 # error "Never use <bits/shm-pad.h> directly; include <sys/shm.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 #define __SHM_PAD_AFTER_TIME 0
-#define __SHM_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __SHM_PAD_BEFORE_TIME (__TIMESIZE == 32)
 #define __SHM_SEGSZ_AFTER_TIME 1
-#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ (__WORDSIZE == 32)
+#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ (__TIMESIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/mips/bits/msq-pad.h b/sysdeps/unix/sysv/linux/mips/bits/msq-pad.h
index 1ddfb0d271..530babe3f9 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/msq-pad.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/msq-pad.h
@@ -20,12 +20,12 @@
 # error "Never use <bits/msq-pad.h> directly; include <sys/msg.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 #ifdef __MIPSEL__
-# define __MSQ_PAD_AFTER_TIME (__WORDSIZE == 32)
+# define __MSQ_PAD_AFTER_TIME (__TIMESIZE == 32)
 # define __MSQ_PAD_BEFORE_TIME 0
 #else
 # define __MSQ_PAD_AFTER_TIME 0
-# define __MSQ_PAD_BEFORE_TIME (__WORDSIZE == 32)
+# define __MSQ_PAD_BEFORE_TIME (__TIMESIZE == 32)
 #endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/msq-pad.h b/sysdeps/unix/sysv/linux/powerpc/bits/msq-pad.h
index 9680176abb..d19dfd5126 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/msq-pad.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/msq-pad.h
@@ -20,7 +20,7 @@
 # error "Never use <bits/msq-pad.h> directly; include <sys/msg.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 #define __MSQ_PAD_AFTER_TIME 0
-#define __MSQ_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __MSQ_PAD_BEFORE_TIME (__TIMESIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h b/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h
index d4c9a93956..d7571cc755 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h
@@ -20,7 +20,7 @@
 # error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 #define __SEM_PAD_AFTER_TIME 0
-#define __SEM_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h b/sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h
index 69a7e4a648..c8c2d44775 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h
@@ -20,9 +20,9 @@
 # error "Never use <bits/shm-pad.h> directly; include <sys/shm.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 #define __SHM_PAD_AFTER_TIME 0
-#define __SHM_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __SHM_PAD_BEFORE_TIME (__TIMESIZE == 32)
 #define __SHM_SEGSZ_AFTER_TIME 1
-#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ (__WORDSIZE == 32)
+#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ (__TIMESIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/msq-pad.h b/sysdeps/unix/sysv/linux/sparc/bits/msq-pad.h
index 3dfeb07a48..72324e8428 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/msq-pad.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/msq-pad.h
@@ -20,7 +20,7 @@
 # error "Never use <bits/msq-pad.h> directly; include <sys/msg.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 #define __MSQ_PAD_AFTER_TIME 0
-#define __MSQ_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __MSQ_PAD_BEFORE_TIME (__TIMESIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h b/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h
index b85f6b70a2..27266d48d5 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h
@@ -20,7 +20,7 @@
 # error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 #define __SEM_PAD_AFTER_TIME 0
-#define __SEM_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h b/sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h
index c4d0c2feb8..fa3cc18a05 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h
@@ -20,9 +20,9 @@
 # error "Never use <bits/shm-pad.h> directly; include <sys/shm.h> instead."
 #endif
 
-#include <bits/wordsize.h>
+#include <bits/timesize.h>
 
 #define __SHM_PAD_AFTER_TIME 0
-#define __SHM_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __SHM_PAD_BEFORE_TIME (__TIMESIZE == 32)
 #define __SHM_SEGSZ_AFTER_TIME 1
 #define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ 0
diff --git a/sysdeps/unix/sysv/linux/x86/bits/msq-pad.h b/sysdeps/unix/sysv/linux/x86/bits/timesize.h
similarity index 74%
rename from sysdeps/unix/sysv/linux/x86/bits/msq-pad.h
rename to sysdeps/unix/sysv/linux/x86/bits/timesize.h
index 5d46956c77..8b88ab84b0 100644
--- a/sysdeps/unix/sysv/linux/x86/bits/msq-pad.h
+++ b/sysdeps/unix/sysv/linux/x86/bits/timesize.h
@@ -1,4 +1,4 @@
-/* Define where padding goes in struct msqid_ds.  x86 version.
+/* Bit size of the time_t type at glibc build time, x86-64 and x32 case.
    Copyright (C) 2018 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -16,13 +16,10 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifndef _SYS_MSG_H
-# error "Never use <bits/msq-pad.h> directly; include <sys/msg.h> instead."
-#endif
-
-#ifdef __x86_64__
-# define __MSQ_PAD_AFTER_TIME 0
+#if defined __x86_64__ && defined __ILP32__
+/* For x32, time is 64-bit even though word size is 32-bit.  */
+# define __TIMESIZE	64
 #else
-# define __MSQ_PAD_AFTER_TIME 1
+/* For others, time size is word size.  */
+# define __TIMESIZE	__WORDSIZE
 #endif
-#define __MSQ_PAD_BEFORE_TIME 0
