public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Carlos O'Donell <carlos@redhat.com>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>,
	libc-alpha@sourceware.org
Subject: Re: [PATCH v2 16/25] y2038: Use a common definition for shmid_ds
Date: Fri, 4 Jun 2021 15:38:27 -0400	[thread overview]
Message-ID: <a60e034d-a2ba-83a1-1eb3-6f9ec8884b45@redhat.com> (raw)
In-Reply-To: <20210518205613.1487824-17-adhemerval.zanella@linaro.org>

On 5/18/21 4:56 PM, Adhemerval Zanella wrote:
> Instead of replicate the same definitions from struct_shmid64_ds.h
> on the multiple struct_shmid_ds.h, use a common header which is included
> when required (struct_shmid64_ds_helper.h).
> 
> The __USE_TIME_BITS64 is not defined internally yet, although the
> internal header is used when building the 64-bit semctl implementation.

Requesting a v3 please.

Similar to 14/25, we should add the __glibc_reserved* members to the
structures to preserve maximum compatibility with the kernel structure.

Before adding the reserved members the 64-bit time_t struct shmid_ds
is only 76 bytes on i686, and 84 bytes in the original when the types
should not really change in size. Adding the reserved entries makes
them match again.

We could add some static asserts if we really want to be thorough about
the alignment of __time64_t.

> ---
>  sysdeps/unix/sysv/linux/Makefile              |  3 ++-
>  .../sysv/linux/bits/types/struct_shmid64_ds.h |  9 +------
>  .../bits/types/struct_shmid64_ds_helper.h     | 26 +++++++++++++++++++
>  .../sysv/linux/bits/types/struct_shmid_ds.h   | 10 ++++---
>  .../linux/hppa/bits/types/struct_shmid_ds.h   | 10 ++++---
>  .../linux/mips/bits/types/struct_shmid_ds.h   | 14 ++++++----
>  .../powerpc/bits/types/struct_shmid_ds.h      | 10 ++++---
>  .../linux/sparc/bits/types/struct_shmid_ds.h  | 10 ++++---
>  8 files changed, 66 insertions(+), 26 deletions(-)
>  create mode 100644 sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds_helper.h
> 
> diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
> index b599c423ed..747d1083e0 100644
> --- a/sysdeps/unix/sysv/linux/Makefile
> +++ b/sysdeps/unix/sysv/linux/Makefile
> @@ -103,7 +103,8 @@ sysdep_headers += sys/mount.h sys/acct.h \
>  		  bits/struct_stat.h \
>  		  bits/struct_stat_time64_helper.h \
>  		  bits/types/struct_msqid64_ds_helper.h \
> -		  bits/types/struct_semid64_ds_helper.h
> +		  bits/types/struct_semid64_ds_helper.h \
> +		  bits/types/struct_shmid64_ds_helper.h

OK. Add new helper.

>  
>  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_shmid64_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds.h
> index 71100db1b5..a4af8cc5f4 100644
> --- a/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds.h
> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds.h
> @@ -25,13 +25,6 @@
>  #else
>  struct __shmid64_ds
>  {
> -  struct ipc_perm shm_perm;	/* operation permission struct */
> -  size_t shm_segsz;		/* size of segment in bytes */
> -  __time64_t shm_atime;		/* time of last shmat() */
> -  __time64_t shm_dtime;		/* time of last shmdt() */
> -  __time64_t shm_ctime;		/* time of last change by shmctl() */
> -  __pid_t shm_cpid;		/* pid of creator */
> -  __pid_t shm_lpid;		/* pid of last shmop */
> -  shmatt_t shm_nattch;		/* number of current attaches */
> +# include <bits/types/struct_shmid64_ds_helper.h>

OK. Use helper.

>  };
>  #endif
> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds_helper.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds_helper.h
> new file mode 100644
> index 0000000000..8ab0937c4d
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid64_ds_helper.h
> @@ -0,0 +1,26 @@
> +/* Common definitions for struct semid_ds with 64 bit time.
> +   Copyright (C) 2020-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/>.  */
> +
> +  struct ipc_perm shm_perm;	/* operation permission struct */
> +  size_t shm_segsz;		/* size of segment in bytes */
> +  __time64_t shm_atime;		/* time of last shmat() */
> +  __time64_t shm_dtime;		/* time of last shmdt() */
> +  __time64_t shm_ctime;		/* time of last change by shmctl() */
> +  __pid_t shm_cpid;		/* pid of creator */
> +  __pid_t shm_lpid;		/* pid of last shmop */
> +  shmatt_t shm_nattch;		/* number of current attaches */

