[v5,2/3] semctl: Remove the sem-pad.h file

Message ID 20200401165308.1913271-3-alistair.francis@wdc.com
State New
Headers show
Series
  • Support y2038 semctl_syscall()
Related show

Commit Message

Sergei Trofimovich via Libc-alpha April 1, 2020, 4:53 p.m.
Remove the sem-pad.h file and instead have architectures override the
struct semid_ds via the bits/types/struct_semid_ds.h file.
---
 sysdeps/unix/sysv/linux/Makefile              |  2 +-
 sysdeps/unix/sysv/linux/bits/sem-pad.h        | 33 -------------
 sysdeps/unix/sysv/linux/bits/sem.h            |  2 +-
 .../sysv/linux/bits/types/struct_semid_ds.h   | 29 ++++++------
 .../linux/hppa/bits/types/struct_semid_ds.h   | 46 +++++++++++++++++++
 sysdeps/unix/sysv/linux/mips/bits/sem-pad.h   | 24 ----------
 .../bits/types/struct_semid_ds.h}             | 20 +++++---
 .../unix/sysv/linux/powerpc/bits/sem-pad.h    | 26 -----------
 .../powerpc/bits/types/struct_semid_ds.h      | 46 +++++++++++++++++++
 .../linux/sparc/bits/types/struct_semid_ds.h  | 46 +++++++++++++++++++
 sysdeps/unix/sysv/linux/x86/bits/sem-pad.h    | 24 ----------
 .../bits/types/struct_semid_ds.h}             | 22 ++++++---
 12 files changed, 184 insertions(+), 136 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/bits/sem-pad.h
 create mode 100644 sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
 delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/sem-pad.h
 rename sysdeps/unix/sysv/linux/{sparc/bits/sem-pad.h => mips/bits/types/struct_semid_ds.h} (56%)
 delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h
 create mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
 create mode 100644 sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
 delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/sem-pad.h
 rename sysdeps/unix/sysv/linux/{hppa/bits/sem-pad.h => x86/bits/types/struct_semid_ds.h} (52%)

-- 
2.26.0

Comments

Sergei Trofimovich via Libc-alpha April 17, 2020, 7:03 p.m. | #1
On 01/04/2020 13:53, Alistair Francis via Libc-alpha wrote:
> Remove the sem-pad.h file and instead have architectures override the

> struct semid_ds via the bits/types/struct_semid_ds.h file.


Ok with the remarks below.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>


> ---

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

>  sysdeps/unix/sysv/linux/bits/sem-pad.h        | 33 -------------

>  sysdeps/unix/sysv/linux/bits/sem.h            |  2 +-

>  .../sysv/linux/bits/types/struct_semid_ds.h   | 29 ++++++------

>  .../linux/hppa/bits/types/struct_semid_ds.h   | 46 +++++++++++++++++++

>  sysdeps/unix/sysv/linux/mips/bits/sem-pad.h   | 24 ----------

>  .../bits/types/struct_semid_ds.h}             | 20 +++++---

>  .../unix/sysv/linux/powerpc/bits/sem-pad.h    | 26 -----------

>  .../powerpc/bits/types/struct_semid_ds.h      | 46 +++++++++++++++++++

>  .../linux/sparc/bits/types/struct_semid_ds.h  | 46 +++++++++++++++++++

>  sysdeps/unix/sysv/linux/x86/bits/sem-pad.h    | 24 ----------

>  .../bits/types/struct_semid_ds.h}             | 22 ++++++---

>  12 files changed, 184 insertions(+), 136 deletions(-)

>  delete mode 100644 sysdeps/unix/sysv/linux/bits/sem-pad.h

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

>  delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/sem-pad.h

>  rename sysdeps/unix/sysv/linux/{sparc/bits/sem-pad.h => mips/bits/types/struct_semid_ds.h} (56%)

>  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h

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

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

>  delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/sem-pad.h

>  rename sysdeps/unix/sysv/linux/{hppa/bits/sem-pad.h => x86/bits/types/struct_semid_ds.h} (52%)

> 

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

> index bbf1d60fc6..84ed4344d3 100644

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

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

> @@ -86,7 +86,7 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \

>  		  bits/siginfo-arch.h bits/siginfo-consts-arch.h \

>  		  bits/procfs.h bits/procfs-id.h bits/procfs-extra.h \

>  		  bits/procfs-prregset.h bits/mman-map-flags-generic.h \

> -		  bits/msq-pad.h bits/sem-pad.h bits/shmlba.h bits/shm-pad.h \

> +		  bits/msq-pad.h bits/shmlba.h bits/shm-pad.h \

>  		  bits/termios-struct.h bits/termios-c_cc.h \

>  		  bits/termios-c_iflag.h bits/termios-c_oflag.h \

>  		  bits/termios-baud.h bits/termios-c_cflag.h \


Ok.

> diff --git a/sysdeps/unix/sysv/linux/bits/sem-pad.h b/sysdeps/unix/sysv/linux/bits/sem-pad.h

> deleted file mode 100644

> index 566ce039cc..0000000000

> --- a/sysdeps/unix/sysv/linux/bits/sem-pad.h

> +++ /dev/null

> @@ -1,33 +0,0 @@

> -/* Define where padding goes in struct semid_ds.  Generic version.

> -   Copyright (C) 2018-2020 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/>.  */

> -

> -#ifndef _SYS_SEM_H

> -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> -#endif

> -

> -#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,

> -   or include it despite being 64-bit.  This must match the layout

> -   used for struct semid64_ds in <asm/sembuf.h>, as glibc does not do

> -   layout conversions for this structure.  */

> -

> -#define __SEM_PAD_AFTER_TIME (__TIMESIZE == 32)

> -#define __SEM_PAD_BEFORE_TIME 0


Ok.

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

> index 0d1813ec67..ba1169fdb3 100644

> --- a/sysdeps/unix/sysv/linux/bits/sem.h

> +++ b/sysdeps/unix/sysv/linux/bits/sem.h

> @@ -20,7 +20,7 @@

>  #endif

>  

>  #include <sys/types.h>

> -#include <bits/sem-pad.h>

> +#include <bits/timesize.h>

>  #include <bits/types/struct_semid_ds.h>

>  

>  /* Flags for `semop'.  */


Ok.

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

> index ba0719e77a..659db85db8 100644

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

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

> @@ -20,24 +20,27 @@

>  # error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

>  #endif

>  

> -#if __SEM_PAD_BEFORE_TIME

> -# define __SEM_PAD_TIME(NAME, RES)        \

> -  __syscall_ulong_t __glibc_reserved ## RES; __time_t NAME

> -#elif __SEM_PAD_AFTER_TIME

> -# define __SEM_PAD_TIME(NAME, RES)        \

> -  __time_t NAME; __syscall_ulong_t __glibc_reserved ## RES

> -#else

> -# define __SEM_PAD_TIME(NAME, RES)    \

> -  __time_t NAME

> -#endif

> -

>  /* Data structure describing a set of semaphores.  */

> +#if __TIMESIZE == 32

> +struct semid_ds

