This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Use single bits/sem.h for all architectures



On 15/10/2018 08:15, Joseph Myers wrote:
> Here is a corrected version of this patch that properly uses 
> __syscall_ulong_t for the padding around time fields as intended.
> 
> Use single bits/sem.h for all architectures.
> 
> The bits/sem.h headers for architectures using the Linux kernel vary
> in a few ways:
> 
> * x32 uses __syscall_ulong_t instead of unsigned long int.
> 
> * The x86 header uses padding after time fields unconditionally
>   (including for both x86_64 ABIs), not just for 32-bit time (unlike
>   in msqid_ds where there is only padding for 32-bit time).  Because
>   this padding is present for x32, and is __syscall_ulong_t there, it
>   does have to be __syscall_ulong_t, not unsigned long int.
> 
> * The MIPS header never uses padding around time fields, even when
>   32-bit (unlike in msqid_ds where it has endian-dependent padding for
>   32-bit time).
> 
> * Some older 32-bit big-endian architectures have padding before
>   rather than after time fields, although the preferred generic
>   approach is padding after the time fields independent of endianness.
> 
> (There are also insubstantial differences such as use of unsigned int
> for padding instead of unsigned long int, which makes no difference to
> layout since the padding fields using unsigned int are only present on
> 32-bit architectures.)
> 
> For the first, __syscall_ulong_t can be used in the generic version as
> it's the same as unsigned long int everywhere except x32.  For the
> other differences, this patch adds macros __SEM_PAD_BEFORE_TIME and
> __SEM_PAD_AFTER_TIME in a new bits/sem-pad.h header, so that header is
> the only one needing to be provided on architectures with differences
> in this area, and everything else can go in a single common bits/sem.h
> header.
> 
> Tested for x86_64 and x86, and with build-many-glibcs.py.
> 
> 2018-10-15  Joseph Myers  <joseph@codesourcery.com>
> 
> 	* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
> 	bits/sem-pad.h.
> 	* sysdeps/unix/sysv/linux/bits/sem.h: Include <bits/sem-pad.h>
> 	instead of <bits/wordsize.h>.
> 	(__SEM_PAD_TIME): New macro, depending on [__SEM_PAD_BEFORE_TIME]
> 	and [__SEM_PAD_AFTER_TIME].
> 	(struct semid_ds): Define time fields using __SEM_PAD_TIME.  Use
> 	__syscall_ulong_t instead of unsigned long int.
> 	* sysdeps/unix/sysv/linux/bits/sem-pad.h: New file.
> 	* sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h: Likewise.
> 	* sysdeps/unix/sysv/linux/mips/bits/sem-pad.h: Likewise.
> 	* sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h: Likewise.
> 	* sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h: Likewise.
> 	* sysdeps/unix/sysv/linux/x86/bits/sem-pad.h: Likewise.
> 	* sysdeps/unix/sysv/linux/hppa/bits/sem.h: Remove.
> 	* sysdeps/unix/sysv/linux/mips/bits/sem.h: Likewise.
> 	* sysdeps/unix/sysv/linux/powerpc/bits/sem.h: Likewise.
> 	* sysdeps/unix/sysv/linux/sparc/bits/sem.h: Likewise.
> 	* sysdeps/unix/sysv/linux/x86/bits/sem.h: Likewise.
> 
> diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
> index ff4535cdca..edb1d29bf3 100644
> --- a/sysdeps/unix/sysv/linux/Makefile
> +++ b/sysdeps/unix/sysv/linux/Makefile
> @@ -43,7 +43,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/msq-pad.h bits/sem-pad.h
>  
>  tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \
>  	 tst-quota tst-sync_file_range tst-sysconf-iov_max tst-ttyname \

Ok.

> diff --git a/sysdeps/unix/sysv/linux/bits/sem-pad.h b/sysdeps/unix/sysv/linux/bits/sem-pad.h
> new file mode 100644
> index 0000000000..77979976bd
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/bits/sem-pad.h
> @@ -0,0 +1,31 @@
> +/* Define where padding goes in struct semid_ds.  Generic version.
> +   Copyright (C) 2018 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
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#ifndef _SYS_SEM_H
> +# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
> +#endif
> +
> +#include <bits/wordsize.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.  */
> +
> +#define __SEM_PAD_AFTER_TIME (__WORDSIZE == 32)
> +#define __SEM_PAD_BEFORE_TIME 0