This looks good but needs __glibc_reserved5 and __glibc_reserved6 entries.

> diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
> index 2bd587d2b0..5f8ac6257b 100644
> --- a/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
> +++ b/sysdeps/unix/sysv/linux/bits/types/struct_shmid_ds.h
> @@ -23,23 +23,27 @@
>  /* Data structure describing a shared memory segment.  */
>  struct shmid_ds
>    {
> +#ifdef __USE_TIME_BITS64
> +# include <bits/types/struct_shmid64_ds_helper.h>

OK. Use helper.

> +#else
>      struct ipc_perm shm_perm;		/* operation permission struct */
>      size_t shm_segsz;			/* size of segment in bytes */
> -#if __TIMESIZE == 32
> +# if __TIMESIZE == 32
>      __time_t shm_atime;			/* time of last shmat() */
>      unsigned long int __shm_atime_high;
>      __time_t shm_dtime;			/* time of last shmdt() */
>      unsigned long int __shm_dtime_high;
>      __time_t shm_ctime;			/* time of last change by shmctl() */
>      unsigned long int __shm_ctime_high;
> -#else
> +# else
>      __time_t shm_atime;			/* time of last shmat() */
>      __time_t shm_dtime;			/* time of last shmdt() */
>      __time_t shm_ctime;			/* time of last change by shmctl() */
> -#endif
> +# endif
>      __pid_t shm_cpid;			/* pid of creator */
>      __pid_t shm_lpid;			/* pid of last shmop */
>      shmatt_t shm_nattch;		/* number of current attaches */
>      __syscall_ulong_t __glibc_reserved5;
>      __syscall_ulong_t __glibc_reserved6;
> +#endif
>    };
> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
> index 47ff80ebb0..7831fd7340 100644
> --- a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
> +++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_shmid_ds.h
> @@ -23,8 +23,11 @@
>  /* Data structure describing a shared memory segment.  */
>  struct shmid_ds
>    {
> +#ifdef __USE_TIME_BITS64
> +# include <bits/types/struct_shmid64_ds_helper.h>

OK. Use helper.

> +#else
>      struct ipc_perm shm_perm;		/* operation permission struct */
> -#if __TIMESIZE == 32
> +# if __TIMESIZE == 32
>      unsigned long int __shm_atime_high;
>      __time_t shm_atime;			/* time of last shmat() */
>      unsigned long int __shm_dtime_high;
> @@ -32,15 +35,16 @@ struct shmid_ds
>      unsigned long int __shm_ctime_high;
>      __time_t shm_ctime;			/* time of last change by shmctl() */
>      unsigned long int __glibc_reserved4;
> -#else
> +# else
>      __time_t shm_atime;			/* time of last shmat() */
>      __time_t shm_dtime;			/* time of last shmdt() */
>      __time_t shm_ctime;			/* time of last change by shmctl() */
> -#endif
> +# endif
>      size_t shm_segsz;			/* size of segment in bytes */
>      __pid_t shm_cpid;			/* pid of creator */
>      __pid_t shm_lpid;			/* pid of last shmop */
>      shmatt_t shm_nattch;		/* number of current attaches */
>      __syscall_ulong_t __glibc_reserved5;
>      __syscall_ulong_t __glibc_reserved6;
> +#endif
>    };
> diff --git a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
> index 7f8f3b9c51..0691a610ae 100644
> --- a/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
> +++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_shmid_ds.h
> @@ -23,27 +23,31 @@
>  /* Data structure describing a shared memory segment.  */
>  struct shmid_ds
>    {
> +#ifdef __USE_TIME_BITS64
> +# include <bits/types/struct_shmid64_ds_helper.h>

OK. Use helper.

> +#else
>      struct ipc_perm shm_perm;		/* operation permission struct */
>      size_t shm_segsz;			/* size of segment in bytes */
> -#if __TIMESIZE == 32
> +# if __TIMESIZE == 32
>      __time_t shm_atime;			/* time of last shmat() */
>      __time_t shm_dtime;			/* time of last shmdt() */
>      __time_t shm_ctime;			/* time of last change by shmctl() */
> -#else
> +# else
>      __time_t shm_atime;			/* time of last shmat() */
>      __time_t shm_dtime;			/* time of last shmdt() */
>      __time_t shm_ctime;			/* time of last change by shmctl() */
> -#endif
> +# endif
>      __pid_t shm_cpid;			/* pid of creator */
>      __pid_t shm_lpid;			/* pid of last shmop */
>      shmatt_t shm_nattch;		/* number of current attaches */
> -#if __TIMESIZE == 32
> +# if __TIMESIZE == 32
>      unsigned short int __shm_atime_high;
>      unsigned short int __shm_dtime_high;
>      unsigned short int __shm_ctime_high;
>      unsigned short int __glibc_reserved4;
> -#else
> +# else
>      __syscall_ulong_t __glibc_reserved5;
>      __syscall_ulong_t __glibc_reserved6;
> +# endif
>  #endif
>    };
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
> index d71bdf1ecf..316d43ec99 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_shmid_ds.h
> @@ -23,8 +23,11 @@
>  /* Data structure describing a shared memory segment.  */
>  struct shmid_ds
>    {
> +#ifdef __USE_TIME_BITS64
> +# include <bits/types/struct_shmid64_ds_helper.h>

OK. Use helper.

> +#else
>      struct ipc_perm shm_perm;		/* operation permission struct */
> -#if __TIMESIZE == 32
> +# if __TIMESIZE == 32
>      unsigned long int __shm_atime_high;
>      __time_t shm_atime;			/* time of last shmat() */
>      unsigned long int __shm_dtime_high;
> @@ -32,15 +35,16 @@ struct shmid_ds
>      unsigned long int __shm_ctime_high;
>      __time_t shm_ctime;			/* time of last change by shmctl() */
>      unsigned long int __glibc_reserved4;
> -#else
> +# else
>      __time_t shm_atime;			/* time of last shmat() */
>      __time_t shm_dtime;			/* time of last shmdt() */
>      __time_t shm_ctime;			/* time of last change by shmctl() */
> -#endif
> +# endif
>      size_t shm_segsz;			/* size of segment in bytes */
>      __pid_t shm_cpid;			/* pid of creator */
>      __pid_t shm_lpid;			/* pid of last shmop */
>      shmatt_t shm_nattch;		/* number of current attaches */
>      __syscall_ulong_t __glibc_reserved5;
>      __syscall_ulong_t __glibc_reserved6;
> +#endif
>    };
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
> index 767099803f..86f0cedac3 100644
> --- a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
> +++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_shmid_ds.h
> @@ -23,23 +23,27 @@
>  /* Data structure describing a shared memory segment.  */
>  struct shmid_ds
>    {
> +#ifdef __USE_TIME_BITS64
> +# include <bits/types/struct_shmid64_ds_helper.h>

OK. Use helper.

> +#else
>      struct ipc_perm shm_perm;		/* operation permission struct */
> -#if __TIMESIZE == 32
> +# if __TIMESIZE == 32
>      unsigned long int __shm_atime_high;
>      __time_t shm_atime;			/* time of last shmat() */
>      unsigned long int __shm_dtime_high;
>      __time_t shm_dtime;			/* time of last shmdt() */
>      unsigned long int __shm_ctime_high;
>      __time_t shm_ctime;			/* time of last change by shmctl() */
> -#else
> +# else
>      __time_t shm_atime;			/* time of last shmat() */
>      __time_t shm_dtime;			/* time of last shmdt() */
>      __time_t shm_ctime;			/* time of last change by shmctl() */
> -#endif
> +# endif
>      size_t shm_segsz;			/* size of segment in bytes */
>      __pid_t shm_cpid;			/* pid of creator */
>      __pid_t shm_lpid;			/* pid of last shmop */
>      shmatt_t shm_nattch;		/* number of current attaches */
>      __syscall_ulong_t __glibc_reserved5;
>      __syscall_ulong_t __glibc_reserved6;
> +#endif
>    };
> 