> +{

> +  struct ipc_perm sem_perm;        /* operation permission struct */

> +  __time_t sem_otime;              /* last semop() time */

> +  __syscall_ulong_t __glibc_reserved1;

> +  __time_t sem_ctime;             /* last time changed by semctl() */

> +  __syscall_ulong_t __glibc_reserved2;

> +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> +  __syscall_ulong_t __glibc_reserved3;

> +  __syscall_ulong_t __glibc_reserved4;

> +};

> +#else

>  struct semid_ds

>  {

>    struct ipc_perm sem_perm;		/* operation permission struct */

> -  __SEM_PAD_TIME (sem_otime, 1);	/* last semop() time */

> -  __SEM_PAD_TIME (sem_ctime, 2);	/* last time changed by semctl() */

> +  __time_t sem_otime;	        /* last semop() time */

> +  __time_t sem_ctime;	        /* last time changed by semctl() */


Shouldn't be __time64_t?

>    __syscall_ulong_t sem_nsems;		/* number of semaphores in set */

>    __syscall_ulong_t __glibc_reserved3;

>    __syscall_ulong_t __glibc_reserved4;

>  };

> +#endif> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h

> new file mode 100644

> index 0000000000..fbc26ef2ca

> --- /dev/null

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

> @@ -0,0 +1,46 @@

> +/* HPPA implementation of the semaphore struct semid_ds

> +   Copyright (C) 1995-2020 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/>.  */

> +

> +#ifndef _SYS_SEM_H

> +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

> +#endif

> +

> +/* Data structure describing a set of semaphores.  */

> +#if __TIMESIZE == 32

> +struct semid_ds

> +{

> +  struct ipc_perm sem_perm;   /* operation permission struct */

> +  __syscall_ulong_t __glibc_reserved1;

> +  __time_t sem_otime;         /* last semop() time */

> +  __syscall_ulong_t __glibc_reserved2;

> +  __time_t sem_ctime;         /* last time changed by semctl() */

> +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> +  __syscall_ulong_t __glibc_reserved3;

> +  __syscall_ulong_t __glibc_reserved4;

> +};


Ok.

> +#else

> +struct semid_ds

> +{

> +  struct ipc_perm sem_perm;		/* operation permission struct */

> +  __time_t sem_otime;       	/* last semop() time */

> +  __time_t sem_ctime;       	/* last time changed by semctl() */

> +  __syscall_ulong_t sem_nsems;		/* number of semaphores in set */

> +  __syscall_ulong_t __glibc_reserved3;

> +  __syscall_ulong_t __glibc_reserved4;

> +};

> +#endif


There is no support for 64-bit userland neither it is a valid glibc
support ABI, so we can remove it.

> diff --git a/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h b/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h

> deleted file mode 100644

> index 4c581f7694..0000000000

> --- a/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h

> +++ /dev/null

> @@ -1,24 +0,0 @@

> -/* Define where padding goes in struct semid_ds.  MIPS version.

> -   Copyright (C) 2018-2020 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/>.  */

> -

> -#ifndef _SYS_SEM_H

> -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> -#endif

> -

> -#define __SEM_PAD_AFTER_TIME 0

> -#define __SEM_PAD_BEFORE_TIME 0


Ok.

> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h

> similarity index 56%

> rename from sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h

> rename to sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h

> index 5f4e214d12..8954209a29 100644

> --- a/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h

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

> @@ -1,5 +1,5 @@

> -/* Define where padding goes in struct semid_ds.  SPARC version.

> -   Copyright (C) 2018-2020 Free Software Foundation, Inc.

> +/* MIPS implementation of the semaphore struct semid_ds

> +   Copyright (C) 1995-2020 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

> @@ -17,10 +17,16 @@

>     <https://www.gnu.org/licenses/>.  */

>  

>  #ifndef _SYS_SEM_H

> -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

>  #endif

>  

> -#include <bits/timesize.h>

> -

> -#define __SEM_PAD_AFTER_TIME 0

> -#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)

> +/* Data structure describing a set of semaphores.  */

> +struct semid_ds

> +{

> +  struct ipc_perm sem_perm;		/* operation permission struct */

> +  __time_t sem_otime;	/* last semop() time */

> +  __time_t sem_ctime;	/* last time changed by semctl() */

> +  __syscall_ulong_t sem_nsems;		/* number of semaphores in set */

> +  __syscall_ulong_t __glibc_reserved3;

> +  __syscall_ulong_t __glibc_reserved4;

> +};


Ok.

> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h b/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h

> deleted file mode 100644

> index 42d8827906..0000000000

> --- a/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h

> +++ /dev/null

> @@ -1,26 +0,0 @@

> -/* Define where padding goes in struct semid_ds.  PowerPC version.

> -   Copyright (C) 2018-2020 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/>.  */

> -

> -#ifndef _SYS_SEM_H

> -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> -#endif

> -

> -#include <bits/timesize.h>

> -

> -#define __SEM_PAD_AFTER_TIME 0

> -#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)


Ok.

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

> new file mode 100644

> index 0000000000..d393141808

> --- /dev/null

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

> @@ -0,0 +1,46 @@

> +/* PowerPC implementation of the semaphore struct semid_ds


Missing period.

> +   Copyright (C) 1995-2020 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/>.  */

> +

> +#ifndef _SYS_SEM_H

> +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

> +#endif

> +

> +/* Data structure describing a set of semaphores.  */

> +#if __TIMESIZE == 32

> +struct semid_ds

> +{

> +  struct ipc_perm sem_perm;   /* operation permission struct */

> +  __syscall_ulong_t __glibc_reserved1;

> +  __time_t sem_otime;  /* last semop() time */

> +  __syscall_ulong_t __glibc_reserved2;

> +  __time_t sem_ctime;  /* last time changed by semctl() */

> +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> +  __syscall_ulong_t __glibc_reserved3;

> +  __syscall_ulong_t __glibc_reserved4;

> +};

> +#else

> +struct semid_ds

> +{

> +  struct ipc_perm sem_perm;		/* operation permission struct */

> +  __time_t sem_otime;	/* last semop() time */

> +  __time_t sem_ctime;	/* last time changed by semctl() */

> +  __syscall_ulong_t sem_nsems;		/* number of semaphores in set */

> +  __syscall_ulong_t __glibc_reserved3;

> +  __syscall_ulong_t __glibc_reserved4;

> +};

> +#endif


Ok, although it can be simplified to:

  struct semid_ds
  {
    struct ipc_perm sem_perm;
  #if __TIMESIZE == 32
    __syscall_ulong_t __glibc_reserved1;
    __time_t          sem_otime;
    __syscall_ulong_t __glibc_reserved2;
    __time_t          sem_ctime;
  #else
    __time_t          sem_otime;
    __time_t          sem_ctime;
  #endif
    __syscall_ulong_t sem_nsems;
    __syscall_ulong_t __glibc_reserved3;
    __syscall_ulong_t __glibc_reserved4; 
  };

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

> new file mode 100644

> index 0000000000..84c7a9022a

> --- /dev/null

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

> @@ -0,0 +1,46 @@

