]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Share MAP_* flags between more architectures.
authorJoseph Myers <joseph@codesourcery.com>
Wed, 26 Sep 2018 12:33:14 +0000 (12:33 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 26 Sep 2018 12:33:14 +0000 (12:33 +0000)
Continuing bits/mman.h unification between architectures using the
Linux kernel, this patch arranges for the common set of MAP_* flags to
be used by two more architectures.  That common set is moved to
bits/mman-map-flags-generic.h, which is included by bits/mman.h, to
allow architectures to use that common set even if they also have
architecture-specific additions to it.  As well as the generic
bits/mman.h, the versions for x86 and ia64 are also then made to
include bits/mman-map-flags-generic.h, so while they still need
architecture-specific bits/mman.h (for MAP_32BIT and MAP_GROWSUP
respectively), they do not need to duplicate the generic flag
definitions in there.

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

* sysdeps/unix/sysv/linux/bits/mman-map-flags-generic.h: New
file.  Most contents moved from ....
* sysdeps/unix/sysv/linux/bits/mman.h: ... here.  Move contents to
and include <bits/mman-map-flags-generic.h>.
* sysdeps/unix/sysv/linux/Makefile [$(subdir) = misc]
(sysdep_headers): Add bits/mman-map-flags-generic.h.
* sysdeps/unix/sysv/linux/ia64/bits/mman.h: Include
<bits/mman-map-flags-generic.h>.
[__USE_MISC] (MAP_GROWSUP): Only define this macro, not other
macros defined in <bits/mman-map-flags-generic.h>.
* sysdeps/unix/sysv/linux/x86/bits/mman.h: Include
<bits/mman-map-flags-generic.h>.
[__USE_MISC] (MAP_32BIT): Only define this macro, not other macros
defined in <bits/mman-map-flags-generic.h>.

ChangeLog
sysdeps/unix/sysv/linux/Makefile
sysdeps/unix/sysv/linux/bits/mman-map-flags-generic.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/bits/mman.h
sysdeps/unix/sysv/linux/ia64/bits/mman.h
sysdeps/unix/sysv/linux/x86/bits/mman.h

index 844d08130117f3f728fc5919793fb3408f322e43..b757651511dde762d7174daefcfa53fe65953212 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2018-09-26  Joseph Myers  <joseph@codesourcery.com>
+
+       * sysdeps/unix/sysv/linux/bits/mman-map-flags-generic.h: New
+       file.  Most contents moved from ....
+       * sysdeps/unix/sysv/linux/bits/mman.h: ... here.  Move contents to
+       and include <bits/mman-map-flags-generic.h>.
+       * sysdeps/unix/sysv/linux/Makefile [$(subdir) = misc]
+       (sysdep_headers): Add bits/mman-map-flags-generic.h.
+       * sysdeps/unix/sysv/linux/ia64/bits/mman.h: Include
+       <bits/mman-map-flags-generic.h>.
+       [__USE_MISC] (MAP_GROWSUP): Only define this macro, not other
+       macros defined in <bits/mman-map-flags-generic.h>.
+       * sysdeps/unix/sysv/linux/x86/bits/mman.h: Include
+       <bits/mman-map-flags-generic.h>.
+       [__USE_MISC] (MAP_32BIT): Only define this macro, not other macros
+       defined in <bits/mman-map-flags-generic.h>.
+
 2018-09-26  Andreas Schwab  <schwab@suse.de>
 
        * Makefile ($(common-objpfx)testrun.sh): Remove leading space from
index 99d71ea29670f25e9e64bb0d654b43058638d6c8..d047b61af7396e0affe1dcabd4bea4fecd23aea9 100644 (file)
@@ -42,7 +42,7 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
                  bits/mman-linux.h bits/mman-shared.h bits/ptrace-shared.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/procfs-prregset.h bits/mman-map-flags-generic.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/mman-map-flags-generic.h b/sysdeps/unix/sysv/linux/bits/mman-map-flags-generic.h
new file mode 100644 (file)
index 0000000..3605843
--- /dev/null
@@ -0,0 +1,42 @@
+/* Definitions for POSIX memory map interface.  Linux/generic version.
+   Copyright (C) 1997-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_MMAN_H
+# error "Never use <bits/mman-map-flags-generic.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* These definitions are appropriate for architectures that, in the
+   Linux kernel, either have no uapi/asm/mman.h, or have one that
+   includes asm-generic/mman.h without any changes to the values of
+   the MAP_* flags defined in that header.  */
+
+#ifdef __USE_MISC
+# define MAP_GROWSDOWN 0x00100         /* Stack-like segment.  */
+# define MAP_DENYWRITE 0x00800         /* ETXTBSY.  */
+# define MAP_EXECUTABLE        0x01000         /* Mark it as an executable.  */
+# define MAP_LOCKED    0x02000         /* Lock the mapping.  */
+# define MAP_NORESERVE 0x04000         /* Don't check for reservations.  */
+# define MAP_POPULATE  0x08000         /* Populate (prefault) pagetables.  */
+# define MAP_NONBLOCK  0x10000         /* Do not block on IO.  */
+# define MAP_STACK     0x20000         /* Allocation is for a stack.  */
+# define MAP_HUGETLB   0x40000         /* Create huge page mapping.  */
+# define MAP_SYNC      0x80000         /* Perform synchronous page
+                                          faults for the mapping.  */
+# define MAP_FIXED_NOREPLACE 0x100000  /* MAP_FIXED but do not unmap
+                                          underlying mapping.  */
+#endif
index e98b5204bf8e9b4398cc1b85b65366e68165a783..178a8edd903d91452e17b28aba81d2d414ef1983 100644 (file)
 /* These definitions are appropriate for architectures that, in the
    Linux kernel, either have no uapi/asm/mman.h, or have one that
    includes asm-generic/mman.h without any changes or additions
-   relevant to glibc.  */
+   relevant to glibc.  If there are additions relevant to glibc, an
+   architecture-specific bits/mman.h is needed.  */
 
-#ifdef __USE_MISC
-# define MAP_GROWSDOWN 0x00100         /* Stack-like segment.  */
-# define MAP_DENYWRITE 0x00800         /* ETXTBSY.  */
-# define MAP_EXECUTABLE        0x01000         /* Mark it as an executable.  */
-# define MAP_LOCKED    0x02000         /* Lock the mapping.  */
-# define MAP_NORESERVE 0x04000         /* Don't check for reservations.  */
-# define MAP_POPULATE  0x08000         /* Populate (prefault) pagetables.  */
-# define MAP_NONBLOCK  0x10000         /* Do not block on IO.  */
-# define MAP_STACK     0x20000         /* Allocation is for a stack.  */
-# define MAP_HUGETLB   0x40000         /* Create huge page mapping.  */
-# define MAP_SYNC      0x80000         /* Perform synchronous page
-                                          faults for the mapping.  */
-# define MAP_FIXED_NOREPLACE 0x100000  /* MAP_FIXED but do not unmap
-                                          underlying mapping.  */
-#endif
+#include <bits/mman-map-flags-generic.h>
 
 /* Include generic Linux declarations.  */
 #include <bits/mman-linux.h>
index 51071fda56bc4718f7bfa99885d2d0d4e264e0be..a1f649c270467ae9fb09b92f3bb7cdf4a647ebe9 100644 (file)
 
 /* These are Linux-specific.  */
 #ifdef __USE_MISC
-# define MAP_GROWSDOWN   0x00100       /* Stack-like segment.  */
 # define MAP_GROWSUP     0x00200       /* Register stack-like segment */
-# define MAP_DENYWRITE   0x00800       /* ETXTBSY */
-# define MAP_EXECUTABLE          0x01000       /* Mark it as an executable.  */
-# define MAP_LOCKED      0x02000       /* Lock the mapping.  */
-# define MAP_NORESERVE   0x04000       /* Don't check for reservations.  */
-# define MAP_POPULATE    0x08000       /* Populate (prefault) pagetables.  */
-# define MAP_NONBLOCK    0x10000       /* Do not block on IO.  */
-# define MAP_STACK       0x20000       /* Allocation is for a stack.  */
-# define MAP_HUGETLB     0x40000       /* Create huge page mapping.  */
-# define MAP_SYNC        0x80000       /* Perform synchronous page
-                                          faults for the mapping.  */
-# define MAP_FIXED_NOREPLACE 0x100000  /* MAP_FIXED but do not unmap
-                                          underlying mapping.  */
 #endif
 
+#include <bits/mman-map-flags-generic.h>
+
 /* Include generic Linux declarations.  */
 #include <bits/mman-linux.h>
index d897b8a2b27fbd1e2f9752bf7d16fd4f4113cce0..b1d9cbd8158ca24dd8ff7e3de3072cf0894f262b 100644 (file)
 # define MAP_32BIT     0x40            /* Only give out 32-bit addresses.  */
 #endif
 
-/* These are Linux-specific.  */
-#ifdef __USE_MISC
-# define MAP_GROWSDOWN 0x00100         /* Stack-like segment.  */
-# define MAP_DENYWRITE 0x00800         /* ETXTBSY */
-# define MAP_EXECUTABLE        0x01000         /* Mark it as an executable.  */
-# define MAP_LOCKED    0x02000         /* Lock the mapping.  */
-# define MAP_NORESERVE 0x04000         /* Don't check for reservations.  */
-# define MAP_POPULATE  0x08000         /* Populate (prefault) pagetables.  */
-# define MAP_NONBLOCK  0x10000         /* Do not block on IO.  */
-# define MAP_STACK     0x20000         /* Allocation is for a stack.  */
-# define MAP_HUGETLB   0x40000         /* Create huge page mapping.  */
-# define MAP_SYNC      0x80000         /* Perform synchronous page
-                                          faults for the mapping.  */
-# define MAP_FIXED_NOREPLACE 0x100000  /* MAP_FIXED but do not unmap
-                                          underlying mapping.  */
-#endif
+#include <bits/mman-map-flags-generic.h>
 
 /* Include generic Linux declarations.  */
 #include <bits/mman-linux.h>