Since we currently we pass the user-defined semid_ds directly to kernel on
semctl, I think it is worth to add generic Linux UAPI expects news ports to
follow kernel semid64_ds layout:

  - 64 bit architectures uses 64-bit __kernel_time_t (so no padding)

  - 32 bit architectures have a pair of unsigned long values and on big-endian
    system the padding is on wrong place dure historic reasons.

> diff --git a/sysdeps/unix/sysv/linux/bits/sem.h b/sysdeps/unix/sysv/linux/bits/sem.h
> index bf6d797080..d6e879ea0f 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/wordsize.h>
> +#include <bits/sem-pad.h>
>  
>  /* Flags for `semop'.  */
>  #define SEM_UNDO	0x1000		/* undo the operation on exit */
> @@ -35,21 +35,26 @@
>  #define SETALL		17		/* set all semval's */
>  
>  
> +#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
> +

I think also we should comment that if ABI uses a different type than
unsigned long for __syscall_ulong_t it should re-define semid_ds.

>  /* 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 */
> -#if __WORDSIZE == 32
> -  unsigned long int __glibc_reserved1;
> -#endif
> -  __time_t sem_ctime;			/* last time changed by semctl() */
> -#if __WORDSIZE == 32
> -  unsigned long int __glibc_reserved2;
> -#endif
> -  unsigned long int sem_nsems;		/* number of semaphores in set */
> -  unsigned long int __glibc_reserved3;
> -  unsigned long int __glibc_reserved4;
> +  __SEM_PAD_TIME (sem_otime, 1);	/* last semop() time */
> +  __SEM_PAD_TIME (sem_ctime, 2);	/* 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;
>  };
>  
>  /* The user should define a union like the following to use it for arguments
> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h b/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h
> new file mode 100644
> index 0000000000..a938c2c92b
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/hppa/bits/sem-pad.h
> @@ -0,0 +1,26 @@
> +/* Define where padding goes in struct semid_ds.  HPPA version.
> +   Copyright (C) 2018 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
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#ifndef _SYS_SEM_H
> +# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
> +#endif
> +
> +#include <bits/wordsize.h>
> +
> +#define __SEM_PAD_AFTER_TIME 0
> +#define __SEM_PAD_BEFORE_TIME (__WORDSIZE == 32)

Ok.

> diff --git a/sysdeps/unix/sysv/linux/hppa/bits/sem.h b/sysdeps/unix/sysv/linux/hppa/bits/sem.h
> deleted file mode 100644
> index 12b849ae79..0000000000
> --- a/sysdeps/unix/sysv/linux/hppa/bits/sem.h
> +++ /dev/null
> @@ -1,92 +0,0 @@
> -/* Copyright (C) 1995-2018 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
> -   <http://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SYS_SEM_H
> -# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
> -#endif
> -
> -#include <sys/types.h>
> -#include <bits/wordsize.h>
> -
> -/* Flags for `semop'.  */
> -#define SEM_UNDO	0x1000		/* undo the operation on exit */
> -
> -/* Commands for `semctl'.  */
> -#define GETPID		11		/* get sempid */
> -#define GETVAL		12		/* get semval */
> -#define GETALL		13		/* get all semval's */
> -#define GETNCNT		14		/* get semncnt */
> -#define GETZCNT		15		/* get semzcnt */
> -#define SETVAL		16		/* set semval */
> -#define SETALL		17		/* set all semval's */
> -
> -
> -/* Data structure describing a set of semaphores.  */
> -struct semid_ds
> -{
> -  struct ipc_perm sem_perm;		/* operation permission struct */
> -#if __WORDSIZE == 32
> -  unsigned int __pad1;
> -#endif
> -  __time_t sem_otime;			/* last semop() time */
> -#if __WORDSIZE == 32
> -  unsigned int __pad2;
> -#endif
> -  __time_t sem_ctime;			/* last time changed by semctl() */
> -  unsigned long int sem_nsems;		/* number of semaphores in set */
> -  unsigned long int __glibc_reserved1;
> -  unsigned long int __glibc_reserved2;
> -};
> -
> -/* The user should define a union like the following to use it for arguments
> -   for `semctl'.
> -
> -   union semun
> -   {
> -     int val;				<= value for SETVAL
> -     struct semid_ds *buf;		<= buffer for IPC_STAT & IPC_SET
> -     unsigned short int *array;		<= array for GETALL & SETALL
> -     struct seminfo *__buf;		<= buffer for IPC_INFO
> -   };
> -
> -   Previous versions of this file used to define this union but this is
> -   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
> -   one must define the union or not.  */
> -#define _SEM_SEMUN_UNDEFINED	1
> -
> -#ifdef __USE_MISC
> -
> -/* ipcs ctl cmds */
> -# define SEM_STAT 18
> -# define SEM_INFO 19
> -# define SEM_STAT_ANY 20
> -
> -struct  seminfo
> -{
> -  int semmap;
> -  int semmni;
> -  int semmns;
> -  int semmnu;
> -  int semmsl;
> -  int semopm;
> -  int semume;
> -  int semusz;
> -  int semvmx;
> -  int semaem;
> -};
> -
> -#endif /* __USE_MISC */