> +/* Sparc implementation of the semaphore struct semid_ds

> +   Copyright (C) 1995-2020 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/>.  */

> +

> +#ifndef _SYS_SEM_H

> +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

> +#endif

> +

> +/* Data structure describing a set of semaphores.  */

> +#if __TIMESIZE == 32

> +struct semid_ds

> +{

> +  struct ipc_perm sem_perm;   /* operation permission struct */

> +  __syscall_ulong_t __glibc_reserved1;

> +  __time_t sem_otime;  /* last semop() time */

> +  __syscall_ulong_t __glibc_reserved2;

> +  __time_t sem_ctime;  /* last time changed by semctl() */

> +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> +  __syscall_ulong_t __glibc_reserved3;

> +  __syscall_ulong_t __glibc_reserved4;

> +};

> +#else

> +struct semid_ds

> +{

> +  struct ipc_perm sem_perm;		/* operation permission struct */

> +  __time_t sem_otime;	/* last semop() time */

> +  __time_t sem_ctime;	/* last time changed by semctl() */

> +  __syscall_ulong_t sem_nsems;		/* number of semaphores in set */

> +  __syscall_ulong_t __glibc_reserved3;

> +  __syscall_ulong_t __glibc_reserved4;

> +};

> +#endif


Ok, although it also can be simplified as the powerpc one.

> diff --git a/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h b/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h

> deleted file mode 100644

> index 102e226997..0000000000

> --- a/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h

> +++ /dev/null

> @@ -1,24 +0,0 @@

> -/* Define where padding goes in struct semid_ds.  x86 version.

> -   Copyright (C) 2018-2020 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/>.  */

> -

> -#ifndef _SYS_SEM_H

> -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> -#endif

> -

> -#define __SEM_PAD_AFTER_TIME 1

> -#define __SEM_PAD_BEFORE_TIME 0


Ok.

> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h

> similarity index 52%

> rename from sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h

> rename to sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h

> index ee0332325b..22f0645f85 100644

> --- a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h

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

> @@ -1,5 +1,5 @@

> -/* Define where padding goes in struct semid_ds.  HPPA version.

> -   Copyright (C) 2018-2020 Free Software Foundation, Inc.

> +/* Sparc implementation of the semaphore struct semid_ds

> +   Copyright (C) 1995-2020 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

> @@ -17,10 +17,18 @@

>     <https://www.gnu.org/licenses/>.  */

>  

>  #ifndef _SYS_SEM_H

> -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

>  #endif

>  

> -#include <bits/timesize.h>

> -

> -#define __SEM_PAD_AFTER_TIME 0

> -#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)

> +/* Data structure describing a set of semaphores.  */

> +struct semid_ds

> +{

> +  struct ipc_perm sem_perm;   /* operation permission struct */

> +  __time_t sem_otime;  /* last semop() time */

> +  __syscall_ulong_t __glibc_reserved1;

> +  __time_t sem_ctime;  /* last time changed by semctl() */

> +  __syscall_ulong_t __glibc_reserved2;

> +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> +  __syscall_ulong_t __glibc_reserved3;

> +  __syscall_ulong_t __glibc_reserved4;

> +};

> 


Ok.
Sergei Trofimovich via Libc-alpha April 17, 2020, 8:38 p.m. | #2
On Fri, Apr 17, 2020 at 12:03 PM Adhemerval Zanella via Libc-alpha
<libc-alpha@sourceware.org> wrote:
>

>

>

> On 01/04/2020 13:53, Alistair Francis via Libc-alpha wrote:

> > Remove the sem-pad.h file and instead have architectures override the

> > struct semid_ds via the bits/types/struct_semid_ds.h file.

>

> Ok with the remarks below.

>

> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

>

> > ---

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

> >  sysdeps/unix/sysv/linux/bits/sem-pad.h        | 33 -------------

> >  sysdeps/unix/sysv/linux/bits/sem.h            |  2 +-

> >  .../sysv/linux/bits/types/struct_semid_ds.h   | 29 ++++++------

> >  .../linux/hppa/bits/types/struct_semid_ds.h   | 46 +++++++++++++++++++

> >  sysdeps/unix/sysv/linux/mips/bits/sem-pad.h   | 24 ----------

> >  .../bits/types/struct_semid_ds.h}             | 20 +++++---

> >  .../unix/sysv/linux/powerpc/bits/sem-pad.h    | 26 -----------

> >  .../powerpc/bits/types/struct_semid_ds.h      | 46 +++++++++++++++++++

> >  .../linux/sparc/bits/types/struct_semid_ds.h  | 46 +++++++++++++++++++

> >  sysdeps/unix/sysv/linux/x86/bits/sem-pad.h    | 24 ----------

> >  .../bits/types/struct_semid_ds.h}             | 22 ++++++---

> >  12 files changed, 184 insertions(+), 136 deletions(-)

> >  delete mode 100644 sysdeps/unix/sysv/linux/bits/sem-pad.h

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

> >  delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/sem-pad.h

> >  rename sysdeps/unix/sysv/linux/{sparc/bits/sem-pad.h => mips/bits/types/struct_semid_ds.h} (56%)

> >  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h

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

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

> >  delete mode 100644 sysdeps/unix/sysv/linux/x86/bits/sem-pad.h

> >  rename sysdeps/unix/sysv/linux/{hppa/bits/sem-pad.h => x86/bits/types/struct_semid_ds.h} (52%)

> >

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

> > index bbf1d60fc6..84ed4344d3 100644

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

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

> > @@ -86,7 +86,7 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \

> >                 bits/siginfo-arch.h bits/siginfo-consts-arch.h \

> >                 bits/procfs.h bits/procfs-id.h bits/procfs-extra.h \

> >                 bits/procfs-prregset.h bits/mman-map-flags-generic.h \

> > -               bits/msq-pad.h bits/sem-pad.h bits/shmlba.h bits/shm-pad.h \

> > +               bits/msq-pad.h bits/shmlba.h bits/shm-pad.h \

> >                 bits/termios-struct.h bits/termios-c_cc.h \

> >                 bits/termios-c_iflag.h bits/termios-c_oflag.h \

> >                 bits/termios-baud.h bits/termios-c_cflag.h \

>

> Ok.

>

> > diff --git a/sysdeps/unix/sysv/linux/bits/sem-pad.h b/sysdeps/unix/sysv/linux/bits/sem-pad.h

> > deleted file mode 100644

> > index 566ce039cc..0000000000

> > --- a/sysdeps/unix/sysv/linux/bits/sem-pad.h

> > +++ /dev/null

> > @@ -1,33 +0,0 @@

> > -/* Define where padding goes in struct semid_ds.  Generic version.

> > -   Copyright (C) 2018-2020 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/>.  */

> > -

> > -#ifndef _SYS_SEM_H

> > -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> > -#endif

> > -

> > -#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,

> > -   or include it despite being 64-bit.  This must match the layout

> > -   used for struct semid64_ds in <asm/sembuf.h>, as glibc does not do

> > -   layout conversions for this structure.  */

> > -

> > -#define __SEM_PAD_AFTER_TIME (__TIMESIZE == 32)

