diff options
author | Joseph Myers <joseph@codesourcery.com> | 2018-10-17 11:56:28 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2018-10-17 11:56:28 +0000 |
commit | 729f34028a7f494b599a29889df825cf826b6de0 (patch) | |
tree | 240e9b7f62d704af1e262f1223bec5c077b5790c /sysdeps/unix/sysv | |
parent | 8c8d2a8aff71e0c53b372871f158c121289452cf (diff) | |
download | glibc-729f34028a7f494b599a29889df825cf826b6de0.zip glibc-729f34028a7f494b599a29889df825cf826b6de0.tar.gz glibc-729f34028a7f494b599a29889df825cf826b6de0.tar.bz2 |
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')
-rw-r--r-- | sysdeps/unix/sysv/linux/Makefile | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/bits/shm-pad.h | 37 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/bits/shm.h | 63 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h | 28 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/hppa/bits/shm.h | 106 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/bits/shm-pad.h | 26 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/bits/shm.h | 94 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h | 28 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/powerpc/bits/shm.h | 110 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h | 28 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/bits/shm.h | 108 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/x86/bits/shm-pad.h | 30 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/x86/bits/shm.h | 107 |
13 files changed, 215 insertions, 552 deletions
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 27c7ef6..72b6b64 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/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 index 0000000..9233c95 --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/shm-pad.h @@ -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 diff --git a/sysdeps/unix/sysv/linux/bits/shm.h b/sysdeps/unix/sysv/linux/bits/shm.h index c305ee4..68ac6e9 100644 --- a/sysdeps/unix/sysv/linux/bits/shm.h +++ b/sysdeps/unix/sysv/linux/bits/shm.h @@ -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> */ @@ -40,30 +41,40 @@ __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 index 0000000..6a9c5dd --- /dev/null +++ b/sysdeps/unix/sysv/linux/hppa/bits/shm-pad.h @@ -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 index fed18e4..0000000 --- a/sysdeps/unix/sysv/linux/hppa/bits/shm.h +++ /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 index 0000000..efa2617 --- /dev/null +++ b/sysdeps/unix/sysv/linux/mips/bits/shm-pad.h @@ -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 index 4320bd4..0000000 --- a/sysdeps/unix/sysv/linux/mips/bits/shm.h +++ /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 index 0000000..69a7e4a --- /dev/null +++ b/sysdeps/unix/sysv/linux/powerpc/bits/shm-pad.h @@ -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 index a41a1ab..0000000 --- a/sysdeps/unix/sysv/linux/powerpc/bits/shm.h +++ /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 index 0000000..c4d0c2f --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/bits/shm-pad.h @@ -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 index 5262a79..0000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/shm.h +++ /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 index 0000000..277a70f --- /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 4b88ff0..0000000 --- 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 |