[v3,13/24] y2038: Use a common definition for msqid_ds

Message ID 20210607203613.282543-14-adhemerval.zanella@linaro.org
State New
Headers show
Series
  • Add 64 bit time support on legacy ABIs
Related show

Commit Message

Adhemerval Zanella via Libc-alpha June 7, 2021, 8:36 p.m.
From: Lukasz Majewski <lukma@denx.de>


Instead of replicate the same definitions from struct_msqid64_ds.h
on the multiple struct_msqid_ds.h, use a common header which is included
when required (struct_msqid64_ds_helper.h).

The __USE_TIME_BITS64 is not defined internally yet, although the
internal header is used when building the 64-bit stat implementations.
---
 sysdeps/unix/sysv/linux/Makefile              |  3 +-
 .../sysv/linux/bits/types/struct_msqid64_ds.h | 10 +------
 .../bits/types/struct_msqid64_ds_helper.h     | 30 +++++++++++++++++++
 .../sysv/linux/bits/types/struct_msqid_ds.h   | 12 ++++++--
 .../linux/hppa/bits/types/struct_msqid_ds.h   | 12 ++++++--
 .../linux/mips/bits/types/struct_msqid_ds.h   | 18 +++++++----
 .../powerpc/bits/types/struct_msqid_ds.h      | 12 ++++++--
 .../linux/sparc/bits/types/struct_msqid_ds.h  | 12 ++++++--
 8 files changed, 81 insertions(+), 28 deletions(-)
 create mode 100644 sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h

-- 
2.30.2

Comments

Adhemerval Zanella via Libc-alpha June 14, 2021, 2:52 p.m. | #1
On 6/7/21 4:36 PM, Adhemerval Zanella wrote:
> From: Lukasz Majewski <lukma@denx.de>

> 

> Instead of replicate the same definitions from struct_msqid64_ds.h

> on the multiple struct_msqid_ds.h, use a common header which is included

> when required (struct_msqid64_ds_helper.h).

> 

> The __USE_TIME_BITS64 is not defined internally yet, although the

> internal header is used when building the 64-bit stat implementations.



No regressions on x86_64 and i686 and reviewed resulting ABI for correctness.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

Tested-by: carlos O'Donell <carlos@redhat.com>


> ---

>  sysdeps/unix/sysv/linux/Makefile              |  3 +-

>  .../sysv/linux/bits/types/struct_msqid64_ds.h | 10 +------

>  .../bits/types/struct_msqid64_ds_helper.h     | 30 +++++++++++++++++++

>  .../sysv/linux/bits/types/struct_msqid_ds.h   | 12 ++++++--

>  .../linux/hppa/bits/types/struct_msqid_ds.h   | 12 ++++++--

>  .../linux/mips/bits/types/struct_msqid_ds.h   | 18 +++++++----

>  .../powerpc/bits/types/struct_msqid_ds.h      | 12 ++++++--

>  .../linux/sparc/bits/types/struct_msqid_ds.h  | 12 ++++++--

>  8 files changed, 81 insertions(+), 28 deletions(-)

>  create mode 100644 sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h

> 

> diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile

> index c343d8c7d0..6715a4b623 100644

> --- a/sysdeps/unix/sysv/linux/Makefile

> +++ b/sysdeps/unix/sysv/linux/Makefile

> @@ -101,7 +101,8 @@ sysdep_headers += sys/mount.h sys/acct.h \

>  		  bits/types/struct_shmid_ds.h \

>  		  bits/ipc-perm.h \

>  		  bits/struct_stat.h \

> -		  bits/struct_stat_time64_helper.h

> +		  bits/struct_stat_time64_helper.h \

> +		  bits/types/struct_msqid64_ds_helper.h

>  

>  tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \

>  	 tst-quota tst-sync_file_range tst-sysconf-iov_max tst-ttyname \

> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h

> index 43e8cd7cfc..992734914a 100644

> --- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h

> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h

> @@ -25,14 +25,6 @@

>  #else

>  struct __msqid64_ds

>  {

> -  struct ipc_perm msg_perm;	/* structure describing operation permission */

> -  __time64_t msg_stime;		/* time of last msgsnd command */

> -  __time64_t msg_rtime;		/* time of last msgsnd command */

> -  __time64_t msg_ctime;		/* time of last change */

> -  __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */

> -  msgqnum_t msg_qnum;		/* number of messages currently on queue */

> -  msglen_t msg_qbytes;		/* max number of bytes allowed on queue */

> -  __pid_t msg_lspid;		/* pid of last msgsnd() */

> -  __pid_t msg_lrpid;		/* pid of last msgrcv() */

> +# include <bits/types/struct_msqid64_ds_helper.h>

>  };