> > -#define __SEM_PAD_BEFORE_TIME 0

>

> Ok.

>

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

> > index 0d1813ec67..ba1169fdb3 100644

> > --- a/sysdeps/unix/sysv/linux/bits/sem.h

> > +++ b/sysdeps/unix/sysv/linux/bits/sem.h

> > @@ -20,7 +20,7 @@

> >  #endif

> >

> >  #include <sys/types.h>

> > -#include <bits/sem-pad.h>

> > +#include <bits/timesize.h>

> >  #include <bits/types/struct_semid_ds.h>

> >

> >  /* Flags for `semop'.  */

>

> Ok.

>

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

> > index ba0719e77a..659db85db8 100644

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

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

> > @@ -20,24 +20,27 @@

> >  # error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

> >  #endif

> >

> > -#if __SEM_PAD_BEFORE_TIME

> > -# define __SEM_PAD_TIME(NAME, RES)        \

> > -  __syscall_ulong_t __glibc_reserved ## RES; __time_t NAME

> > -#elif __SEM_PAD_AFTER_TIME

> > -# define __SEM_PAD_TIME(NAME, RES)        \

> > -  __time_t NAME; __syscall_ulong_t __glibc_reserved ## RES

> > -#else

> > -# define __SEM_PAD_TIME(NAME, RES)    \

> > -  __time_t NAME

> > -#endif

> > -

> >  /* Data structure describing a set of semaphores.  */

> > +#if __TIMESIZE == 32

> > +struct semid_ds

> > +{

> > +  struct ipc_perm sem_perm;        /* operation permission struct */

> > +  __time_t sem_otime;              /* last semop() time */

> > +  __syscall_ulong_t __glibc_reserved1;

> > +  __time_t sem_ctime;             /* last time changed by semctl() */

> > +  __syscall_ulong_t __glibc_reserved2;

> > +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> > +  __syscall_ulong_t __glibc_reserved3;

> > +  __syscall_ulong_t __glibc_reserved4;

> > +};

> > +#else

> >  struct semid_ds

> >  {

> >    struct ipc_perm sem_perm;          /* operation permission struct */

> > -  __SEM_PAD_TIME (sem_otime, 1);     /* last semop() time */

> > -  __SEM_PAD_TIME (sem_ctime, 2);     /* last time changed by semctl() */

> > +  __time_t sem_otime;                /* last semop() time */

> > +  __time_t sem_ctime;                /* last time changed by semctl() */

>

> Shouldn't be __time64_t?


They should be the same as we are outside the __TIMESIZE == 32 define,
time_t just seemed more generic.

Do you want me to change it?

>

> >    __syscall_ulong_t sem_nsems;               /* number of semaphores in set */

> >    __syscall_ulong_t __glibc_reserved3;

> >    __syscall_ulong_t __glibc_reserved4;

> >  };

> > +#endif> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h

> > new file mode 100644

> > index 0000000000..fbc26ef2ca

> > --- /dev/null

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

> > @@ -0,0 +1,46 @@

> > +/* HPPA implementation of the semaphore struct semid_ds

> > +   Copyright (C) 1995-2020 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/>.  */

> > +

> > +#ifndef _SYS_SEM_H

> > +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

> > +#endif

> > +

> > +/* Data structure describing a set of semaphores.  */

> > +#if __TIMESIZE == 32

> > +struct semid_ds

> > +{

> > +  struct ipc_perm sem_perm;   /* operation permission struct */

> > +  __syscall_ulong_t __glibc_reserved1;

> > +  __time_t sem_otime;         /* last semop() time */

> > +  __syscall_ulong_t __glibc_reserved2;

> > +  __time_t sem_ctime;         /* last time changed by semctl() */

> > +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> > +  __syscall_ulong_t __glibc_reserved3;

> > +  __syscall_ulong_t __glibc_reserved4;

> > +};

>

> Ok.

>

> > +#else

> > +struct semid_ds

> > +{

> > +  struct ipc_perm sem_perm;          /* operation permission struct */

> > +  __time_t sem_otime;        /* last semop() time */

> > +  __time_t sem_ctime;        /* last time changed by semctl() */

> > +  __syscall_ulong_t sem_nsems;               /* number of semaphores in set */

> > +  __syscall_ulong_t __glibc_reserved3;

> > +  __syscall_ulong_t __glibc_reserved4;

> > +};

> > +#endif

>

> There is no support for 64-bit userland neither it is a valid glibc

> support ABI, so we can remove it.


Removed!

>

> > diff --git a/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h b/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h

> > deleted file mode 100644

> > index 4c581f7694..0000000000

> > --- a/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h

> > +++ /dev/null

> > @@ -1,24 +0,0 @@

> > -/* Define where padding goes in struct semid_ds.  MIPS version.

> > -   Copyright (C) 2018-2020 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/>.  */

> > -

> > -#ifndef _SYS_SEM_H

> > -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> > -#endif

> > -

> > -#define __SEM_PAD_AFTER_TIME 0

> > -#define __SEM_PAD_BEFORE_TIME 0

>

> Ok.

>

> > diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h

> > similarity index 56%

> > rename from sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h

> > rename to sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h

> > index 5f4e214d12..8954209a29 100644

> > --- a/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h

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

> > @@ -1,5 +1,5 @@

> > -/* Define where padding goes in struct semid_ds.  SPARC version.

> > -   Copyright (C) 2018-2020 Free Software Foundation, Inc.

> > +/* MIPS implementation of the semaphore struct semid_ds

> > +   Copyright (C) 1995-2020 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

> > @@ -17,10 +17,16 @@

> >     <https://www.gnu.org/licenses/>.  */

> >

> >  #ifndef _SYS_SEM_H

> > -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> > +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

> >  #endif

> >

> > -#include <bits/timesize.h>

> > -

> > -#define __SEM_PAD_AFTER_TIME 0

> > -#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)

> > +/* Data structure describing a set of semaphores.  */

> > +struct semid_ds

> > +{

> > +  struct ipc_perm sem_perm;          /* operation permission struct */

> > +  __time_t sem_otime;        /* last semop() time */

> > +  __time_t sem_ctime;        /* last time changed by semctl() */

> > +  __syscall_ulong_t sem_nsems;               /* number of semaphores in set */

> > +  __syscall_ulong_t __glibc_reserved3;

> > +  __syscall_ulong_t __glibc_reserved4;

> > +};

>

> Ok.

>

> > diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h b/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h

> > deleted file mode 100644

> > index 42d8827906..0000000000

> > --- a/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h

> > +++ /dev/null

> > @@ -1,26 +0,0 @@

> > -/* Define where padding goes in struct semid_ds.  PowerPC version.

> > -   Copyright (C) 2018-2020 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/>.  */

> > -

> > -#ifndef _SYS_SEM_H

> > -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> > -#endif

> > -

> > -#include <bits/timesize.h>

> > -

> > -#define __SEM_PAD_AFTER_TIME 0

> > -#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)

>

> Ok.

>

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

> > new file mode 100644

> > index 0000000000..d393141808

> > --- /dev/null

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

> > @@ -0,0 +1,46 @@

