Use single bits/shm.h for all architectures.
authorJoseph Myers <joseph@codesourcery.com>
Wed, 17 Oct 2018 11:56:28 +0000 (11:56 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 17 Oct 2018 11:56:28 +0000 (11:56 +0000)
After my patch to move SHMLBA to its own header, the bits/shm.h
headers for architectures using the Linux kernel still vary in a few
ways: the use of __syscall_ulong_t; whether padding for 32-bit systems
is present before or after time fields, or missing altogether (mips,
x32); whether shm_segsz is before or after the time fields; whether,
if after time fields, there is extra padding before shm_segsz.

This patch arranges for a single header to be used.  __syscall_ulong_t
is safe to use everywhere, while bits/shm-pad.h is added with new
macros __SHM_PAD_AFTER_TIME, __SHM_PAD_BEFORE_TIME,
__SHM_SEGSZ_AFTER_TIME and __SHM_PAD_BETWEEN_TIME_AND_SEGSZ to
describe the differences.

Tested for x86_64 and x86, and with build-many-glibcs.py.

* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
bits/shm-pad.h.
* sysdeps/unix/sysv/linux/bits/shm.h: Include <bits/shm-pad.h>.
(shmatt_t): Define as __syscall_ulong_t.
(__SHM_PAD_TIME): New macro, depending on [__SHM_PAD_BEFORE_TIME]
and [__SHM_PAD_AFTER_TIME].
(struct shmid_ds): Define time fields using __SHM_PAD_TIME.
Define shm_segsz and associated padding based on
[__SHM_SEGSZ_AFTER_TIME] and [__SHM_PAD_BETWEEN_TIME_AND_SEGSZ].
Use __syscall_ulong_t instead of unsigned long int.
[__USE_MISC] (struct shminfo): Use __syscall_ulong_t instead of
unsigned long int.
[__USE_MISC] (struct shm_info): Likewise.
* sysdeps/unix/sysv/linux/bits/shm-pad.h: New file.
* sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/shm-pad.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h: Likewise.
* sysdeps/unix/sysv/linux/x86/bits/shm-pad.h: Likewise.
* sysdeps/unix/sysv/linux/hppa/bits/shm.h: Remove.
* sysdeps/unix/sysv/linux/mips/bits/shm.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/shm.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/shm.h: Likewise.
* sysdeps/unix/sysv/linux/x86/bits/shm.h: Likewise.

14 files changed:
ChangeLog
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/bits/shm-pad.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/bits/shm.h
sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/hppa/bits/shm.h [deleted file]
sysdeps/unix/sysv/linux/mips/bits/shm-pad.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/mips/bits/shm.h [deleted file]
sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/powerpc/bits/shm.h [deleted file]
sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sparc/bits/shm.h [deleted file]
sysdeps/unix/sysv/linux/x86/bits/shm-pad.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/x86/bits/shm.h [deleted file]

index 0b2100f..0f3a846 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,31 @@
 2018-10-17  Joseph Myers  <joseph@codesourcery.com>
 
        * sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
+       bits/shm-pad.h.
+       * sysdeps/unix/sysv/linux/bits/shm.h: Include <bits/shm-pad.h>.
+       (shmatt_t): Define as __syscall_ulong_t.
+       (__SHM_PAD_TIME): New macro, depending on [__SHM_PAD_BEFORE_TIME]
+       and [__SHM_PAD_AFTER_TIME].
+       (struct shmid_ds): Define time fields using __SHM_PAD_TIME.
+       Define shm_segsz and associated padding based on
+       [__SHM_SEGSZ_AFTER_TIME] and [__SHM_PAD_BETWEEN_TIME_AND_SEGSZ].
+       Use __syscall_ulong_t instead of unsigned long int.
+       [__USE_MISC] (struct shminfo): Use __syscall_ulong_t instead of
+       unsigned long int.
+       [__USE_MISC] (struct shm_info): Likewise.
+       * sysdeps/unix/sysv/linux/bits/shm-pad.h: New file.
+       * sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h: Likewise.
+       * sysdeps/unix/sysv/linux/mips/bits/shm-pad.h: Likewise.
+       * sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h: Likewise.
+       * sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h: Likewise.
+       * sysdeps/unix/sysv/linux/x86/bits/shm-pad.h: Likewise.
+       * sysdeps/unix/sysv/linux/hppa/bits/shm.h: Remove.
+       * sysdeps/unix/sysv/linux/mips/bits/shm.h: Likewise.
+       * sysdeps/unix/sysv/linux/powerpc/bits/shm.h: Likewise.
+       * sysdeps/unix/sysv/linux/sparc/bits/shm.h: Likewise.
+       * sysdeps/unix/sysv/linux/x86/bits/shm.h: Likewise.
+
+       * sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add
        bits/shmlba.h.
        * sysdeps/unix/sysv/linux/bits/shm.h: Include <bits/shmlba.h>.
        (SHMLBA): Remove macro.
index 27c7ef6..72b6b64 100644 (file)
@@ -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/sem-pad.h bits/shmlba.h
+                 bits/msq-pad.h bits/sem-pad.h bits/shmlba.h bits/shm-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 \
diff --git a/sysdeps/unix/sysv/linux/bits/shm-pad.h b/sysdeps/unix/sysv/linux/bits/shm-pad.h
new file mode 100644 (file)
index 0000000..9233c95
--- /dev/null
@@ -0,0 +1,37 @@
+/* Define where padding goes in struct shmid_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_SHM_H
+# error "Never use <bits/shm-pad.h> directly; include <sys/shm.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.  Furthermore, some
+   architectures place shm_segsz after the time fields rather than
+   before them, with or without padding there.  This must match the
+   layout used for struct shmid64_ds in <asm/shmbuf.h>, as glibc does
+   not do layout conversions for this structure.  */
+
+#define __SHM_PAD_AFTER_TIME (__WORDSIZE == 32)
+#define __SHM_PAD_BEFORE_TIME 0
+#define __SHM_SEGSZ_AFTER_TIME 0
+#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ 0
index c305ee4..68ac6e9 100644 (file)
@@ -22,6 +22,7 @@
 #include <bits/types.h>
 #include <bits/wordsize.h>
 #include <bits/shmlba.h>
+#include <bits/shm-pad.h>
 
 /* Permission flag for shmget.  */
 #define SHM_R          0400            /* or S_IRUGO from <linux/stat.h> */
 __BEGIN_DECLS
 
 /* Type to count number of attaches.  */
-typedef unsigned long int shmatt_t;
+typedef __syscall_ulong_t shmatt_t;
+
+#if __SHM_PAD_BEFORE_TIME
+# define __SHM_PAD_TIME(NAME, RES)                             \
+  unsigned long int __glibc_reserved ## RES; __time_t NAME
+#elif __SHM_PAD_AFTER_TIME
+# define __SHM_PAD_TIME(NAME, RES)                             \
+  __time_t NAME; unsigned long int __glibc_reserved ## RES
+#else
+# define __SHM_PAD_TIME(NAME, RES)             \
+  __time_t NAME
+#endif
 
 /* Data structure describing a shared memory segment.  */
 struct shmid_ds
   {
     struct ipc_perm shm_perm;          /* operation permission struct */
+#if !__SHM_SEGSZ_AFTER_TIME
     size_t shm_segsz;                  /* size of segment in bytes */
-    __time_t shm_atime;                        /* time of last shmat() */
-#if __WORDSIZE == 32
-    unsigned long int __glibc_reserved1;
 #endif
-    __time_t shm_dtime;                        /* time of last shmdt() */
-#if __WORDSIZE == 32
-    unsigned long int __glibc_reserved2;
+    __SHM_PAD_TIME (shm_atime, 1);     /* time of last shmat() */
+    __SHM_PAD_TIME (shm_dtime, 2);     /* time of last shmdt() */
+    __SHM_PAD_TIME (shm_ctime, 3);     /* time of last change by shmctl() */
+#if __SHM_PAD_BETWEEN_TIME_AND_SEGSZ
+    unsigned long int __glibc_reserved4;
 #endif
-    __time_t shm_ctime;                        /* time of last change by shmctl() */
-#if __WORDSIZE == 32
-    unsigned long int __glibc_reserved3;
+#if __SHM_SEGSZ_AFTER_TIME
+    size_t shm_segsz;                  /* size of segment in bytes */
 #endif
     __pid_t shm_cpid;                  /* pid of creator */
     __pid_t shm_lpid;                  /* pid of last shmop */
     shmatt_t shm_nattch;               /* number of current attaches */
-    unsigned long int __glibc_reserved4;
-    unsigned long int __glibc_reserved5;
+    __syscall_ulong_t __glibc_reserved5;
+    __syscall_ulong_t __glibc_reserved6;
   };
 
 #ifdef __USE_MISC
@@ -81,25 +92,25 @@ struct shmid_ds
 
 struct shminfo
   {
-    unsigned long int shmmax;
-    unsigned long int shmmin;
-    unsigned long int shmmni;
-    unsigned long int shmseg;
-    unsigned long int shmall;
-    unsigned long int __glibc_reserved1;
-    unsigned long int __glibc_reserved2;
-    unsigned long int __glibc_reserved3;
-    unsigned long int __glibc_reserved4;
+    __syscall_ulong_t shmmax;
+    __syscall_ulong_t shmmin;
+    __syscall_ulong_t shmmni;
+    __syscall_ulong_t shmseg;
+    __syscall_ulong_t shmall;
+    __syscall_ulong_t __glibc_reserved1;
+    __syscall_ulong_t __glibc_reserved2;
+    __syscall_ulong_t __glibc_reserved3;
+    __syscall_ulong_t __glibc_reserved4;
   };
 
 struct shm_info
   {
     int used_ids;
-    unsigned long int shm_tot; /* total allocated shm */
-    unsigned long int shm_rss; /* total resident shm */
-    unsigned long int shm_swp; /* total swapped shm */
-    unsigned long int swap_attempts;
-    unsigned long int swap_successes;
+    __syscall_ulong_t shm_tot; /* total allocated shm */
+    __syscall_ulong_t shm_rss; /* total resident shm */
+    __syscall_ulong_t shm_swp; /* total swapped shm */
+    __syscall_ulong_t swap_attempts;
+    __syscall_ulong_t swap_successes;
   };
 
 #endif /* __USE_MISC */
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h b/sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h
new file mode 100644 (file)
index 0000000..6a9c5dd
--- /dev/null
@@ -0,0 +1,28 @@
+/* Define where padding goes in struct shmid_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_SHM_H
+# error "Never use <bits/shm-pad.h> directly; include <sys/shm.h> instead."
+#endif
+
+#include <bits/wordsize.h>
+
+#define __SHM_PAD_AFTER_TIME 0
+#define __SHM_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __SHM_SEGSZ_AFTER_TIME 1
+#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ (__WORDSIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/shm.h b/sysdeps/unix/sysv/linux/hppa/bits/shm.h
deleted file mode 100644 (file)
index fed18e4..0000000
+++ /dev/null
@@ -1,106 +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_SHM_H
-# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
-#endif
-
-#include <bits/types.h>
-#include <bits/wordsize.h>
-#include <bits/shmlba.h>
-
-/* Permission flag for shmget.  */
-#define SHM_R          0400            /* or S_IRUGO from <linux/stat.h> */
-#define SHM_W          0200            /* or S_IWUGO from <linux/stat.h> */
-
-/* Flags for `shmat'.  */
-#define SHM_RDONLY     010000          /* attach read-only else read-write */
-#define SHM_RND                020000          /* round attach address to SHMLBA */
-#define SHM_REMAP      040000          /* take-over region on attach */
-#define SHM_EXEC       0100000         /* execution access */
-
-/* Commands for `shmctl'.  */
-#define SHM_LOCK       11              /* lock segment (root only) */
-#define SHM_UNLOCK     12              /* unlock segment (root only) */
-
-/* Type to count number of attaches.  */
-typedef unsigned long int shmatt_t;
-
-/* Data structure describing a shared memory segment.  */
-struct shmid_ds
-  {
-    struct ipc_perm shm_perm;          /* operation permission struct */
-#if __WORDSIZE == 32
-    unsigned int __pad1;
-#endif
-    __time_t shm_atime;                        /* time of last shmat() */
-#if __WORDSIZE == 32
-    unsigned int __pad2;
-#endif
-    __time_t shm_dtime;                        /* time of last shmdt() */
-#if __WORDSIZE == 32
-    unsigned int __pad3;
-#endif
-    __time_t shm_ctime;                        /* time of last change by shmctl() */
-#if __WORDSIZE == 32
-    unsigned int __pad4;
-#endif
-    size_t shm_segsz;                  /* size of segment in bytes */
-    __pid_t shm_cpid;                  /* pid of creator */
-    __pid_t shm_lpid;                  /* pid of last shmop */
-    shmatt_t shm_nattch;               /* number of current attaches */
-    unsigned long int __glibc_reserved1;
-    unsigned long int __glibc_reserved2;
-  };
-
-#ifdef __USE_MISC
-
-/* ipcs ctl commands */
-# define SHM_STAT      13
-# define SHM_INFO      14
-# define SHM_STAT_ANY  15
-
-/* shm_mode upper byte flags */
-# define SHM_DEST      01000   /* segment will be destroyed on last detach */
-# define SHM_LOCKED    02000   /* segment will not be swapped */
-# define SHM_HUGETLB   04000   /* segment is mapped via hugetlb */
-# define SHM_NORESERVE 010000  /* don't check for reservations */
-
-struct shminfo
-  {
-    unsigned long shmmax;
-    unsigned long shmmin;
-    unsigned long shmmni;
-    unsigned long shmseg;
-    unsigned long shmall;
-    unsigned long __glibc_reserved1;
-    unsigned long __glibc_reserved2;
-    unsigned long __glibc_reserved3;
-    unsigned long __glibc_reserved4;
-  };
-
-struct shm_info
-  {
-    int used_ids;
-    unsigned long int shm_tot; /* total allocated shm */
-    unsigned long int shm_rss; /* total resident shm */
-    unsigned long int shm_swp; /* total swapped shm */
-    unsigned long int swap_attempts;
-    unsigned long int swap_successes;
-  };
-
-#endif /* __USE_MISC */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/shm-pad.h b/sysdeps/unix/sysv/linux/mips/bits/shm-pad.h
new file mode 100644 (file)
index 0000000..efa2617
--- /dev/null
@@ -0,0 +1,26 @@
+/* Define where padding goes in struct shmid_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_SHM_H
+# error "Never use <bits/shm-pad.h> directly; include <sys/shm.h> instead."
+#endif
+
+#define __SHM_PAD_AFTER_TIME 0
+#define __SHM_PAD_BEFORE_TIME 0
+#define __SHM_SEGSZ_AFTER_TIME 0
+#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ 0
diff --git a/sysdeps/unix/sysv/linux/mips/bits/shm.h b/sysdeps/unix/sysv/linux/mips/bits/shm.h
deleted file mode 100644 (file)
index 4320bd4..0000000
+++ /dev/null
@@ -1,94 +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_SHM_H
-# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
-#endif
-
-#include <bits/types.h>
-#include <bits/shmlba.h>
-
-/* Permission flag for shmget.  */
-#define SHM_R          0400            /* or S_IRUGO from <linux/stat.h> */
-#define SHM_W          0200            /* or S_IWUGO from <linux/stat.h> */
-
-/* Flags for `shmat'.  */
-#define SHM_RDONLY     010000          /* attach read-only else read-write */
-#define SHM_RND                020000          /* round attach address to SHMLBA */
-#define SHM_REMAP      040000          /* take-over region on attach */
-#define SHM_EXEC       0100000         /* execution access */
-
-/* Commands for `shmctl'.  */
-#define SHM_LOCK       11              /* lock segment (root only) */
-#define SHM_UNLOCK     12              /* unlock segment (root only) */
-
-
-/* Type to count number of attaches.  */
-typedef unsigned long int shmatt_t;
-
-/* Data structure describing a shared memory segment.  */
-struct shmid_ds
-  {
-    struct ipc_perm shm_perm;          /* operation permission struct */
-    size_t shm_segsz;                  /* size of segment in bytes */
-    __time_t shm_atime;                        /* time of last shmat() */
-    __time_t shm_dtime;                        /* time of last shmdt() */
-    __time_t shm_ctime;                        /* time of last change by shmctl() */
-    __pid_t shm_cpid;                  /* pid of creator */
-    __pid_t shm_lpid;                  /* pid of last shmop */
-    shmatt_t shm_nattch;               /* number of current attaches */
-    unsigned long int __glibc_reserved1;
-    unsigned long int __glibc_reserved2;
-  };
-
-#ifdef __USE_MISC
-
-/* ipcs ctl commands */
-# define SHM_STAT      13
-# define SHM_INFO      14
-# define SHM_STAT_ANY  15
-
-/* shm_mode upper byte flags */
-# define SHM_DEST      01000   /* segment will be destroyed on last detach */
-# define SHM_LOCKED    02000   /* segment will not be swapped */
-# define SHM_HUGETLB   04000   /* segment is mapped via hugetlb */
-# define SHM_NORESERVE 010000  /* don't check for reservations */
-
-struct shminfo
-  {
-    unsigned long int shmmax;
-    unsigned long int shmmin;
-    unsigned long int shmmni;
-    unsigned long int shmseg;
-    unsigned long int shmall;
-    unsigned long int __glibc_reserved1;
-    unsigned long int __glibc_reserved2;
-    unsigned long int __glibc_reserved3;
-    unsigned long int __glibc_reserved4;
-  };
-
-struct shm_info
-  {
-    int used_ids;
-    unsigned long int shm_tot;  /* total allocated shm */
-    unsigned long int shm_rss;  /* total resident shm */
-    unsigned long int shm_swp;  /* total swapped shm */
-    unsigned long int swap_attempts;
-    unsigned long int swap_successes;
-  };
-
-#endif /* __USE_MISC */
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h b/sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h
new file mode 100644 (file)
index 0000000..69a7e4a
--- /dev/null
@@ -0,0 +1,28 @@
+/* Define where padding goes in struct shmid_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_SHM_H
+# error "Never use <bits/shm-pad.h> directly; include <sys/shm.h> instead."
+#endif
+
+#include <bits/wordsize.h>
+
+#define __SHM_PAD_AFTER_TIME 0
+#define __SHM_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __SHM_SEGSZ_AFTER_TIME 1
+#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ (__WORDSIZE == 32)
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/shm.h b/sysdeps/unix/sysv/linux/powerpc/bits/shm.h
deleted file mode 100644 (file)
index a41a1ab..0000000
+++ /dev/null
@@ -1,110 +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_SHM_H
-# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
-#endif
-
-#include <bits/types.h>
-#include <bits/shmlba.h>
-
-/* Permission flag for shmget.  */
-#define SHM_R          0400            /* or S_IRUGO from <linux/stat.h> */
-#define SHM_W          0200            /* or S_IWUGO from <linux/stat.h> */
-
-/* Flags for `shmat'.  */
-#define SHM_RDONLY     010000          /* attach read-only else read-write */
-#define SHM_RND                020000          /* round attach address to SHMLBA */
-#define SHM_REMAP      040000          /* take-over region on attach */
-#define SHM_EXEC       0100000         /* execution access */
-
-/* Commands for `shmctl'.  */
-#define SHM_LOCK       11              /* lock segment (root only) */
-#define SHM_UNLOCK     12              /* unlock segment (root only) */
-
-__BEGIN_DECLS
-
-
-/* Type to count number of attaches.  */
-typedef unsigned long int shmatt_t;
-
-/* Data structure describing a shared memory segment.  */
-struct shmid_ds
-  {
-    struct ipc_perm shm_perm;          /* operation permission struct */
-#if __WORDSIZE == 32
-    unsigned int __glibc_reserved1;
-#endif
-    __time_t shm_atime;                        /* time of last shmat() */
-#if __WORDSIZE == 32
-    unsigned int __glibc_reserved2;
-#endif
-    __time_t shm_dtime;                        /* time of last shmdt() */
-#if __WORDSIZE == 32
-    unsigned int __glibc_reserved3;
-#endif
-    __time_t shm_ctime;                        /* time of last change by shmctl() */
-#if __WORDSIZE == 32
-    unsigned int __glibc_reserved4;
-#endif
-    size_t shm_segsz;                  /* size of segment in bytes */
-    __pid_t shm_cpid;                  /* pid of creator */
-    __pid_t shm_lpid;                  /* pid of last shmop */
-    shmatt_t shm_nattch;               /* number of current attaches */
-    unsigned long __glibc_reserved5;
-    unsigned long __glibc_reserved6;
-  };
-
-#ifdef __USE_MISC
-
-/* ipcs ctl commands */
-# define SHM_STAT      13
-# define SHM_INFO      14
-# define SHM_STAT_ANY  15
-
-/* shm_mode upper byte flags */
-# define SHM_DEST      01000   /* segment will be destroyed on last detach */
-# define SHM_LOCKED    02000   /* segment will not be swapped */
-# define SHM_HUGETLB   04000   /* segment is mapped via hugetlb */
-# define SHM_NORESERVE 010000  /* don't check for reservations */
-
-struct shminfo
-  {
-    unsigned long int shmmax;
-    unsigned long int shmmin;
-    unsigned long int shmmni;
-    unsigned long int shmseg;
-    unsigned long int shmall;
-    unsigned long int __glibc_reserved1;
-    unsigned long int __glibc_reserved2;
-    unsigned long int __glibc_reserved3;
-    unsigned long int __glibc_reserved4;
-  };
-
-struct shm_info
-  {
-    int used_ids;
-    unsigned long int shm_tot; /* total allocated shm */
-    unsigned long int shm_rss; /* total resident shm */
-    unsigned long int shm_swp; /* total swapped shm */
-    unsigned long int swap_attempts;
-    unsigned long int swap_successes;
-  };
-
-#endif /* __USE_MISC */
-
-__END_DECLS
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h b/sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h
new file mode 100644 (file)
index 0000000..c4d0c2f
--- /dev/null
@@ -0,0 +1,28 @@
+/* Define where padding goes in struct shmid_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_SHM_H
+# error "Never use <bits/shm-pad.h> directly; include <sys/shm.h> instead."
+#endif
+
+#include <bits/wordsize.h>
+
+#define __SHM_PAD_AFTER_TIME 0
+#define __SHM_PAD_BEFORE_TIME (__WORDSIZE == 32)
+#define __SHM_SEGSZ_AFTER_TIME 1
+#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ 0
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/shm.h b/sysdeps/unix/sysv/linux/sparc/bits/shm.h
deleted file mode 100644 (file)
index 5262a79..0000000
+++ /dev/null
@@ -1,108 +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_SHM_H
-# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
-#endif
-
-#include <bits/types.h>
-#include <bits/wordsize.h>
-#include <bits/shmlba.h>
-
-/* Permission flag for shmget.  */
-#define SHM_R          0400            /* or S_IRUGO from <linux/stat.h> */
-#define SHM_W          0200            /* or S_IWUGO from <linux/stat.h> */
-
-/* Flags for `shmat'.  */
-#define SHM_RDONLY     010000          /* attach read-only else read-write */
-#define SHM_RND                020000          /* round attach address to SHMLBA */
-#define SHM_REMAP      040000          /* take-over region on attach */
-#define SHM_EXEC       0100000         /* execution access */
-
-/* Commands for `shmctl'.  */
-#define SHM_LOCK       11              /* lock segment (root only) */
-#define SHM_UNLOCK     12              /* unlock segment (root only) */
-
-__BEGIN_DECLS
-
-
-/* Type to count number of attaches.  */
-typedef unsigned long int shmatt_t;
-
-/* Data structure describing a shared memory segment.  */
-struct shmid_ds
-  {
-    struct ipc_perm shm_perm;          /* operation permission struct */
-#if __WORDSIZE == 32
-    unsigned int __pad1;
-#endif
-    __time_t shm_atime;                        /* time of last shmat() */
-#if __WORDSIZE == 32
-    unsigned int __pad2;
-#endif
-    __time_t shm_dtime;                        /* time of last shmdt() */
-#if __WORDSIZE == 32
-    unsigned int __pad3;
-#endif
-    __time_t shm_ctime;                        /* time of last change by shmctl() */
-    size_t shm_segsz;                  /* size of segment in bytes */
-    __pid_t shm_cpid;                  /* pid of creator */
-    __pid_t shm_lpid;                  /* pid of last shmop */
-    shmatt_t shm_nattch;               /* number of current attaches */
-    unsigned long int __glibc_reserved1;
-    unsigned long int __glibc_reserved2;
-  };
-
-#ifdef __USE_MISC
-
-/* ipcs ctl commands */
-# define SHM_STAT      13
-# define SHM_INFO      14
-# define SHM_STAT_ANY  15
-
-/* shm_mode upper byte flags */
-# define SHM_DEST      01000   /* segment will be destroyed on last detach */
-# define SHM_LOCKED    02000   /* segment will not be swapped */
-# define SHM_HUGETLB   04000   /* segment is mapped via hugetlb */
-# define SHM_NORESERVE 010000  /* don't check for reservations */
-
-struct shminfo
-  {
-    unsigned long shmmax;
-    unsigned long shmmin;
-    unsigned long shmmni;
-    unsigned long shmseg;
-    unsigned long shmall;
-    unsigned long __glibc_reserved1;
-    unsigned long __glibc_reserved2;
-    unsigned long __glibc_reserved3;
-    unsigned long __glibc_reserved4;
-  };
-
-struct shm_info
-  {
-    int used_ids;
-    unsigned long int shm_tot; /* total allocated shm */
-    unsigned long int shm_rss; /* total resident shm */
-    unsigned long int shm_swp; /* total swapped shm */
-    unsigned long int swap_attempts;
-    unsigned long int swap_successes;
-  };
-
-#endif /* __USE_MISC */
-
-__END_DECLS
diff --git a/sysdeps/unix/sysv/linux/x86/bits/shm-pad.h b/sysdeps/unix/sysv/linux/x86/bits/shm-pad.h
new file mode 100644 (file)
index 0000000..277a70f
--- /dev/null
@@ -0,0 +1,30 @@
+/* Define where padding goes in struct shmid_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_SHM_H
+# error "Never use <bits/shm-pad.h> directly; include <sys/shm.h> instead."
+#endif
+
+#ifdef __x86_64__
+# define __SHM_PAD_AFTER_TIME 0
+#else
+# define __SHM_PAD_AFTER_TIME 1
+#endif
+#define __SHM_PAD_BEFORE_TIME 0
+#define __SHM_SEGSZ_AFTER_TIME 0
+#define __SHM_PAD_BETWEEN_TIME_AND_SEGSZ 0
diff --git a/sysdeps/unix/sysv/linux/x86/bits/shm.h b/sysdeps/unix/sysv/linux/x86/bits/shm.h
deleted file mode 100644 (file)
index 4b88ff0..0000000
+++ /dev/null
@@ -1,107 +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_SHM_H
-# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
-#endif
-
-#include <bits/types.h>
-#include <bits/shmlba.h>
-
-/* Permission flag for shmget.  */
-#define SHM_R          0400            /* or S_IRUGO from <linux/stat.h> */
-#define SHM_W          0200            /* or S_IWUGO from <linux/stat.h> */
-
-/* Flags for `shmat'.  */
-#define SHM_RDONLY     010000          /* attach read-only else read-write */
-#define SHM_RND                020000          /* round attach address to SHMLBA */
-#define SHM_REMAP      040000          /* take-over region on attach */
-#define SHM_EXEC       0100000         /* execution access */
-
-/* Commands for `shmctl'.  */
-#define SHM_LOCK       11              /* lock segment (root only) */
-#define SHM_UNLOCK     12              /* unlock segment (root only) */
-
-__BEGIN_DECLS
-
-
-/* Type to count number of attaches.  */
-typedef __syscall_ulong_t shmatt_t;
-
-/* Data structure describing a shared memory segment.  */
-struct shmid_ds
-  {
-    struct ipc_perm shm_perm;          /* operation permission struct */
-    size_t shm_segsz;                  /* size of segment in bytes */
-    __time_t shm_atime;                        /* time of last shmat() */
-#ifndef __x86_64__
-    unsigned long int __glibc_reserved1;
-#endif
-    __time_t shm_dtime;                        /* time of last shmdt() */
-#ifndef __x86_64__
-    unsigned long int __glibc_reserved2;
-#endif
-    __time_t shm_ctime;                        /* time of last change by shmctl() */
-#ifndef __x86_64__
-    unsigned long int __glibc_reserved3;
-#endif
-    __pid_t shm_cpid;                  /* pid of creator */
-    __pid_t shm_lpid;                  /* pid of last shmop */
-    shmatt_t shm_nattch;               /* number of current attaches */
-    __syscall_ulong_t __glibc_reserved4;
-    __syscall_ulong_t __glibc_reserved5;
-  };
-
-#ifdef __USE_MISC
-
-/* ipcs ctl commands */
-# define SHM_STAT      13
-# define SHM_INFO      14
-# define SHM_STAT_ANY  15
-
-/* shm_mode upper byte flags */
-# define SHM_DEST      01000   /* segment will be destroyed on last detach */
-# define SHM_LOCKED    02000   /* segment will not be swapped */
-# define SHM_HUGETLB   04000   /* segment is mapped via hugetlb */
-# define SHM_NORESERVE 010000  /* don't check for reservations */
-
-struct shminfo
-  {
-    __syscall_ulong_t shmmax;
-    __syscall_ulong_t shmmin;
-    __syscall_ulong_t shmmni;
-    __syscall_ulong_t shmseg;
-    __syscall_ulong_t shmall;
-    __syscall_ulong_t __glibc_reserved1;
-    __syscall_ulong_t __glibc_reserved2;
-    __syscall_ulong_t __glibc_reserved3;
-    __syscall_ulong_t __glibc_reserved4;
-  };
-
-struct shm_info
-  {
-    int used_ids;
-    __syscall_ulong_t shm_tot; /* total allocated shm */
-    __syscall_ulong_t shm_rss; /* total resident shm */
-    __syscall_ulong_t shm_swp; /* total swapped shm */
-    __syscall_ulong_t swap_attempts;
-    __syscall_ulong_t swap_successes;
-  };
-
-#endif /* __USE_MISC */
-
-__END_DECLS