>  #endif

> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h

> new file mode 100644

> index 0000000000..58da9f223b

> --- /dev/null

> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h

> @@ -0,0 +1,30 @@

> +/* Common definitions for struct msqid_ds with 64-bit time.

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

> +

> +  /* Content of internal __msqid64_ds.  */

> +  struct ipc_perm msg_perm;	/* structure describing operation permission */

> +  __time64_t msg_stime;		/* time of last msgsnd command */

> +  __time64_t msg_rtime;		/* time of last msgsnd command */

> +  __time64_t msg_ctime;		/* time of last change */

> +  __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */

> +  msgqnum_t msg_qnum;		/* number of messages currently on queue */

> +  msglen_t msg_qbytes;		/* max number of bytes allowed on queue */

> +  __pid_t msg_lspid;		/* pid of last msgsnd() */

> +  __pid_t msg_lrpid;		/* pid of last msgrcv() */

> +  unsigned long int __glibc_reserved4;

> +  unsigned long int __glibc_reserved5;


OK. Adds reserved entries. Matches kernel.

> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h

> index 1ed041ae30..ae10a48452 100644

> --- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h

> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h

> @@ -20,23 +20,28 @@

>  # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."

>  #endif

>  

> +#include <bits/types/time_t.h>

> +

>  /* Structure of record for one message inside the kernel.

>     The type `struct msg' is opaque.  */

>  struct msqid_ds

>  {

> +#ifdef __USE_TIME_BITS64

> +# include <bits/types/struct_msqid64_ds_helper.h>

> +#else

>    struct ipc_perm msg_perm;	/* structure describing operation permission */

> -#if __TIMESIZE == 32

> +# if __TIMESIZE == 32

>    __time_t msg_stime;		/* time of last msgsnd command */

>    unsigned long int __msg_stime_high;

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    unsigned long int __msg_rtime_high;

>    __time_t msg_ctime;		/* time of last change */

>    unsigned long int __msg_ctime_high;

> -#else

> +# else

>    __time_t msg_stime;		/* time of last msgsnd command */

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    __time_t msg_ctime;		/* time of last change */

> -#endif

> +# endif

>    __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */

>    msgqnum_t msg_qnum;		/* number of messages currently on queue */

>    msglen_t msg_qbytes;		/* max number of bytes allowed on queue */

> @@ -44,4 +49,5 @@ struct msqid_ds

>    __pid_t msg_lrpid;		/* pid of last msgrcv() */

>    __syscall_ulong_t __glibc_reserved4;

>    __syscall_ulong_t __glibc_reserved5;

> +#endif

>  };

> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h

> index d943edeb78..5b82dd7f5e 100644

> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h

> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h

> @@ -20,23 +20,28 @@

>  # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."

>  #endif

>  

> +#include <bits/types/time_t.h>

> +

>  /* Structure of record for one message inside the kernel.

>     The type `struct msg' is opaque.  */

>  struct msqid_ds

>  {

> +#ifdef __USE_TIME_BITS64

> +# include <bits/types/struct_msqid64_ds_helper.h>

> +#else

>    struct ipc_perm msg_perm;	/* structure describing operation permission */

> -#if __TIMESIZE == 32

> +# if __TIMESIZE == 32

>    unsigned long int __msg_stime_high;

>    __time_t msg_stime;		/* time of last msgsnd command */

>    unsigned long int __msg_rtime_high;

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    unsigned long int __msg_ctime_high;

>    __time_t msg_ctime;		/* time of last change */

> -#else

> +# else

>    __time_t msg_stime;		/* time of last msgsnd command */

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    __time_t msg_ctime;		/* time of last change */

> -#endif

> +# endif

>    __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */

>    msgqnum_t msg_qnum;		/* number of messages currently on queue */

>    msglen_t msg_qbytes;		/* max number of bytes allowed on queue */

> @@ -44,4 +49,5 @@ struct msqid_ds

>    __pid_t msg_lrpid;		/* pid of last msgrcv() */

>    __syscall_ulong_t __glibc_reserved4;

>    __syscall_ulong_t __glibc_reserved5;

> +#endif

>  };

> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h

> index bdca5e5fe2..00c1804245 100644

> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h

> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h

> @@ -20,32 +20,37 @@

>  # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."

>  #endif

>  

> +#include <bits/types/time_t.h>

> +

>  /* Structure of record for one message inside the kernel.

>     The type `struct msg' is opaque.  */

>  struct msqid_ds