> > +/* PowerPC implementation of the semaphore struct semid_ds

>

> Missing period.


Added

>

> > +   Copyright (C) 1995-2020 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/>.  */

> > +

> > +#ifndef _SYS_SEM_H

> > +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

> > +#endif

> > +

> > +/* Data structure describing a set of semaphores.  */

> > +#if __TIMESIZE == 32

> > +struct semid_ds

> > +{

> > +  struct ipc_perm sem_perm;   /* operation permission struct */

> > +  __syscall_ulong_t __glibc_reserved1;

> > +  __time_t sem_otime;  /* last semop() time */

> > +  __syscall_ulong_t __glibc_reserved2;

> > +  __time_t sem_ctime;  /* last time changed by semctl() */

> > +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> > +  __syscall_ulong_t __glibc_reserved3;

> > +  __syscall_ulong_t __glibc_reserved4;

> > +};

> > +#else

> > +struct semid_ds

> > +{

> > +  struct ipc_perm sem_perm;          /* operation permission struct */

> > +  __time_t sem_otime;        /* last semop() time */

> > +  __time_t sem_ctime;        /* last time changed by semctl() */

> > +  __syscall_ulong_t sem_nsems;               /* number of semaphores in set */

> > +  __syscall_ulong_t __glibc_reserved3;

> > +  __syscall_ulong_t __glibc_reserved4;

> > +};

> > +#endif

>

> Ok, although it can be simplified to:

>

>   struct semid_ds

>   {

>     struct ipc_perm sem_perm;

>   #if __TIMESIZE == 32

>     __syscall_ulong_t __glibc_reserved1;

>     __time_t          sem_otime;

>     __syscall_ulong_t __glibc_reserved2;

>     __time_t          sem_ctime;

>   #else

>     __time_t          sem_otime;

>     __time_t          sem_ctime;

>   #endif

>     __syscall_ulong_t sem_nsems;

>     __syscall_ulong_t __glibc_reserved3;

>     __syscall_ulong_t __glibc_reserved4;

>   };


Done

>

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

> > new file mode 100644

> > index 0000000000..84c7a9022a

> > --- /dev/null

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

> > @@ -0,0 +1,46 @@

> > +/* Sparc implementation of the semaphore struct semid_ds

> > +   Copyright (C) 1995-2020 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/>.  */

> > +

> > +#ifndef _SYS_SEM_H

> > +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

> > +#endif

> > +

> > +/* Data structure describing a set of semaphores.  */

> > +#if __TIMESIZE == 32

> > +struct semid_ds

> > +{

> > +  struct ipc_perm sem_perm;   /* operation permission struct */

> > +  __syscall_ulong_t __glibc_reserved1;

> > +  __time_t sem_otime;  /* last semop() time */

> > +  __syscall_ulong_t __glibc_reserved2;

> > +  __time_t sem_ctime;  /* last time changed by semctl() */

> > +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> > +  __syscall_ulong_t __glibc_reserved3;

> > +  __syscall_ulong_t __glibc_reserved4;

> > +};

> > +#else

> > +struct semid_ds

> > +{

> > +  struct ipc_perm sem_perm;          /* operation permission struct */

> > +  __time_t sem_otime;        /* last semop() time */

> > +  __time_t sem_ctime;        /* last time changed by semctl() */

> > +  __syscall_ulong_t sem_nsems;               /* number of semaphores in set */

> > +  __syscall_ulong_t __glibc_reserved3;

> > +  __syscall_ulong_t __glibc_reserved4;

> > +};

> > +#endif

>

> Ok, although it also can be simplified as the powerpc one.


Done.

Thanks for the review.

Alistair

>

> > diff --git a/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h b/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h

> > deleted file mode 100644

> > index 102e226997..0000000000

> > --- a/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h

> > +++ /dev/null

> > @@ -1,24 +0,0 @@

> > -/* Define where padding goes in struct semid_ds.  x86 version.

> > -   Copyright (C) 2018-2020 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/>.  */

> > -

> > -#ifndef _SYS_SEM_H

> > -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> > -#endif

> > -

> > -#define __SEM_PAD_AFTER_TIME 1

> > -#define __SEM_PAD_BEFORE_TIME 0

>

> Ok.

>

> > diff --git a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h

> > similarity index 52%

> > rename from sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h

> > rename to sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h

> > index ee0332325b..22f0645f85 100644

> > --- a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h

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

> > @@ -1,5 +1,5 @@

> > -/* Define where padding goes in struct semid_ds.  HPPA version.

> > -   Copyright (C) 2018-2020 Free Software Foundation, Inc.

> > +/* Sparc implementation of the semaphore struct semid_ds

> > +   Copyright (C) 1995-2020 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

> > @@ -17,10 +17,18 @@

> >     <https://www.gnu.org/licenses/>.  */

> >

> >  #ifndef _SYS_SEM_H

> > -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> > +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

> >  #endif

> >

> > -#include <bits/timesize.h>

> > -

> > -#define __SEM_PAD_AFTER_TIME 0

> > -#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)

> > +/* Data structure describing a set of semaphores.  */

> > +struct semid_ds

> > +{

> > +  struct ipc_perm sem_perm;   /* operation permission struct */

> > +  __time_t sem_otime;  /* last semop() time */

> > +  __syscall_ulong_t __glibc_reserved1;

> > +  __time_t sem_ctime;  /* last time changed by semctl() */

> > +  __syscall_ulong_t __glibc_reserved2;

> > +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> > +  __syscall_ulong_t __glibc_reserved3;

> > +  __syscall_ulong_t __glibc_reserved4;

> > +};

> >

>

> Ok.

>
Sergei Trofimovich via Libc-alpha April 20, 2020, 8:18 p.m. | #3
On 17/04/2020 17:38, Alistair Francis wrote:
> On Fri, Apr 17, 2020 at 12:03 PM Adhemerval Zanella via Libc-alpha

> <libc-alpha@sourceware.org> wrote:

>>

>>

>>

>> On 01/04/2020 13:53, Alistair Francis via Libc-alpha wrote:

>>> Remove the sem-pad.h file and instead have architectures override the

>>> struct semid_ds via the bits/types/struct_semid_ds.h file.

>>

>> Ok with the remarks below.

>>

>> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

>>


>>

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

>>> index ba0719e77a..659db85db8 100644

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

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

>>> @@ -20,24 +20,27 @@

>>>  # error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

>>>  #endif

>>>

>>> -#if __SEM_PAD_BEFORE_TIME

>>> -# define __SEM_PAD_TIME(NAME, RES)        \

>>> -  __syscall_ulong_t __glibc_reserved ## RES; __time_t NAME

>>> -#elif __SEM_PAD_AFTER_TIME

>>> -# define __SEM_PAD_TIME(NAME, RES)        \

>>> -  __time_t NAME; __syscall_ulong_t __glibc_reserved ## RES

>>> -#else

>>> -# define __SEM_PAD_TIME(NAME, RES)    \

>>> -  __time_t NAME

>>> -#endif

>>> -

>>>  /* Data structure describing a set of semaphores.  */

>>> +#if __TIMESIZE == 32

