about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/x86
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2018-10-17 11:56:28 +0000
committerJoseph Myers <joseph@codesourcery.com>2018-10-17 11:56:28 +0000
commit729f34028a7f494b599a29889df825cf826b6de0 (patch)
tree240e9b7f62d704af1e262f1223bec5c077b5790c /sysdeps/unix/sysv/linux/x86
parent8c8d2a8aff71e0c53b372871f158c121289452cf (diff)
downloadglibc-729f34028a7f494b599a29889df825cf826b6de0.tar.gz
glibc-729f34028a7f494b599a29889df825cf826b6de0.tar.xz
glibc-729f34028a7f494b599a29889df825cf826b6de0.zip
Use single bits/shm.h for all architectures.
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.
Diffstat (limited to 'sysdeps/unix/sysv/linux/x86')
-rw-r--r--sysdeps/unix/sysv/linux/x86/bits/shm-pad.h30
-rw-r--r--sysdeps/unix/sysv/linux/x86/bits/shm.h107
2 files changed, 30 insertions, 107 deletions
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
index 0000000000..277a70fe6c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/x86/bits/shm-pad.h
@@ -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
index 4b88ff09aa..0000000000
--- a/sysdeps/unix/sysv/linux/x86/bits/shm.h
+++ /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