>  {

> +#ifdef __USE_TIME_BITS64

> +# include <bits/types/struct_msqid64_ds_helper.h>

> +#else

>    struct ipc_perm msg_perm;	/* structure describing operation permission */

> -#if __TIMESIZE == 32

> -# ifdef __MIPSEL__

> +# if __TIMESIZE == 32

> +#  ifdef __MIPSEL__

>    __time_t msg_stime;		/* time of last msgsnd command */

>    unsigned long int __msg_stime_high;

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    unsigned long int __msg_rtime_high;

>    __time_t msg_ctime;		/* time of last change */

>    unsigned long int __msg_ctime_high;

> -# else

> +#  else

>    unsigned long int __msg_stime_high;

>    __time_t msg_stime;		/* time of last msgsnd command */

>    unsigned long int __msg_rtime_high;

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    unsigned long int __msg_ctime_high;

>    __time_t msg_ctime;		/* time of last change */

> -# endif

> -#else

> +#  endif

> +# else

>    __time_t msg_stime;		/* time of last msgsnd command */

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    __time_t msg_ctime;		/* time of last change */

> -#endif

> +# endif

>    __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */

>    msgqnum_t msg_qnum;		/* number of messages currently on queue */

>    msglen_t msg_qbytes;		/* max number of bytes allowed on queue */

> @@ -53,4 +58,5 @@ struct msqid_ds

>    __pid_t msg_lrpid;		/* pid of last msgrcv() */

>    __syscall_ulong_t __glibc_reserved4;

>    __syscall_ulong_t __glibc_reserved5;

> +#endif

>  };

> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h

> index 72842ed747..8c296d2342 100644

> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h

> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h

> @@ -20,23 +20,28 @@

>  # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."

>  #endif

>  

> +#include <bits/types/time_t.h>

> +

>  /* Structure of record for one message inside the kernel.

>     The type `struct msg' is opaque.  */

>  struct msqid_ds

>  {

> +#ifdef __USE_TIME_BITS64

> +# include <bits/types/struct_msqid64_ds_helper.h>

> +#else

>    struct ipc_perm msg_perm;	/* structure describing operation permission */

> -#if __TIMESIZE == 32

> +# if __TIMESIZE == 32

>    unsigned long int __msg_stime_high;

>    __time_t msg_stime;		/* time of last msgsnd command */

>    unsigned long int __msg_rtime_high;

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    unsigned long int __msg_ctime_high;

>    __time_t msg_ctime;		/* time of last change */

> -#else

> +# else

>    __time_t msg_stime;		/* time of last msgsnd command */

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    __time_t msg_ctime;		/* time of last change */

> -#endif

> +# endif

>    __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */

>    msgqnum_t msg_qnum;		/* number of messages currently on queue */

>    msglen_t msg_qbytes;		/* max number of bytes allowed on queue */

> @@ -44,4 +49,5 @@ struct msqid_ds

>    __pid_t msg_lrpid;		/* pid of last msgrcv() */

>    __syscall_ulong_t __glibc_reserved4;

>    __syscall_ulong_t __glibc_reserved5;

> +#endif

>  };

> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h

> index 22e1839de1..3c1b68ccc0 100644

> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h

> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h

> @@ -20,23 +20,28 @@

>  # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."

>  #endif

>  

> +#include <bits/types/time_t.h>

> +

>  /* Structure of record for one message inside the kernel.

>     The type `struct msg' is opaque.  */

>  struct msqid_ds

>  {

> +#ifdef __USE_TIME_BITS64

> +# include <bits/types/struct_msqid64_ds_helper.h>

> +#else

>    struct ipc_perm msg_perm;	/* structure describing operation permission */

> -#if __TIMESIZE == 32

> +# if __TIMESIZE == 32

>    unsigned long int __msg_stime_high;

>    __time_t msg_stime;		/* time of last msgsnd command */

>    unsigned long int __msg_rtime_high;

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    unsigned long int __msg_ctime_high;

>    __time_t msg_ctime;		/* time of last change */

> -#else

> +# else

>    __time_t msg_stime;		/* time of last msgsnd command */

>    __time_t msg_rtime;		/* time of last msgsnd command */

>    __time_t msg_ctime;		/* time of last change */

> -#endif

> +# endif

>    __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */

>    msgqnum_t msg_qnum;		/* number of messages currently on queue */

>    msglen_t msg_qbytes;		/* max number of bytes allowed on queue */

> @@ -44,4 +49,5 @@ struct msqid_ds

>    __pid_t msg_lrpid;		/* pid of last msgrcv() */

>    __syscall_ulong_t __glibc_reserved4;

>    __syscall_ulong_t __glibc_reserved5;

> +#endif

>  };