-- 
Cheers,
Carlos.


  parent reply	other threads:[~2021-06-04 19:38 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-18 20:55 [PATCH v2 00/25] Add 64 bit time support on legacy ABIs Adhemerval Zanella
2021-05-18 20:55 ` [PATCH v2 01/25] linux: mips: Split libpthread.abilist in n32 and n64 Adhemerval Zanella
2021-05-19  8:24   ` Lukasz Majewski
2021-05-20  6:38   ` Florian Weimer
2021-05-20 10:43     ` Adhemerval Zanella
2021-06-04 19:29   ` Carlos O'Donell
2021-05-18 20:55 ` [PATCH v2 02/25] linux: mips: Split librt.abilist " Adhemerval Zanella
2021-05-19  8:25   ` Lukasz Majewski
2021-06-04 19:29   ` Carlos O'Donell
2021-05-18 20:55 ` [PATCH v2 03/25] linux: mips: Split libanl.abilist " Adhemerval Zanella
2021-05-19  8:25   ` Lukasz Majewski
2021-06-04 19:30   ` Carlos O'Donell
2021-05-18 20:55 ` [PATCH v2 04/25] linux: s390: Add libanl.abilist in s390 and s390x Adhemerval Zanella
2021-05-19  8:26   ` Lukasz Majewski
2021-06-04 19:30   ` Carlos O'Donell
2021-05-18 20:55 ` [PATCH v2 05/25] linux: Add fallback for 64-bit time_t SO_{RCV, SND}TIMEO Adhemerval Zanella
2021-05-19  8:36   ` [PATCH v2 05/25] linux: Add fallback for 64-bit time_t SO_{RCV,SND}TIMEO Lukasz Majewski
2021-05-20  6:44   ` [PATCH v2 05/25] linux: Add fallback for 64-bit time_t SO_{RCV, SND}TIMEO Florian Weimer
2021-05-20 18:01     ` Adhemerval Zanella
2021-05-21 18:37       ` Florian Weimer
2021-05-21 19:17         ` Adhemerval Zanella
2021-06-04 19:30   ` [PATCH v2 05/25] linux: Add fallback for 64-bit time_t SO_{RCV,SND}TIMEO Carlos O'Donell
2021-06-07 17:52     ` Adhemerval Zanella
2021-05-18 20:55 ` [PATCH v2 06/25] linux: Add fallback for 64-bit time_t SO_TIMESTAMP{NS} Adhemerval Zanella
2021-05-19  8:50   ` Lukasz Majewski
2021-05-20  6:50   ` Florian Weimer
2021-05-20 18:46     ` Adhemerval Zanella
2021-05-21 18:38       ` Florian Weimer
2021-05-21 19:02         ` Adhemerval Zanella
2021-06-04 19:30   ` Carlos O'Donell
2021-05-18 20:55 ` [PATCH v2 07/25] linux: Add recvvmsg " Adhemerval Zanella
2021-05-19  9:02   ` Lukasz Majewski
2021-06-04 19:30   ` Carlos O'Donell
2021-05-18 20:55 ` [PATCH v2 08/25] y2038: Add __USE_TIME_BITS64 support for time_t Adhemerval Zanella
2021-05-19  9:02   ` Lukasz Majewski
2021-06-04 19:30   ` Carlos O'Donell
2021-05-18 20:55 ` [PATCH v2 09/25] y2038: Add __USE_TIME_BITS64 support for struct timeval Adhemerval Zanella
2021-05-19  9:03   ` Lukasz Majewski
2021-06-04 19:31   ` Carlos O'Donell
2021-05-18 20:55 ` [PATCH v2 10/25] y2038: Add __USE_TIME_BITS64 support for struct timespec Adhemerval Zanella
2021-05-19  9:03   ` Lukasz Majewski
2021-06-04 19:31   ` Carlos O'Donell
2021-05-18 20:55 ` [PATCH v2 11/25] y2038: Add __USE_TIME_BITS64 support for struct utimbuf Adhemerval Zanella
2021-05-19  9:04   ` Lukasz Majewski
2021-06-04 19:31   ` Carlos O'Donell
2021-05-18 20:56 ` [PATCH v2 12/25] y2038: linux: Add __USE_TIME_BITS64 support for struct timex Adhemerval Zanella
2021-05-19  9:04   ` Lukasz Majewski
2021-06-04 19:31   ` Carlos O'Donell
2021-05-18 20:56 ` [PATCH v2 13/25] y2038: Use a common definition for stat Adhemerval Zanella
2021-06-04 19:37   ` Carlos O'Donell
2021-06-07 18:07     ` Adhemerval Zanella
2021-05-18 20:56 ` [PATCH v2 14/25] y2038: Use a common definition for msqid_ds Adhemerval Zanella
2021-06-04 19:38   ` Carlos O'Donell
2021-06-07 18:29     ` Adhemerval Zanella
2021-05-18 20:56 ` [PATCH v2 15/25] y2038: Use a common definition for semid_ds Adhemerval Zanella
2021-05-19  9:09   ` Lukasz Majewski
2021-06-04 19:38   ` Carlos O'Donell
2021-06-07 18:46     ` Adhemerval Zanella
2021-05-18 20:56 ` [PATCH v2 16/25] y2038: Use a common definition for shmid_ds Adhemerval Zanella
2021-05-19  9:09   ` Lukasz Majewski
2021-06-04 19:38   ` Carlos O'Donell [this message]
2021-05-18 20:56 ` [PATCH v2 17/25] y2038: Add __USE_TIME_BITS64 support for socket-constants.h Adhemerval Zanella
2021-05-19  9:13   ` Lukasz Majewski
2021-06-04 19:38   ` Carlos O'Donell
2021-05-18 20:56 ` [PATCH v2 18/25] time: Add 64 bit time support for getdate Adhemerval Zanella
2021-05-19  9:15   ` Lukasz Majewski
2021-06-04 19:38   ` Carlos O'Donell
2021-05-18 20:56 ` [PATCH v2 19/25] y2038: Add support for 64 bit time on legacy ABIs Adhemerval Zanella
2021-05-19  9:18   ` Lukasz Majewski
2021-05-20  6:58   ` Florian Weimer
2021-05-20 10:37     ` Adhemerval Zanella
2021-06-04 19:38   ` Carlos O'Donell
2021-05-18 20:56 ` [PATCH v2 20/25] posix: Add glob64 with 64 bit time_t support Adhemerval Zanella
2021-05-19 10:44   ` Lukasz Majewski
2021-06-04 19:39   ` Carlos O'Donell
2021-06-07 18:52     ` Adhemerval Zanella
2021-05-18 20:56 ` [PATCH v2 21/25] io: Add fts64 " Adhemerval Zanella
2021-05-19 10:50   ` Lukasz Majewski
2021-06-04 19:39   ` Carlos O'Donell
2021-05-18 20:56 ` [PATCH v2 22/25] io: Add ftw64 " Adhemerval Zanella
2021-05-19 10:57   ` Lukasz Majewski
2021-06-04 19:39   ` Carlos O'Donell
2021-05-18 20:56 ` [PATCH v2 23/25] libsupport: Add 64 bit time_t support for time functions Adhemerval Zanella
2021-05-19 11:00   ` Lukasz Majewski
2021-06-04 19:39   ` Carlos O'Donell
2021-05-18 20:56 ` [PATCH v2 24/25] libsupport: Add 64 bit time_t support for stat functions Adhemerval Zanella
2021-05-19 11:04   ` Lukasz Majewski
2021-06-04 19:39   ` Carlos O'Donell
2021-05-18 20:56 ` [PATCH v2 25/25] y2038: Add test coverage Adhemerval Zanella
2021-05-19 11:08   ` Lukasz Majewski
2021-06-04 19:39   ` Carlos O'Donell
2021-06-04 19:29 ` [PATCH v2 00/25] Add 64 bit time support on legacy ABIs Carlos O'Donell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a60e034d-a2ba-83a1-1eb3-6f9ec8884b45@redhat.com \
    --to=carlos@redhat.com \
    --cc=adhemerval.zanella@linaro.org \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).