Ok.

> diff --git a/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h b/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h
> new file mode 100644
> index 0000000000..61f27cbc8f
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/mips/bits/sem-pad.h
> @@ -0,0 +1,24 @@
> +/* Define where padding goes in struct semid_ds.  MIPS version.
> +   Copyright (C) 2018 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
> +   <http://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/mips/bits/sem.h b/sysdeps/unix/sysv/linux/mips/bits/sem.h
> deleted file mode 100644
> index d218cf4f92..0000000000
> --- a/sysdeps/unix/sysv/linux/mips/bits/sem.h
> +++ /dev/null
> @@ -1,85 +0,0 @@
> -/* Copyright (C) 1995-2018 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
> -   <http://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SYS_SEM_H
> -# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
> -#endif
> -
> -#include <sys/types.h>
> -
> -/* Flags for `semop'.  */
> -#define SEM_UNDO	0x1000		/* undo the operation on exit */
> -
> -/* Commands for `semctl'.  */
> -#define GETPID		11		/* get sempid */
> -#define GETVAL		12		/* get semval */
> -#define GETALL		13		/* get all semval's */
> -#define GETNCNT		14		/* get semncnt */
> -#define GETZCNT		15		/* get semzcnt */
> -#define SETVAL		16		/* set semval */
> -#define SETALL		17		/* set all semval's */
> -
> -
> -/* 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() */
> -  unsigned long int sem_nsems;		/* number of semaphores in set */
> -  unsigned long int __glibc_reserved1;
> -  unsigned long int __glibc_reserved2;
> -};
> -
> -/* The user should define a union like the following to use it for arguments
> -   for `semctl'.
> -
> -   union semun
> -   {
> -     int val;				<= value for SETVAL
> -     struct semid_ds *buf;		<= buffer for IPC_STAT & IPC_SET
> -     unsigned short int *array;		<= array for GETALL & SETALL
> -     struct seminfo *__buf;		<= buffer for IPC_INFO
> -   };
> -
> -   Previous versions of this file used to define this union but this is
> -   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
> -   one must define the union or not.  */
> -#define _SEM_SEMUN_UNDEFINED	1
> -
> -#ifdef __USE_MISC
> -
> -/* ipcs ctl cmds */
> -# define SEM_STAT 18
> -# define SEM_INFO 19
> -# define SEM_STAT_ANY 20
> -
> -struct  seminfo
> -{
> -  int semmap;
> -  int semmni;
> -  int semmns;
> -  int semmnu;
> -  int semmsl;
> -  int semopm;
> -  int semume;
> -  int semusz;
> -  int semvmx;
> -  int semaem;
> -};
> -
> -#endif /* __USE_MISC */

Ok.

> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h b/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h
> new file mode 100644
> index 0000000000..d4c9a93956
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/sem-pad.h
> @@ -0,0 +1,26 @@
> +/* Define where padding goes in struct semid_ds.  PowerPC version.
> +   Copyright (C) 2018 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
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#ifndef _SYS_SEM_H
> +# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
> +#endif
> +
> +#include <bits/wordsize.h>
> +
> +#define __SEM_PAD_AFTER_TIME 0
> +#define __SEM_PAD_BEFORE_TIME (__WORDSIZE == 32)

Ok.

> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/sem.h b/sysdeps/unix/sysv/linux/powerpc/bits/sem.h
> deleted file mode 100644
> index 27b026cf61..0000000000
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/sem.h
> +++ /dev/null
> @@ -1,91 +0,0 @@
> -/* Copyright (C) 1995-2018 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
> -   <http://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SYS_SEM_H
> -# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
> -#endif
> -
> -#include <sys/types.h>
> -
> -/* Flags for `semop'.  */
> -#define SEM_UNDO       0x1000          /* undo the operation on exit */
> -
> -/* Commands for `semctl'.  */
> -#define GETPID         11              /* get sempid */
> -#define GETVAL         12              /* get semval */
> -#define GETALL         13              /* get all semval's */
> -#define GETNCNT                14              /* get semncnt */
> -#define GETZCNT                15              /* get semzcnt */
> -#define SETVAL         16              /* set semval */
> -#define SETALL         17              /* set all semval's */
> -
> -
> -/* Data structure describing a set of semaphores.  */
> -struct semid_ds
> -{
> -  struct ipc_perm sem_perm;            /* operation permission struct */
> -#if __WORDSIZE == 32
> -  unsigned int __glibc_reserved1;
> -#endif
> -  __time_t sem_otime;                  /* last semop() time */
> -#if __WORDSIZE == 32
> -  unsigned int __glibc_reserved2;
> -#endif
> -  __time_t sem_ctime;                  /* last time changed by semctl() */
> -  unsigned long int sem_nsems;         /* number of semaphores in set */
> -  unsigned long __glibc_reserved3;
> -  unsigned long __glibc_reserved4;
> -};
> -
> -/* The user should define a union like the following to use it for arguments
> -   for `semctl'.
> -
> -   union semun
> -   {
> -     int val;                          <= value for SETVAL
> -     struct semid_ds *buf;             <= buffer for IPC_STAT & IPC_SET
> -     unsigned short int *array;                <= array for GETALL & SETALL
> -     struct seminfo *__buf;            <= buffer for IPC_INFO
> -   };
> -
> -   Previous versions of this file used to define this union but this is
> -   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
> -   one must define the union or not.  */
> -#define _SEM_SEMUN_UNDEFINED   1
> -
> -#ifdef __USE_MISC
> -
> -/* ipcs ctl cmds */
> -# define SEM_STAT 18
> -# define SEM_INFO 19
> -# define SEM_STAT_ANY 20
> -
> -struct  seminfo
> -{
> -  int semmap;
> -  int semmni;
> -  int semmns;
> -  int semmnu;
> -  int semmsl;
> -  int semopm;
> -  int semume;
> -  int semusz;
> -  int semvmx;
> -  int semaem;
> -};
> -
> -#endif /* __USE_MISC */

Ok.

> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h b/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h
> new file mode 100644
> index 0000000000..b85f6b70a2
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/sparc/bits/sem-pad.h
> @@ -0,0 +1,26 @@
> +/* Define where padding goes in struct semid_ds.  SPARC version.
> +   Copyright (C) 2018 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
> +   <http://www.gnu.org/licenses/>.  */
> +
> +#ifndef _SYS_SEM_H
> +# error "Never use <bits/sem-pad.h> directly; include <sys/sem.h> instead."
> +#endif
> +
> +#include <bits/wordsize.h>
> +
> +#define __SEM_PAD_AFTER_TIME 0
> +#define __SEM_PAD_BEFORE_TIME (__WORDSIZE == 32)

Ok.

> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sem.h b/sysdeps/unix/sysv/linux/sparc/bits/sem.h
> deleted file mode 100644
> index f5b2654eec..0000000000
> --- a/sysdeps/unix/sysv/linux/sparc/bits/sem.h
> +++ /dev/null
> @@ -1,92 +0,0 @@
> -/* Copyright (C) 1995-2018 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
> -   <http://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SYS_SEM_H
> -# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
> -#endif
> -
> -#include <sys/types.h>
> -#include <bits/wordsize.h>
> -
> -/* Flags for `semop'.  */
> -#define SEM_UNDO	0x1000		/* undo the operation on exit */
> -
> -/* Commands for `semctl'.  */
> -#define GETPID		11		/* get sempid */
> -#define GETVAL		12		/* get semval */
> -#define GETALL		13		/* get all semval's */
> -#define GETNCNT		14		/* get semncnt */
> -#define GETZCNT		15		/* get semzcnt */
> -#define SETVAL		16		/* set semval */
> -#define SETALL		17		/* set all semval's */
> -
> -
> -/* Data structure describing a set of semaphores.  */
> -struct semid_ds
> -{
> -  struct ipc_perm sem_perm;		/* operation permission struct */
> -#if __WORDSIZE == 32
> -  unsigned int __pad1;
> -#endif
> -  __time_t sem_otime;			/* last semop() time */
> -#if __WORDSIZE == 32
> -  unsigned int __pad2;
> -#endif
> -  __time_t sem_ctime;			/* last time changed by semctl() */
> -  unsigned long int sem_nsems;		/* number of semaphores in set */
> -  unsigned long int __glibc_reserved1;
> -  unsigned long int __glibc_reserved2;
> -};
> -
> -/* The user should define a union like the following to use it for arguments
> -   for `semctl'.
> -
> -   union semun
> -   {
> -     int val;				<= value for SETVAL
> -     struct semid_ds *buf;		<= buffer for IPC_STAT & IPC_SET
> -     unsigned short int *array;		<= array for GETALL & SETALL
> -     struct seminfo *__buf;		<= buffer for IPC_INFO
> -   };
> -
> -   Previous versions of this file used to define this union but this is
> -   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
> -   one must define the union or not.  */
> -#define _SEM_SEMUN_UNDEFINED	1
> -
> -#ifdef __USE_MISC
> -
> -/* ipcs ctl cmds */
> -# define SEM_STAT 18
> -# define SEM_INFO 19
> -# define SEM_STAT_ANY 20
> -
> -struct  seminfo
> -{
> -  int semmap;
> -  int semmni;
> -  int semmns;
> -  int semmnu;
> -  int semmsl;
> -  int semopm;
> -  int semume;
> -  int semusz;
> -  int semvmx;
> -  int semaem;
> -};
> -
> -#endif /* __USE_MISC */

Ok.

> diff --git a/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h b/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h
> new file mode 100644
> index 0000000000..625f8ed21e
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/x86/bits/sem-pad.h
> @@ -0,0 +1,24 @@
> +/* Define where padding goes in struct semid_ds.  x86 version.
> +   Copyright (C) 2018 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
> +   <http://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/x86/bits/sem.h b/sysdeps/unix/sysv/linux/x86/bits/sem.h
> deleted file mode 100644
> index 6771966a06..0000000000
> --- a/sysdeps/unix/sysv/linux/x86/bits/sem.h
> +++ /dev/null
> @@ -1,87 +0,0 @@
> -/* Copyright (C) 2002-2018 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
> -   <http://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SYS_SEM_H
> -# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
> -#endif
> -
> -#include <sys/types.h>
> -
> -/* Flags for `semop'.  */
> -#define SEM_UNDO	0x1000		/* undo the operation on exit */
> -
> -/* Commands for `semctl'.  */
> -#define GETPID		11		/* get sempid */
> -#define GETVAL		12		/* get semval */
> -#define GETALL		13		/* get all semval's */
> -#define GETNCNT		14		/* get semncnt */
> -#define GETZCNT		15		/* get semzcnt */
> -#define SETVAL		16		/* set semval */
> -#define SETALL		17		/* set all semval's */
> -
> -
> -/* 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;
> -};
> -
> -/* The user should define a union like the following to use it for arguments
> -   for `semctl'.
> -
> -   union semun
> -   {
> -     int val;				<= value for SETVAL
> -     struct semid_ds *buf;		<= buffer for IPC_STAT & IPC_SET
> -     unsigned short int *array;		<= array for GETALL & SETALL
> -     struct seminfo *__buf;		<= buffer for IPC_INFO
> -   };
> -
> -   Previous versions of this file used to define this union but this is
> -   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
> -   one must define the union or not.  */
> -#define _SEM_SEMUN_UNDEFINED	1
> -
> -#ifdef __USE_MISC
> -
> -/* ipcs ctl cmds */
> -# define SEM_STAT 18
> -# define SEM_INFO 19
> -# define SEM_STAT_ANY 20
> -
> -struct  seminfo
> -{
> -  int semmap;
> -  int semmni;
> -  int semmns;
> -  int semmnu;
> -  int semmsl;
> -  int semopm;
> -  int semume;
> -  int semusz;
> -  int semvmx;
> -  int semaem;
> -};
> -
> -#endif /* __USE_MISC */
> 

Ok.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]