> 



-- 
Cheers,
Carlos.

Patch

diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index c343d8c7d0..6715a4b623 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -101,7 +101,8 @@  sysdep_headers += sys/mount.h sys/acct.h \
 		  bits/types/struct_shmid_ds.h \
 		  bits/ipc-perm.h \
 		  bits/struct_stat.h \
-		  bits/struct_stat_time64_helper.h
+		  bits/struct_stat_time64_helper.h \
+		  bits/types/struct_msqid64_ds_helper.h
 
 tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \
 	 tst-quota tst-sync_file_range tst-sysconf-iov_max tst-ttyname \
diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h
index 43e8cd7cfc..992734914a 100644
--- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h
+++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds.h
@@ -25,14 +25,6 @@ 
 #else
 struct __msqid64_ds
 {
-  struct ipc_perm msg_perm;	/* structure describing operation permission */
-  __time64_t msg_stime;		/* time of last msgsnd command */
-  __time64_t msg_rtime;		/* time of last msgsnd command */
-  __time64_t msg_ctime;		/* time of last change */
-  __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
-  msgqnum_t msg_qnum;		/* number of messages currently on queue */
-  msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
-  __pid_t msg_lspid;		/* pid of last msgsnd() */
-  __pid_t msg_lrpid;		/* pid of last msgrcv() */
+# include <bits/types/struct_msqid64_ds_helper.h>
 };
 #endif
diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h
new file mode 100644
index 0000000000..58da9f223b
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid64_ds_helper.h
@@ -0,0 +1,30 @@ 
+/* Common definitions for struct msqid_ds with 64-bit time.
+   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/>.  */
+
+  /* Content of internal __msqid64_ds.  */
+  struct ipc_perm msg_perm;	/* structure describing operation permission */
+  __time64_t msg_stime;		/* time of last msgsnd command */
+  __time64_t msg_rtime;		/* time of last msgsnd command */
+  __time64_t msg_ctime;		/* time of last change */
+  __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
+  msgqnum_t msg_qnum;		/* number of messages currently on queue */
+  msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
+  __pid_t msg_lspid;		/* pid of last msgsnd() */
+  __pid_t msg_lrpid;		/* pid of last msgrcv() */
+  unsigned long int __glibc_reserved4;
+  unsigned long int __glibc_reserved5;
diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
index 1ed041ae30..ae10a48452 100644
--- a/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
+++ b/sysdeps/unix/sysv/linux/bits/types/struct_msqid_ds.h
@@ -20,23 +20,28 @@ 
 # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
 #endif
 
+#include <bits/types/time_t.h>
+
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
+#ifdef __USE_TIME_BITS64
+# include <bits/types/struct_msqid64_ds_helper.h>
+#else
   struct ipc_perm msg_perm;	/* structure describing operation permission */
-#if __TIMESIZE == 32
+# if __TIMESIZE == 32
   __time_t msg_stime;		/* time of last msgsnd command */
   unsigned long int __msg_stime_high;
   __time_t msg_rtime;		/* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_ctime;		/* time of last change */
   unsigned long int __msg_ctime_high;
-#else
+# else
   __time_t msg_stime;		/* time of last msgsnd command */
   __time_t msg_rtime;		/* time of last msgsnd command */
   __time_t msg_ctime;		/* time of last change */
-#endif
+# endif
   __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;		/* number of messages currently on queue */
   msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
@@ -44,4 +49,5 @@  struct msqid_ds
   __pid_t msg_lrpid;		/* pid of last msgrcv() */
   __syscall_ulong_t __glibc_reserved4;
   __syscall_ulong_t __glibc_reserved5;
+#endif
 };
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
index d943edeb78..5b82dd7f5e 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_msqid_ds.h
@@ -20,23 +20,28 @@ 
 # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
 #endif
 
+#include <bits/types/time_t.h>
+
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
+#ifdef __USE_TIME_BITS64
+# include <bits/types/struct_msqid64_ds_helper.h>
+#else
   struct ipc_perm msg_perm;	/* structure describing operation permission */
-#if __TIMESIZE == 32
+# if __TIMESIZE == 32
   unsigned long int __msg_stime_high;
   __time_t msg_stime;		/* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_rtime;		/* time of last msgsnd command */
   unsigned long int __msg_ctime_high;
   __time_t msg_ctime;		/* time of last change */
-#else
+# else
   __time_t msg_stime;		/* time of last msgsnd command */
   __time_t msg_rtime;		/* time of last msgsnd command */
   __time_t msg_ctime;		/* time of last change */
-#endif
+# endif
   __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;		/* number of messages currently on queue */
   msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