>>> +struct semid_ds

>>> +{

>>> +  struct ipc_perm sem_perm;        /* operation permission struct */

>>> +  __time_t sem_otime;              /* last semop() time */

>>> +  __syscall_ulong_t __glibc_reserved1;

>>> +  __time_t sem_ctime;             /* last time changed by semctl() */

>>> +  __syscall_ulong_t __glibc_reserved2;

>>> +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

>>> +  __syscall_ulong_t __glibc_reserved3;

>>> +  __syscall_ulong_t __glibc_reserved4;

>>> +};

>>> +#else

>>>  struct semid_ds

>>>  {

>>>    struct ipc_perm sem_perm;          /* operation permission struct */

>>> -  __SEM_PAD_TIME (sem_otime, 1);     /* last semop() time */

>>> -  __SEM_PAD_TIME (sem_ctime, 2);     /* last time changed by semctl() */

>>> +  __time_t sem_otime;                /* last semop() time */

>>> +  __time_t sem_ctime;                /* last time changed by semctl() */

>>

>> Shouldn't be __time64_t?

> 

> They should be the same as we are outside the __TIMESIZE == 32 define,

> time_t just seemed more generic.

> 

> Do you want me to change it?


Alright, it we can adjust once 64-bit time_t support is added on SysV.
Sergei Trofimovich via Libc-alpha April 20, 2020, 8:25 p.m. | #4
On Mon, Apr 20, 2020 at 1:18 PM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>

>

>

> On 17/04/2020 17:38, Alistair Francis wrote:

> > On Fri, Apr 17, 2020 at 12:03 PM Adhemerval Zanella via Libc-alpha

> > <libc-alpha@sourceware.org> wrote:

> >>

> >>

> >>

> >> On 01/04/2020 13:53, Alistair Francis via Libc-alpha wrote:

> >>> Remove the sem-pad.h file and instead have architectures override the

> >>> struct semid_ds via the bits/types/struct_semid_ds.h file.

> >>

> >> Ok with the remarks below.

> >>

> >> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

> >>

>

> >>

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

> >>> index ba0719e77a..659db85db8 100644

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

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

> >>> @@ -20,24 +20,27 @@

> >>>  # error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

> >>>  #endif

> >>>

> >>> -#if __SEM_PAD_BEFORE_TIME

> >>> -# define __SEM_PAD_TIME(NAME, RES)        \

> >>> -  __syscall_ulong_t __glibc_reserved ## RES; __time_t NAME

> >>> -#elif __SEM_PAD_AFTER_TIME

> >>> -# define __SEM_PAD_TIME(NAME, RES)        \

> >>> -  __time_t NAME; __syscall_ulong_t __glibc_reserved ## RES

> >>> -#else

> >>> -# define __SEM_PAD_TIME(NAME, RES)    \

> >>> -  __time_t NAME

> >>> -#endif

> >>> -

> >>>  /* Data structure describing a set of semaphores.  */

> >>> +#if __TIMESIZE == 32

> >>> +struct semid_ds

> >>> +{

> >>> +  struct ipc_perm sem_perm;        /* operation permission struct */

> >>> +  __time_t sem_otime;              /* last semop() time */

> >>> +  __syscall_ulong_t __glibc_reserved1;

> >>> +  __time_t sem_ctime;             /* last time changed by semctl() */

> >>> +  __syscall_ulong_t __glibc_reserved2;

> >>> +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> >>> +  __syscall_ulong_t __glibc_reserved3;

> >>> +  __syscall_ulong_t __glibc_reserved4;

> >>> +};

> >>> +#else

> >>>  struct semid_ds

> >>>  {

> >>>    struct ipc_perm sem_perm;          /* operation permission struct */

> >>> -  __SEM_PAD_TIME (sem_otime, 1);     /* last semop() time */

> >>> -  __SEM_PAD_TIME (sem_ctime, 2);     /* last time changed by semctl() */

> >>> +  __time_t sem_otime;                /* last semop() time */

> >>> +  __time_t sem_ctime;                /* last time changed by semctl() */

> >>

> >> Shouldn't be __time64_t?

> >

> > They should be the same as we are outside the __TIMESIZE == 32 define,

> > time_t just seemed more generic.

> >

> > Do you want me to change it?

>

> Alright, it we can adjust once 64-bit time_t support is added on SysV.


Ok, I'll leave it as is.

Do you mind reviewing patch 3 as well? Then I can merge this series.

Alistair
Sergei Trofimovich via Libc-alpha April 21, 2020, 2:03 p.m. | #5
On 20/04/2020 17:25, Alistair Francis wrote:
> On Mon, Apr 20, 2020 at 1:18 PM Adhemerval Zanella

> <adhemerval.zanella@linaro.org> wrote:

>>

>>

>>

>> On 17/04/2020 17:38, Alistair Francis wrote:

>>> On Fri, Apr 17, 2020 at 12:03 PM Adhemerval Zanella via Libc-alpha

>>> <libc-alpha@sourceware.org> wrote:

>>>>

>>>>

>>>>

>>>> On 01/04/2020 13:53, Alistair Francis via Libc-alpha wrote:

>>>>> Remove the sem-pad.h file and instead have architectures override the

>>>>> struct semid_ds via the bits/types/struct_semid_ds.h file.

>>>>

>>>> Ok with the remarks below.

>>>>

>>>> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

>>>>

>>

>>>>

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

>>>>> index ba0719e77a..659db85db8 100644

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

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

>>>>> @@ -20,24 +20,27 @@

>>>>>  # error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

>>>>>  #endif

>>>>>

>>>>> -#if __SEM_PAD_BEFORE_TIME

>>>>> -# define __SEM_PAD_TIME(NAME, RES)        \

>>>>> -  __syscall_ulong_t __glibc_reserved ## RES; __time_t NAME

>>>>> -#elif __SEM_PAD_AFTER_TIME

>>>>> -# define __SEM_PAD_TIME(NAME, RES)        \

>>>>> -  __time_t NAME; __syscall_ulong_t __glibc_reserved ## RES

>>>>> -#else

>>>>> -# define __SEM_PAD_TIME(NAME, RES)    \

>>>>> -  __time_t NAME

>>>>> -#endif

>>>>> -

>>>>>  /* Data structure describing a set of semaphores.  */

>>>>> +#if __TIMESIZE == 32

>>>>> +struct semid_ds

>>>>> +{

>>>>> +  struct ipc_perm sem_perm;        /* operation permission struct */

>>>>> +  __time_t sem_otime;              /* last semop() time */

>>>>> +  __syscall_ulong_t __glibc_reserved1;

>>>>> +  __time_t sem_ctime;             /* last time changed by semctl() */

>>>>> +  __syscall_ulong_t __glibc_reserved2;

>>>>> +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

>>>>> +  __syscall_ulong_t __glibc_reserved3;

>>>>> +  __syscall_ulong_t __glibc_reserved4;

>>>>> +};

>>>>> +#else

>>>>>  struct semid_ds

>>>>>  {

>>>>>    struct ipc_perm sem_perm;          /* operation permission struct */

>>>>> -  __SEM_PAD_TIME (sem_otime, 1);     /* last semop() time */

>>>>> -  __SEM_PAD_TIME (sem_ctime, 2);     /* last time changed by semctl() */

>>>>> +  __time_t sem_otime;                /* last semop() time */

>>>>> +  __time_t sem_ctime;                /* last time changed by semctl() */

>>>>

>>>> Shouldn't be __time64_t?

>>>

>>> They should be the same as we are outside the __TIMESIZE == 32 define,

>>> time_t just seemed more generic.

>>>

>>> Do you want me to change it?

>>

>> Alright, it we can adjust once 64-bit time_t support is added on SysV.

> 

> Ok, I'll leave it as is.

> 

> Do you mind reviewing patch 3 as well? Then I can merge this series.


Yes, that's my plan for today.
Sergei Trofimovich via Libc-alpha April 22, 2020, 7:22 p.m. | #6
Below a missing nit I just spot.

> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h

> similarity index 52%

> rename from sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h

> rename to sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h

> index ee0332325b..22f0645f85 100644

> --- a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h

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

> @@ -1,5 +1,5 @@

> -/* Define where padding goes in struct semid_ds.  HPPA version.

> -   Copyright (C) 2018-2020 Free Software Foundation, Inc.

> +/* Sparc implementation of the semaphore struct semid_ds


s/Sparc/x86 and missing period.

> +   Copyright (C) 1995-2020 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

> @@ -17,10 +17,18 @@

>     <https://www.gnu.org/licenses/>.  */

>  

>  #ifndef _SYS_SEM_H

> -# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."

> +# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."

>  #endif

>  

> -#include <bits/timesize.h>

> -

> -#define __SEM_PAD_AFTER_TIME 0

> -#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)

> +/* Data structure describing a set of semaphores.  */

> +struct semid_ds

> +{

> +  struct ipc_perm sem_perm;   /* operation permission struct */

> +  __time_t sem_otime;  /* last semop() time */

> +  __syscall_ulong_t __glibc_reserved1;

> +  __time_t sem_ctime;  /* last time changed by semctl() */

> +  __syscall_ulong_t __glibc_reserved2;

> +  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */

> +  __syscall_ulong_t __glibc_reserved3;

> +  __syscall_ulong_t __glibc_reserved4;

> +};

>

Patch

diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index bbf1d60fc6..84ed4344d3 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -86,7 +86,7 @@  sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
 		  bits/siginfo-arch.h bits/siginfo-consts-arch.h \
 		  bits/procfs.h bits/procfs-id.h bits/procfs-extra.h \
 		  bits/procfs-prregset.h bits/mman-map-flags-generic.h \
-		  bits/msq-pad.h bits/sem-pad.h bits/shmlba.h bits/shm-pad.h \
+		  bits/msq-pad.h bits/shmlba.h bits/shm-pad.h \
 		  bits/termios-struct.h bits/termios-c_cc.h \
 		  bits/termios-c_iflag.h bits/termios-c_oflag.h \
 		  bits/termios-baud.h bits/termios-c_cflag.h \
diff --git a/sysdeps/unix/sysv/linux/bits/sem-pad.h b/sysdeps/unix/sysv/linux/bits/sem-pad.h
deleted file mode 100644
index 566ce039cc..0000000000
--- a/sysdeps/unix/sysv/linux/bits/sem-pad.h
+++ /dev/null
@@ -1,33 +0,0 @@ 
-/* Define where padding goes in struct semid_ds.  Generic version.
-   Copyright (C) 2018-2020 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/>.  */
-
-#ifndef _SYS_SEM_H
-# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
-#endif
-
-#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,
-   or include it despite being 64-bit.  This must match the layout
-   used for struct semid64_ds in <asm/sembuf.h>, as glibc does not do
-   layout conversions for this structure.  */
-
-#define __SEM_PAD_AFTER_TIME (__TIMESIZE == 32)
-#define __SEM_PAD_BEFORE_TIME 0
diff --git a/sysdeps/unix/sysv/linux/bits/sem.h b/sysdeps/unix/sysv/linux/bits/sem.h
index 0d1813ec67..ba1169fdb3 100644
--- a/sysdeps/unix/sysv/linux/bits/sem.h
+++ b/sysdeps/unix/sysv/linux/bits/sem.h
@@ -20,7 +20,7 @@ 
 #endif
 
 #include <sys/types.h>
-#include <bits/sem-pad.h>
+#include <bits/timesize.h>
 #include <bits/types/struct_semid_ds.h>
 
 /* Flags for `semop'.  */
diff --git a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
index ba0719e77a..659db85db8 100644
--- a/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
+++ b/sysdeps/unix/sysv/linux/bits/types/struct_semid_ds.h
@@ -20,24 +20,27 @@ 
 # error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."
 #endif
 
-#if __SEM_PAD_BEFORE_TIME
-# define __SEM_PAD_TIME(NAME, RES)        \
-  __syscall_ulong_t __glibc_reserved ## RES; __time_t NAME
-#elif __SEM_PAD_AFTER_TIME
-# define __SEM_PAD_TIME(NAME, RES)        \
-  __time_t NAME; __syscall_ulong_t __glibc_reserved ## RES
-#else
-# define __SEM_PAD_TIME(NAME, RES)    \
-  __time_t NAME
-#endif
-
 /* Data structure describing a set of semaphores.  */
+#if __TIMESIZE == 32
+struct semid_ds
+{
+  struct ipc_perm sem_perm;        /* operation permission struct */
+  __time_t sem_otime;              /* last semop() time */
+  __syscall_ulong_t __glibc_reserved1;
+  __time_t sem_ctime;             /* last time changed by semctl() */
+  __syscall_ulong_t __glibc_reserved2;
+  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */
+  __syscall_ulong_t __glibc_reserved3;
+  __syscall_ulong_t __glibc_reserved4;
+};
+#else
 struct semid_ds
 {
   struct ipc_perm sem_perm;		/* operation permission struct */
-  __SEM_PAD_TIME (sem_otime, 1);	/* last semop() time */
-  __SEM_PAD_TIME (sem_ctime, 2);	/* last time changed by semctl() */
+  __time_t sem_otime;	        /* last semop() time */
+  __time_t sem_ctime;	        /* last time changed by semctl() */
   __syscall_ulong_t sem_nsems;		/* number of semaphores in set */
   __syscall_ulong_t __glibc_reserved3;
   __syscall_ulong_t __glibc_reserved4;
 };
+#endif
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
new file mode 100644
index 0000000000..fbc26ef2ca
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/hppa/bits/types/struct_semid_ds.h
@@ -0,0 +1,46 @@ 
+/* HPPA implementation of the semaphore struct semid_ds
+   Copyright (C) 1995-2020 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/>.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."
+#endif
+
+/* Data structure describing a set of semaphores.  */
+#if __TIMESIZE == 32
+struct semid_ds
+{
+  struct ipc_perm sem_perm;   /* operation permission struct */
+  __syscall_ulong_t __glibc_reserved1;
+  __time_t sem_otime;         /* last semop() time */
+  __syscall_ulong_t __glibc_reserved2;
+  __time_t sem_ctime;         /* last time changed by semctl() */
+  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */
+  __syscall_ulong_t __glibc_reserved3;
+  __syscall_ulong_t __glibc_reserved4;
+};
+#else
+struct semid_ds
+{
+  struct ipc_perm sem_perm;		/* operation permission struct */
+  __time_t sem_otime;       	/* last semop() time */
+  __time_t sem_ctime;       	/* last time changed by semctl() */
+  __syscall_ulong_t sem_nsems;		/* number of semaphores in set */
+  __syscall_ulong_t __glibc_reserved3;
+  __syscall_ulong_t __glibc_reserved4;
+};
+#endif
diff --git a/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h b/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h
deleted file mode 100644
index 4c581f7694..0000000000
--- a/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h
+++ /dev/null
@@ -1,24 +0,0 @@ 
-/* Define where padding goes in struct semid_ds.  MIPS version.
-   Copyright (C) 2018-2020 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/>.  */
-
-#ifndef _SYS_SEM_H
-# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
-#endif
-
-#define __SEM_PAD_AFTER_TIME 0
-#define __SEM_PAD_BEFORE_TIME 0
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
similarity index 56%
rename from sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h
rename to sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
index 5f4e214d12..8954209a29 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/types/struct_semid_ds.h
@@ -1,5 +1,5 @@ 
-/* Define where padding goes in struct semid_ds.  SPARC version.
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+/* MIPS implementation of the semaphore struct semid_ds
+   Copyright (C) 1995-2020 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
@@ -17,10 +17,16 @@ 
    <https://www.gnu.org/licenses/>.  */
 
 #ifndef _SYS_SEM_H
-# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
+# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."
 #endif
 
-#include <bits/timesize.h>
-
-#define __SEM_PAD_AFTER_TIME 0
-#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;		/* operation permission struct */
+  __time_t sem_otime;	/* last semop() time */
+  __time_t sem_ctime;	/* last time changed by semctl() */
+  __syscall_ulong_t sem_nsems;		/* number of semaphores in set */
+  __syscall_ulong_t __glibc_reserved3;
+  __syscall_ulong_t __glibc_reserved4;
+};
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h b/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h
deleted file mode 100644
index 42d8827906..0000000000
--- a/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h
+++ /dev/null
@@ -1,26 +0,0 @@ 
-/* Define where padding goes in struct semid_ds.  PowerPC version.
-   Copyright (C) 2018-2020 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/>.  */
-
-#ifndef _SYS_SEM_H
-# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
-#endif
-
-#include <bits/timesize.h>
-
-#define __SEM_PAD_AFTER_TIME 0
-#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
new file mode 100644
index 0000000000..d393141808
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/types/struct_semid_ds.h
@@ -0,0 +1,46 @@ 
+/* PowerPC implementation of the semaphore struct semid_ds
+   Copyright (C) 1995-2020 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/>.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."
+#endif
+
+/* Data structure describing a set of semaphores.  */
+#if __TIMESIZE == 32
+struct semid_ds
+{
+  struct ipc_perm sem_perm;   /* operation permission struct */
+  __syscall_ulong_t __glibc_reserved1;
+  __time_t sem_otime;  /* last semop() time */
+  __syscall_ulong_t __glibc_reserved2;
+  __time_t sem_ctime;  /* last time changed by semctl() */
+  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */
+  __syscall_ulong_t __glibc_reserved3;
+  __syscall_ulong_t __glibc_reserved4;
+};
+#else
+struct semid_ds
+{
+  struct ipc_perm sem_perm;		/* operation permission struct */
+  __time_t sem_otime;	/* last semop() time */
+  __time_t sem_ctime;	/* last time changed by semctl() */
+  __syscall_ulong_t sem_nsems;		/* number of semaphores in set */
+  __syscall_ulong_t __glibc_reserved3;
+  __syscall_ulong_t __glibc_reserved4;
+};
+#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
new file mode 100644
index 0000000000..84c7a9022a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/bits/types/struct_semid_ds.h
@@ -0,0 +1,46 @@ 
+/* Sparc implementation of the semaphore struct semid_ds
+   Copyright (C) 1995-2020 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/>.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."
+#endif
+
+/* Data structure describing a set of semaphores.  */
+#if __TIMESIZE == 32
+struct semid_ds
+{
+  struct ipc_perm sem_perm;   /* operation permission struct */
+  __syscall_ulong_t __glibc_reserved1;
+  __time_t sem_otime;  /* last semop() time */
+  __syscall_ulong_t __glibc_reserved2;
+  __time_t sem_ctime;  /* last time changed by semctl() */
+  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */
+  __syscall_ulong_t __glibc_reserved3;
+  __syscall_ulong_t __glibc_reserved4;
+};
+#else
+struct semid_ds
+{
+  struct ipc_perm sem_perm;		/* operation permission struct */
+  __time_t sem_otime;	/* last semop() time */
+  __time_t sem_ctime;	/* last time changed by semctl() */
+  __syscall_ulong_t sem_nsems;		/* number of semaphores in set */
+  __syscall_ulong_t __glibc_reserved3;
+  __syscall_ulong_t __glibc_reserved4;
+};
+#endif
diff --git a/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h b/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h
deleted file mode 100644
index 102e226997..0000000000
--- a/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h
+++ /dev/null
@@ -1,24 +0,0 @@ 
-/* Define where padding goes in struct semid_ds.  x86 version.
-   Copyright (C) 2018-2020 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/>.  */
-
-#ifndef _SYS_SEM_H
-# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
-#endif
-
-#define __SEM_PAD_AFTER_TIME 1
-#define __SEM_PAD_BEFORE_TIME 0
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
similarity index 52%
rename from sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h
rename to sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
index ee0332325b..22f0645f85 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h
+++ b/sysdeps/unix/sysv/linux/x86/bits/types/struct_semid_ds.h
@@ -1,5 +1,5 @@ 
-/* Define where padding goes in struct semid_ds.  HPPA version.
-   Copyright (C) 2018-2020 Free Software Foundation, Inc.
+/* Sparc implementation of the semaphore struct semid_ds
+   Copyright (C) 1995-2020 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
@@ -17,10 +17,18 @@ 
    <https://www.gnu.org/licenses/>.  */
 
 #ifndef _SYS_SEM_H
-# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
+# error "Never include <bits/types/struct_semid_ds.h> directly; use <sys/sem.h> instead."
 #endif
 
-#include <bits/timesize.h>
-
-#define __SEM_PAD_AFTER_TIME 0
-#define __SEM_PAD_BEFORE_TIME (__TIMESIZE == 32)
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;   /* operation permission struct */
+  __time_t sem_otime;  /* last semop() time */
+  __syscall_ulong_t __glibc_reserved1;
+  __time_t sem_ctime;  /* last time changed by semctl() */
+  __syscall_ulong_t __glibc_reserved2;
+  __syscall_ulong_t sem_nsems;    /* number of semaphores in set */
+  __syscall_ulong_t __glibc_reserved3;
+  __syscall_ulong_t __glibc_reserved4;
+};