@@ -44,4 +49,5 @@  struct msqid_ds
   __pid_t msg_lrpid;		/* pid of last msgrcv() */
   __syscall_ulong_t __glibc_reserved4;
   __syscall_ulong_t __glibc_reserved5;
+#endif
 };
diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
index bdca5e5fe2..00c1804245 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_msqid_ds.h
@@ -20,32 +20,37 @@ 
 # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
 #endif
 
+#include <bits/types/time_t.h>
+
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
+#ifdef __USE_TIME_BITS64
+# include <bits/types/struct_msqid64_ds_helper.h>
+#else
   struct ipc_perm msg_perm;	/* structure describing operation permission */
-#if __TIMESIZE == 32
-# ifdef __MIPSEL__
+# if __TIMESIZE == 32
+#  ifdef __MIPSEL__
   __time_t msg_stime;		/* time of last msgsnd command */
   unsigned long int __msg_stime_high;
   __time_t msg_rtime;		/* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_ctime;		/* time of last change */
   unsigned long int __msg_ctime_high;
-# else
+#  else
   unsigned long int __msg_stime_high;
   __time_t msg_stime;		/* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_rtime;		/* time of last msgsnd command */
   unsigned long int __msg_ctime_high;
   __time_t msg_ctime;		/* time of last change */
-# endif
-#else
+#  endif
+# else
   __time_t msg_stime;		/* time of last msgsnd command */
   __time_t msg_rtime;		/* time of last msgsnd command */
   __time_t msg_ctime;		/* time of last change */
-#endif
+# endif
   __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;		/* number of messages currently on queue */
   msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
@@ -53,4 +58,5 @@  struct msqid_ds
   __pid_t msg_lrpid;		/* pid of last msgrcv() */
   __syscall_ulong_t __glibc_reserved4;
   __syscall_ulong_t __glibc_reserved5;
+#endif
 };
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
index 72842ed747..8c296d2342 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_msqid_ds.h
@@ -20,23 +20,28 @@ 
 # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
 #endif
 
+#include <bits/types/time_t.h>
+
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
+#ifdef __USE_TIME_BITS64
+# include <bits/types/struct_msqid64_ds_helper.h>
+#else
   struct ipc_perm msg_perm;	/* structure describing operation permission */
-#if __TIMESIZE == 32
+# if __TIMESIZE == 32
   unsigned long int __msg_stime_high;
   __time_t msg_stime;		/* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_rtime;		/* time of last msgsnd command */
   unsigned long int __msg_ctime_high;
   __time_t msg_ctime;		/* time of last change */
-#else
+# else
   __time_t msg_stime;		/* time of last msgsnd command */
   __time_t msg_rtime;		/* time of last msgsnd command */
   __time_t msg_ctime;		/* time of last change */
-#endif
+# endif
   __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;		/* number of messages currently on queue */
   msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
@@ -44,4 +49,5 @@  struct msqid_ds
   __pid_t msg_lrpid;		/* pid of last msgrcv() */
   __syscall_ulong_t __glibc_reserved4;
   __syscall_ulong_t __glibc_reserved5;
+#endif
 };
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
index 22e1839de1..3c1b68ccc0 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_msqid_ds.h
@@ -20,23 +20,28 @@ 
 # error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
 #endif
 
+#include <bits/types/time_t.h>
+
 /* Structure of record for one message inside the kernel.
    The type `struct msg' is opaque.  */
 struct msqid_ds
 {
+#ifdef __USE_TIME_BITS64
+# include <bits/types/struct_msqid64_ds_helper.h>
+#else
   struct ipc_perm msg_perm;	/* structure describing operation permission */
-#if __TIMESIZE == 32
+# if __TIMESIZE == 32
   unsigned long int __msg_stime_high;
   __time_t msg_stime;		/* time of last msgsnd command */
   unsigned long int __msg_rtime_high;
   __time_t msg_rtime;		/* time of last msgsnd command */
   unsigned long int __msg_ctime_high;
   __time_t msg_ctime;		/* time of last change */
-#else
+# else
   __time_t msg_stime;		/* time of last msgsnd command */
   __time_t msg_rtime;		/* time of last msgsnd command */
   __time_t msg_ctime;		/* time of last change */
-#endif
+# endif
   __syscall_ulong_t __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;		/* number of messages currently on queue */
   msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
@@ -44,4 +49,5 @@  struct msqid_ds
   __pid_t msg_lrpid;		/* pid of last msgrcv() */
   __syscall_ulong_t __glibc_reserved4;
   __syscall_ulong_t __glibc_reserved5;
+#endif
 };