Create Linux common <bits/mman-linux.h>

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

Create Linux common <bits/mman-linux.h>

Andreas Jaeger-8
Looking through the Linux 3.7-> 3.8 diff, I noticed some changes for mman.h and decided to merge the various glibc files first - like we did with <bits/fcntl.h>

Here's the first part of the change. Ok to commit?

Andreas

commit 38f982db3e0a2d928a7bc753c4f313fb6b9d0deb
Author: Andreas Jaeger <[hidden email]>
Date:   Fri Mar 1 13:48:50 2013 +0100

    2013-03-01  Andreas Jaeger  <[hidden email]>
   
    * sysdeps/unix/sysv/linux/bits/mman-linux.h: New file, with
    * Linux
    common definitions.
   
    * sysdeps/unix/sysv/linux/sh/bits/mman.h: Remove all defines
    provided by bits/mman-linux.h and include <bits/mman-linux.h>.
    * sysdeps/unix/sysv/linux/x86/bits/mman.h: Likewise.
    * sysdeps/unix/sysv/linux/s390/bits/mman.h: Likewise.
    * sysdeps/unix/sysv/linux/powerpc/bits/mman.h: Likewise.
    * sysdeps/unix/sysv/linux/sh/bits/mman.h: Likewise.
    * sysdeps/unix/sysv/linux/sparc/bits/mman.h: Likewise.

diff --git a/sysdeps/unix/sysv/linux/bits/mman-linux.h b/sysdeps/unix/sysv/linux/bits/mman-linux.h
new file mode 100644
index 0000000..69ed247
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/bits/mman-linux.h
@@ -0,0 +1,94 @@
+/* Definitions for POSIX memory map interface.  Linux generic version.
+   Copyright (C) 2001-2013 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-linux.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.  */
+
+
+/* Protections are chosen from these bits, OR'd together.  The
+   implementation does not necessarily support PROT_EXEC or PROT_WRITE
+   without PROT_READ.  The only guarantees are that no writing will be
+   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ 0x1 /* Page can be read.  */
+#define PROT_WRITE 0x2 /* Page can be written.  */
+#define PROT_EXEC 0x4 /* Page can be executed.  */
+#define PROT_NONE 0x0 /* Page can not be accessed.  */
+#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
+   growsdown vma (mprotect only).  */
+#define PROT_GROWSUP 0x02000000 /* Extend change to start of
+   growsup vma (mprotect only).  */
+
+/* Sharing types (must choose one and only one of these).  */
+#define MAP_SHARED 0x01 /* Share changes.  */
+#define MAP_PRIVATE 0x02 /* Changes are private.  */
+#ifdef __USE_MISC
+# define MAP_TYPE 0x0f /* Mask for type of mapping.  */
+#endif
+
+/* Other flags.  */
+#define MAP_FIXED 0x10 /* Interpret addr exactly.  */
+#ifdef __USE_MISC
+# define MAP_FILE 0
+# define MAP_ANONYMOUS 0x20 /* Don't use a file.  */
+# define MAP_ANON MAP_ANONYMOUS
+#endif
+
+/* Flags to `msync'.  */
+#define MS_ASYNC 1 /* Sync memory asynchronously.  */
+#define MS_SYNC 4 /* Synchronous memory sync.  */
+#define MS_INVALIDATE 2 /* Invalidate the caches.  */
+
+/* Flags for `mremap'.  */
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE 1
+# define MREMAP_FIXED 2
+#endif
+
+/* Advice to `madvise'.  */
+#ifdef __USE_BSD
+# define MADV_NORMAL  0 /* No further special treatment.  */
+# define MADV_RANDOM  1 /* Expect random page references.  */
+# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
+# define MADV_WILLNEED  3 /* Will need these pages.  */
+# define MADV_DONTNEED  4 /* Don't need these pages.  */
+# define MADV_REMOVE  9 /* Remove these pages and resources.  */
+# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
+# define MADV_DOFORK  11 /* Do inherit across fork.  */
+# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
+# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
+# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
+# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
+# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
+                                   overrides the coredump filter bits.  */
+# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
+# define MADV_HWPOISON  100 /* Poison a page for testing.  */
+#endif
+
+/* The POSIX people had to invent similar names for the same things.  */
+#ifdef __USE_XOPEN2K
+# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
+# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
+# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
+# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
+# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
+#endif
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
index a270189..602cebf 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
@@ -17,42 +17,17 @@
    <http://www.gnu.org/licenses/>.  */
 
 #ifndef _SYS_MMAN_H
-# error "Never use <bits/mman.h> directly; iclude <sys/mman.h> instead."
+# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
 #endif
 
 /* The following definitions basically come from the kernel headers.
    But the kernel header is not namespace clean.  */
+/* Include generic Linux declarations.  */
 
+#include <bits/mman-linux.h>
 
-/* Protections are chosen from these bits, OR'd together.  The
-   implementation does not necessarily support PROT_EXEC or PROT_WRITE
-   without PROT_READ.  The only guarantees are that no writing will be
-   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
 
-#define PROT_READ 0x1 /* Page can be read.  */
-#define PROT_WRITE 0x2 /* Page can be written.  */
-#define PROT_EXEC 0x4 /* Page can be executed.  */
-#define PROT_NONE 0x0 /* Page can not be accessed.  */
 #define PROT_SAO 0x10 /* Strong Access Ordering.  */
-#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
-   growsdown vma (mprotect only).  */
-#define PROT_GROWSUP 0x02000000 /* Extend change to start of
-   growsup vma (mprotect only).  */
-
-/* Sharing types (must choose one and only one of these).  */
-#define MAP_SHARED 0x001 /* Share changes.  */
-#define MAP_PRIVATE 0x002 /* Changes are private.  */
-#ifdef __USE_MISC
-# define MAP_TYPE 0x00f /* Mask for type of mapping.  */
-#endif
-
-/* Other flags.  */
-#define MAP_FIXED 0x010 /* Interpret addr exactly.  */
-#ifdef __USE_MISC
-# define MAP_FILE 0x000
-# define MAP_ANONYMOUS 0x020 /* Don't use a file.  */
-# define MAP_ANON MAP_ANONYMOUS
-#endif
 
 /* These are Linux-specific.  */
 #ifdef __USE_MISC
@@ -67,48 +42,7 @@
 # define MAP_HUGETLB 0x40000 /* Create huge page mapping.  */
 #endif
 
-/* Flags to `msync'.  */
-#define MS_ASYNC 1 /* Sync memory asynchronously.  */
-#define MS_SYNC 4 /* Synchronous memory sync.  */
-#define MS_INVALIDATE 2 /* Invalidate the caches.  */
-
 /* Flags for `mlockall'.  */
 #define MCL_CURRENT 0x2000 /* Lock all currently mapped pages.  */
 #define MCL_FUTURE 0x4000 /* Lock all additions to address
    space.  */
-
-
-/* Flags for `mremap'.  */
-#ifdef __USE_GNU
-# define MREMAP_MAYMOVE 1
-# define MREMAP_FIXED 2
-#endif
-
-/* Advice to `madvise'.  */
-#ifdef __USE_BSD
-# define MADV_NORMAL  0 /* No further special treatment.  */
-# define MADV_RANDOM  1 /* Expect random page references.  */
-# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
-# define MADV_WILLNEED  3 /* Will need these pages.  */
-# define MADV_DONTNEED  4 /* Don't need these pages.  */
-# define MADV_REMOVE  9 /* Remove these pages and resources.  */
-# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
-# define MADV_DOFORK  11 /* Do inherit across fork.  */
-# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
-# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
-# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
-# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
-# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
-                                   overrides the coredump filter bits.  */
-# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
-# define MADV_HWPOISON  100 /* Poison a page for testing.  */
-#endif
-
-/* The POSIX people had to invent similar names for the same things.  */
-#ifdef __USE_XOPEN2K
-# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
-# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
-# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
-# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
-# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
-#endif
diff --git a/sysdeps/unix/sysv/linux/s390/bits/mman.h b/sysdeps/unix/sysv/linux/s390/bits/mman.h
index 3e7bf92..59f4511 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/mman.h
@@ -24,38 +24,10 @@
    But the kernel header is not namespace clean.  */
 
 
-/* Protections are chosen from these bits, OR'd together.  The
-   implementation does not necessarily support PROT_EXEC or PROT_WRITE
-   without PROT_READ.  The only guarantees are that no writing will be
-   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
-
-#define PROT_READ 0x1 /* Page can be read.  */
-#define PROT_WRITE 0x2 /* Page can be written.  */
-#define PROT_EXEC 0x4 /* Page can be executed.  */
-#define PROT_NONE 0x0 /* Page can not be accessed.  */
-#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
-   growsdown vma (mprotect only).  */
-#define PROT_GROWSUP 0x02000000 /* Extend change to start of
-   growsup vma (mprotect only).  */
-
-/* Sharing types (must choose one and only one of these).  */
-#define MAP_SHARED 0x01 /* Share changes.  */
-#define MAP_PRIVATE 0x02 /* Changes are private.  */
-#ifdef __USE_MISC
-# define MAP_TYPE 0x0f /* Mask for type of mapping.  */
-#endif
-
-/* Other flags.  */
-#define MAP_FIXED 0x10 /* Interpret addr exactly.  */
-#ifdef __USE_MISC
-# define MAP_FILE 0
-# define MAP_ANONYMOUS 0x20 /* Don't use a file.  */
-# define MAP_ANON MAP_ANONYMOUS
-#endif
-
 /* These are Linux-specific.  */
 #ifdef __USE_MISC
 # define MAP_GROWSDOWN 0x00100 /* Stack-like segment.  */
+// XXX? Not defined in Linux kernel 3.8
 # define MAP_GROWSUP 0x00200 /* Register stack-like segment */
 # define MAP_DENYWRITE 0x00800 /* ETXTBSY */
 # define MAP_EXECUTABLE 0x01000 /* Mark it as an executable.  */
@@ -67,47 +39,7 @@
 # define MAP_HUGETLB 0x40000 /* Create huge page mapping.  */
 #endif
 
-/* Flags to `msync'.  */
-#define MS_ASYNC 1 /* Sync memory asynchronously.  */
-#define MS_SYNC 4 /* Synchronous memory sync.  */
-#define MS_INVALIDATE 2 /* Invalidate the caches.  */
-
 /* Flags for `mlockall'.  */
 #define MCL_CURRENT 1 /* Lock all currently mapped pages.  */
 #define MCL_FUTURE 2 /* Lock all additions to address
    space.  */
-
-/* Flags for `mremap'.  */
-#ifdef __USE_GNU
-# define MREMAP_MAYMOVE 1
-# define MREMAP_FIXED 2
-#endif
-
-/* Advice to `madvise'.  */
-#ifdef __USE_BSD
-# define MADV_NORMAL  0 /* No further special treatment.  */
-# define MADV_RANDOM  1 /* Expect random page references.  */
-# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
-# define MADV_WILLNEED  3 /* Will need these pages.  */
-# define MADV_DONTNEED  4 /* Don't need these pages.  */
-# define MADV_REMOVE  9 /* Remove these pages and resources.  */
-# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
-# define MADV_DOFORK  11 /* Do inherit across fork.  */
-# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
-# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
-# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
-# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
-# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
-                                   overrides the coredump filter bits.  */
-# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
-# define MADV_HWPOISON  100 /* Poison a page for testing.  */
-#endif
-
-/* The POSIX people had to invent similar names for the same things.  */
-#ifdef __USE_XOPEN2K
-# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
-# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
-# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
-# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
-# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
-#endif
diff --git a/sysdeps/unix/sysv/linux/sh/bits/mman.h b/sysdeps/unix/sysv/linux/sh/bits/mman.h
index 40da97e..0573f83 100644
--- a/sysdeps/unix/sysv/linux/sh/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/sh/bits/mman.h
@@ -23,35 +23,8 @@
 /* The following definitions basically come from the kernel headers.
    But the kernel header is not namespace clean.  */
 
-
-/* Protections are chosen from these bits, OR'd together.  The
-   implementation does not necessarily support PROT_EXEC or PROT_WRITE
-   without PROT_READ.  The only guarantees are that no writing will be
-   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
-
-#define PROT_READ 0x1 /* Page can be read.  */
-#define PROT_WRITE 0x2 /* Page can be written.  */
-#define PROT_EXEC 0x4 /* Page can be executed.  */
-#define PROT_NONE 0x0 /* Page can not be accessed.  */
-#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
-   growsdown vma (mprotect only).  */
-#define PROT_GROWSUP 0x02000000 /* Extend change to start of
-   growsup vma (mprotect only).  */
-
-/* Sharing types (must choose one and only one of these).  */
-#define MAP_SHARED 0x01 /* Share changes.  */
-#define MAP_PRIVATE 0x02 /* Changes are private.  */
-#ifdef __USE_MISC
-# define MAP_TYPE 0x0f /* Mask for type of mapping.  */
-#endif
-
-/* Other flags.  */
-#define MAP_FIXED 0x10 /* Interpret addr exactly.  */
-#ifdef __USE_MISC
-# define MAP_FILE 0
-# define MAP_ANONYMOUS 0x20 /* Don't use a file.  */
-# define MAP_ANON MAP_ANONYMOUS
-#endif
+/* Include generic Linux declarations.  */
+#include <bits/mman-linux.h>
 
 /* These are Linux-specific.  */
 #ifdef __USE_MISC
@@ -66,47 +39,7 @@
 # define MAP_HUGETLB 0x40000 /* Create huge page mapping.  */
 #endif
 
-/* Flags to `msync'.  */
-#define MS_ASYNC 1 /* Sync memory asynchronously.  */
-#define MS_SYNC 4 /* Synchronous memory sync.  */
-#define MS_INVALIDATE 2 /* Invalidate the caches.  */
-
 /* Flags for `mlockall'.  */
 #define MCL_CURRENT 1 /* Lock all currently mapped pages.  */
 #define MCL_FUTURE 2 /* Lock all additions to address
    space.  */
-
-/* Flags for `mremap'.  */
-#ifdef __USE_GNU
-# define MREMAP_MAYMOVE 1
-# define MREMAP_FIXED 2
-#endif
-
-/* Advice to `madvise'.  */
-#ifdef __USE_BSD
-# define MADV_NORMAL  0 /* No further special treatment.  */
-# define MADV_RANDOM  1 /* Expect random page references.  */
-# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
-# define MADV_WILLNEED  3 /* Will need these pages.  */
-# define MADV_DONTNEED  4 /* Don't need these pages.  */
-# define MADV_REMOVE  9 /* Remove these pages and resources.  */
-# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
-# define MADV_DOFORK  11 /* Do inherit across fork.  */
-# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
-# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
-# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
-# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
-# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
-                                   overrides the coredump filter bits.  */
-# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
-# define MADV_HWPOISON  100 /* Poison a page for testing.  */
-#endif
-
-/* The POSIX people had to invent similar names for the same things.  */
-#ifdef __USE_XOPEN2K
-# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
-# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
-# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
-# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
-# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
-#endif
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/mman.h b/sysdeps/unix/sysv/linux/sparc/bits/mman.h
index 616e243..64cdd2e 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/mman.h
@@ -23,34 +23,11 @@
 /* The following definitions basically come from the kernel headers.
    But the kernel header is not namespace clean.  */
 
-
-/* Protections are chosen from these bits, OR'd together.  The
-   implementation does not necessarily support PROT_EXEC or PROT_WRITE
-   without PROT_READ.  The only guarantees are that no writing will be
-   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
-
-#define PROT_READ 0x1 /* Page can be read.  */
-#define PROT_WRITE 0x2 /* Page can be written.  */
-#define PROT_EXEC 0x4 /* Page can be executed.  */
-#define PROT_NONE 0x0 /* Page can not be accessed.  */
-#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
-   growsdown vma (mprotect only).  */
-#define PROT_GROWSUP 0x02000000 /* Extend change to start of
-   growsup vma (mprotect only).  */
-
-/* Sharing types (must choose one and only one of these).  */
-#define MAP_SHARED 0x01 /* Share changes.  */
-#define MAP_PRIVATE 0x02 /* Changes are private.  */
-#ifdef __USE_MISC
-# define MAP_TYPE 0x0f /* Mask for type of mapping.  */
-#endif
+/* Include generic Linux declarations.  */
+#include <bits/mman-linux.h>
 
 /* Other flags.  */
-#define MAP_FIXED 0x10 /* Interpret addr exactly.  */
 #ifdef __USE_MISC
-# define MAP_FILE 0x00
-# define MAP_ANONYMOUS 0x20 /* Don't use a file.  */
-# define MAP_ANON MAP_ANONYMOUS
 # define MAP_RENAME MAP_ANONYMOUS
 #endif
 
@@ -68,48 +45,8 @@
 # define MAP_HUGETLB 0x40000 /* Create huge page mapping.  */
 #endif
 
-/* Flags to `msync'.  */
-#define MS_ASYNC 1 /* Sync memory asynchronously.  */
-#define MS_SYNC 4 /* Synchronous memory sync.  */
-#define MS_INVALIDATE 2 /* Invalidate the caches.  */
-
 /* Flags for `mlockall'.  */
 #define MCL_CURRENT 0x2000 /* Lock all currently mapped pages.  */
 #define MCL_FUTURE 0x4000 /* Lock all additions to address
    space.  */
 
-/* Flags for `mremap'.  */
-#ifdef __USE_GNU
-# define MREMAP_MAYMOVE 1
-# define MREMAP_FIXED 2
-#endif
-
-/* Advice to `madvise'.  */
-#ifdef __USE_BSD
-# define MADV_NORMAL  0 /* No further special treatment.  */
-# define MADV_RANDOM  1 /* Expect random page references.  */
-# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
-# define MADV_WILLNEED  3 /* Will need these pages.  */
-# define MADV_DONTNEED  4 /* Don't need these pages.  */
-# define MADV_FREE  5 /* Content can be freed (Solaris).  */
-# define MADV_REMOVE  9 /* Remove these pages and resources.  */
-# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
-# define MADV_DOFORK  11 /* Do inherit across fork.  */
-# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
-# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
-# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
-# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
-# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
-                                   overrides the coredump filter bits.  */
-# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
-# define MADV_HWPOISON  100 /* Poison a page for testing.  */
-#endif
-
-/* The POSIX people had to invent similar names for the same things.  */
-#ifdef __USE_XOPEN2K
-# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
-# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
-# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
-# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
-# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
-#endif
diff --git a/sysdeps/unix/sysv/linux/x86/bits/mman.h b/sysdeps/unix/sysv/linux/x86/bits/mman.h
index 591df13..0f0f8b1 100644
--- a/sysdeps/unix/sysv/linux/x86/bits/mman.h
+++ b/sysdeps/unix/sysv/linux/x86/bits/mman.h
@@ -23,34 +23,11 @@
 /* The following definitions basically come from the kernel headers.
    But the kernel header is not namespace clean.  */
 
-
-/* Protections are chosen from these bits, OR'd together.  The
-   implementation does not necessarily support PROT_EXEC or PROT_WRITE
-   without PROT_READ.  The only guarantees are that no writing will be
-   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
-
-#define PROT_READ 0x1 /* Page can be read.  */
-#define PROT_WRITE 0x2 /* Page can be written.  */
-#define PROT_EXEC 0x4 /* Page can be executed.  */
-#define PROT_NONE 0x0 /* Page can not be accessed.  */
-#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
-   growsdown vma (mprotect only).  */
-#define PROT_GROWSUP 0x02000000 /* Extend change to start of
-   growsup vma (mprotect only).  */
-
-/* Sharing types (must choose one and only one of these).  */
-#define MAP_SHARED 0x01 /* Share changes.  */
-#define MAP_PRIVATE 0x02 /* Changes are private.  */
-#ifdef __USE_MISC
-# define MAP_TYPE 0x0f /* Mask for type of mapping.  */
-#endif
+/* Include generic Linux declarations.  */
+#include <bits/mman-linux.h>
 
 /* Other flags.  */
-#define MAP_FIXED 0x10 /* Interpret addr exactly.  */
 #ifdef __USE_MISC
-# define MAP_FILE 0
-# define MAP_ANONYMOUS 0x20 /* Don't use a file.  */
-# define MAP_ANON MAP_ANONYMOUS
 # define MAP_32BIT 0x40 /* Only give out 32-bit addresses.  */
 #endif
 
@@ -67,47 +44,7 @@
 # define MAP_HUGETLB 0x40000 /* Create huge page mapping.  */
 #endif
 
-/* Flags to `msync'.  */
-#define MS_ASYNC 1 /* Sync memory asynchronously.  */
-#define MS_SYNC 4 /* Synchronous memory sync.  */
-#define MS_INVALIDATE 2 /* Invalidate the caches.  */
-
 /* Flags for `mlockall'.  */
 #define MCL_CURRENT 1 /* Lock all currently mapped pages.  */
 #define MCL_FUTURE 2 /* Lock all additions to address
    space.  */
-
-/* Flags for `mremap'.  */
-#ifdef __USE_GNU
-# define MREMAP_MAYMOVE 1
-# define MREMAP_FIXED 2
-#endif
-
-/* Advice to `madvise'.  */
-#ifdef __USE_BSD
-# define MADV_NORMAL  0 /* No further special treatment.  */
-# define MADV_RANDOM  1 /* Expect random page references.  */
-# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
-# define MADV_WILLNEED  3 /* Will need these pages.  */
-# define MADV_DONTNEED  4 /* Don't need these pages.  */
-# define MADV_REMOVE  9 /* Remove these pages and resources.  */
-# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
-# define MADV_DOFORK  11 /* Do inherit across fork.  */
-# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
-# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
-# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
-# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
-# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
-                                   overrides the coredump filter bits.  */
-# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
-# define MADV_HWPOISON  100 /* Poison a page for testing.  */
-#endif
-
-/* The POSIX people had to invent similar names for the same things.  */
-#ifdef __USE_XOPEN2K
-# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
-# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
-# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
-# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
-# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
-#endif

--
 Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
  SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
   GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
    GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126
Reply | Threaded
Open this post in threaded view
|

Re: Create Linux common <bits/mman-linux.h>

Roland McGrath-4
>     * sysdeps/unix/sysv/linux/bits/mman-linux.h: New file, with
>     * Linux
>     common definitions.

Funny wrapping here.

Someone should double-check that all the macros, values, and #if conditions
exactly match before and after.  But the idea is certainly right.


Thanks,
Roland
Reply | Threaded
Open this post in threaded view
|

Re: Create Linux common <bits/mman-linux.h>

Carlos O'Donell-6
In reply to this post by Andreas Jaeger-8
On 03/01/2013 07:56 AM, Andreas Jaeger wrote:
> Looking through the Linux 3.7-> 3.8 diff, I noticed some changes for
> mman.h and decided to merge the various glibc files first - like we
> did with <bits/fcntl.h>
>
> Here's the first part of the change. Ok to commit?

I was thinking we might do this slightly differently.

See the attached patch which is an example of how I'm trying to unify
the upstream Linux UAPI headers into (a) Canonical default definitions
and (b) Per-machine changes. I want all new values to be added to the
canonical file and thus avoid per-machine drift.

For example I'd expect PowerPC to be *tiny* and look like this:
...
#include <bits/mman-linux.h>

/* The following constants don't match mman-linux.h. */
#undef MAP_LOCKED
#undef MAP_NORESERVE
#undef MCL_CURRENT
#undef MCL_FUTURE

#define PROT_SAO        0x10            /* Strong Access Ordering */

#define MAP_RENAME      MAP_ANONYMOUS   /* In SunOS terminology */
#define MAP_NORESERVE   0x40            /* don't reserve swap pages */
#define MAP_LOCKED      0x80

#define MCL_CURRENT     0x2000          /* lock all currently mapped pages */
#define MCL_FUTURE      0x4000          /* lock all additions to address space */
....

Comments?

I haven't reviewed this with a fine-toothed comb, but I have gone
through it and checked some things.

Comments below.
 

> commit 38f982db3e0a2d928a7bc753c4f313fb6b9d0deb
> Author: Andreas Jaeger <[hidden email]>
> Date:   Fri Mar 1 13:48:50 2013 +0100
>
>     2013-03-01  Andreas Jaeger  <[hidden email]>
>    
>     * sysdeps/unix/sysv/linux/bits/mman-linux.h: New file, with
>     * Linux
>     common definitions.
>    
>     * sysdeps/unix/sysv/linux/sh/bits/mman.h: Remove all defines
>     provided by bits/mman-linux.h and include <bits/mman-linux.h>.
>     * sysdeps/unix/sysv/linux/x86/bits/mman.h: Likewise.
>     * sysdeps/unix/sysv/linux/s390/bits/mman.h: Likewise.
>     * sysdeps/unix/sysv/linux/powerpc/bits/mman.h: Likewise.
>     * sysdeps/unix/sysv/linux/sh/bits/mman.h: Likewise.
>     * sysdeps/unix/sysv/linux/sparc/bits/mman.h: Likewise.
>
> diff --git a/sysdeps/unix/sysv/linux/bits/mman-linux.h b/sysdeps/unix/sysv/linux/bits/mman-linux.h
> new file mode 100644
> index 0000000..69ed247
> --- /dev/null
> +++ b/sysdeps/unix/sysv/linux/bits/mman-linux.h
> @@ -0,0 +1,94 @@
> +/* Definitions for POSIX memory map interface.  Linux generic version.
> +   Copyright (C) 2001-2013 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-linux.h> directly; include <sys/mman.h> instead."
> +#endif
> +
> +/* The following definitions basically come from the kernel headers.
> +   But the kernel header is not namespace clean.  */
> +
> +
> +/* Protections are chosen from these bits, OR'd together.  The
> +   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> +   without PROT_READ.  The only guarantees are that no writing will be
> +   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
> +
> +#define PROT_READ 0x1 /* Page can be read.  */
> +#define PROT_WRITE 0x2 /* Page can be written.  */
> +#define PROT_EXEC 0x4 /* Page can be executed.  */
> +#define PROT_NONE 0x0 /* Page can not be accessed.  */
> +#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
> +   growsdown vma (mprotect only).  */
> +#define PROT_GROWSUP 0x02000000 /* Extend change to start of
> +   growsup vma (mprotect only).  */
> +
> +/* Sharing types (must choose one and only one of these).  */
> +#define MAP_SHARED 0x01 /* Share changes.  */
> +#define MAP_PRIVATE 0x02 /* Changes are private.  */
> +#ifdef __USE_MISC
> +# define MAP_TYPE 0x0f /* Mask for type of mapping.  */
> +#endif
> +
> +/* Other flags.  */
> +#define MAP_FIXED 0x10 /* Interpret addr exactly.  */
> +#ifdef __USE_MISC
> +# define MAP_FILE 0
> +# define MAP_ANONYMOUS 0x20 /* Don't use a file.  */
> +# define MAP_ANON MAP_ANONYMOUS
> +#endif
> +
> +/* Flags to `msync'.  */
> +#define MS_ASYNC 1 /* Sync memory asynchronously.  */
> +#define MS_SYNC 4 /* Synchronous memory sync.  */
> +#define MS_INVALIDATE 2 /* Invalidate the caches.  */
> +
> +/* Flags for `mremap'.  */
> +#ifdef __USE_GNU
> +# define MREMAP_MAYMOVE 1
> +# define MREMAP_FIXED 2
> +#endif
> +
> +/* Advice to `madvise'.  */
> +#ifdef __USE_BSD
> +# define MADV_NORMAL  0 /* No further special treatment.  */
> +# define MADV_RANDOM  1 /* Expect random page references.  */
> +# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
> +# define MADV_WILLNEED  3 /* Will need these pages.  */
> +# define MADV_DONTNEED  4 /* Don't need these pages.  */
> +# define MADV_REMOVE  9 /* Remove these pages and resources.  */
> +# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
> +# define MADV_DOFORK  11 /* Do inherit across fork.  */
> +# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
> +# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
> +# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
> +# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
> +# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
> +                                   overrides the coredump filter bits.  */
> +# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
> +# define MADV_HWPOISON  100 /* Poison a page for testing.  */
> +#endif
> +
> +/* The POSIX people had to invent similar names for the same things.  */
> +#ifdef __USE_XOPEN2K
> +# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
> +# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
> +# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
> +# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
> +# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
> +#endif
> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
> index a270189..602cebf 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
> @@ -17,42 +17,17 @@
>     <http://www.gnu.org/licenses/>.  */
>  
>  #ifndef _SYS_MMAN_H
> -# error "Never use <bits/mman.h> directly; iclude <sys/mman.h> instead."
> +# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
>  #endif
>  
>  /* The following definitions basically come from the kernel headers.
>     But the kernel header is not namespace clean.  */
> +/* Include generic Linux declarations.  */
>  
> +#include <bits/mman-linux.h>
>  
> -/* Protections are chosen from these bits, OR'd together.  The
> -   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> -   without PROT_READ.  The only guarantees are that no writing will be
> -   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
>  
> -#define PROT_READ 0x1 /* Page can be read.  */
> -#define PROT_WRITE 0x2 /* Page can be written.  */
> -#define PROT_EXEC 0x4 /* Page can be executed.  */
> -#define PROT_NONE 0x0 /* Page can not be accessed.  */
>  #define PROT_SAO 0x10 /* Strong Access Ordering.  */
> -#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
> -   growsdown vma (mprotect only).  */
> -#define PROT_GROWSUP 0x02000000 /* Extend change to start of
> -   growsup vma (mprotect only).  */
> -
> -/* Sharing types (must choose one and only one of these).  */
> -#define MAP_SHARED 0x001 /* Share changes.  */
> -#define MAP_PRIVATE 0x002 /* Changes are private.  */
> -#ifdef __USE_MISC
> -# define MAP_TYPE 0x00f /* Mask for type of mapping.  */
> -#endif
> -
> -/* Other flags.  */
> -#define MAP_FIXED 0x010 /* Interpret addr exactly.  */
> -#ifdef __USE_MISC
> -# define MAP_FILE 0x000
> -# define MAP_ANONYMOUS 0x020 /* Don't use a file.  */
> -# define MAP_ANON MAP_ANONYMOUS
> -#endif
>  
>  /* These are Linux-specific.  */
>  #ifdef __USE_MISC
> @@ -67,48 +42,7 @@
>  # define MAP_HUGETLB 0x40000 /* Create huge page mapping.  */
>  #endif
>  
> -/* Flags to `msync'.  */
> -#define MS_ASYNC 1 /* Sync memory asynchronously.  */
> -#define MS_SYNC 4 /* Synchronous memory sync.  */
> -#define MS_INVALIDATE 2 /* Invalidate the caches.  */
> -
>  /* Flags for `mlockall'.  */
>  #define MCL_CURRENT 0x2000 /* Lock all currently mapped pages.  */
>  #define MCL_FUTURE 0x4000 /* Lock all additions to address
>     space.  */
> -
> -
> -/* Flags for `mremap'.  */
> -#ifdef __USE_GNU
> -# define MREMAP_MAYMOVE 1
> -# define MREMAP_FIXED 2
> -#endif
> -
> -/* Advice to `madvise'.  */
> -#ifdef __USE_BSD
> -# define MADV_NORMAL  0 /* No further special treatment.  */
> -# define MADV_RANDOM  1 /* Expect random page references.  */
> -# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
> -# define MADV_WILLNEED  3 /* Will need these pages.  */
> -# define MADV_DONTNEED  4 /* Don't need these pages.  */
> -# define MADV_REMOVE  9 /* Remove these pages and resources.  */
> -# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
> -# define MADV_DOFORK  11 /* Do inherit across fork.  */
> -# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
> -# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
> -# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
> -# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
> -# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
> -                                   overrides the coredump filter bits.  */
> -# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
> -# define MADV_HWPOISON  100 /* Poison a page for testing.  */
> -#endif
> -
> -/* The POSIX people had to invent similar names for the same things.  */
> -#ifdef __USE_XOPEN2K
> -# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
> -# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
> -# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
> -# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
> -# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/s390/bits/mman.h b/sysdeps/unix/sysv/linux/s390/bits/mman.h
> index 3e7bf92..59f4511 100644
> --- a/sysdeps/unix/sysv/linux/s390/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/s390/bits/mman.h
> @@ -24,38 +24,10 @@
>     But the kernel header is not namespace clean.  */
>  
>  
> -/* Protections are chosen from these bits, OR'd together.  The
> -   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> -   without PROT_READ.  The only guarantees are that no writing will be
> -   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
> -
> -#define PROT_READ 0x1 /* Page can be read.  */
> -#define PROT_WRITE 0x2 /* Page can be written.  */
> -#define PROT_EXEC 0x4 /* Page can be executed.  */
> -#define PROT_NONE 0x0 /* Page can not be accessed.  */
> -#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
> -   growsdown vma (mprotect only).  */
> -#define PROT_GROWSUP 0x02000000 /* Extend change to start of
> -   growsup vma (mprotect only).  */
> -
> -/* Sharing types (must choose one and only one of these).  */
> -#define MAP_SHARED 0x01 /* Share changes.  */
> -#define MAP_PRIVATE 0x02 /* Changes are private.  */
> -#ifdef __USE_MISC
> -# define MAP_TYPE 0x0f /* Mask for type of mapping.  */
> -#endif
> -
> -/* Other flags.  */
> -#define MAP_FIXED 0x10 /* Interpret addr exactly.  */
> -#ifdef __USE_MISC
> -# define MAP_FILE 0
> -# define MAP_ANONYMOUS 0x20 /* Don't use a file.  */
> -# define MAP_ANON MAP_ANONYMOUS
> -#endif
> -
>  /* These are Linux-specific.  */
>  #ifdef __USE_MISC
>  # define MAP_GROWSDOWN 0x00100 /* Stack-like segment.  */
> +// XXX? Not defined in Linux kernel 3.8
>  # define MAP_GROWSUP 0x00200 /* Register stack-like segment */
Now we need to be very careful that the kernel people don't reuse this value.

As you can see from my comments in the unification patch:
+#define __MAP_PRIVATE5 0x0200 /* Do not use. Private to sparc and tile. */

It's actually MAP_GROWSDOWN on SPARC, and MAP_LOCKED on TILE.

Do you know anyone that we can get to push these kinds of changes upstream?

>  # define MAP_DENYWRITE 0x00800 /* ETXTBSY */
>  # define MAP_EXECUTABLE 0x01000 /* Mark it as an executable.  */
> @@ -67,47 +39,7 @@
>  # define MAP_HUGETLB 0x40000 /* Create huge page mapping.  */
>  #endif
>  
> -/* Flags to `msync'.  */
> -#define MS_ASYNC 1 /* Sync memory asynchronously.  */
> -#define MS_SYNC 4 /* Synchronous memory sync.  */
> -#define MS_INVALIDATE 2 /* Invalidate the caches.  */
> -
>  /* Flags for `mlockall'.  */
>  #define MCL_CURRENT 1 /* Lock all currently mapped pages.  */
>  #define MCL_FUTURE 2 /* Lock all additions to address
>     space.  */
Why aren't these in the generic file? As far as I can tell almost everyone
uses the values of 1 and 2 respectively. The exception being SPARC.

> -
> -/* Flags for `mremap'.  */
> -#ifdef __USE_GNU
> -# define MREMAP_MAYMOVE 1
> -# define MREMAP_FIXED 2
> -#endif
> -
> -/* Advice to `madvise'.  */
> -#ifdef __USE_BSD
> -# define MADV_NORMAL  0 /* No further special treatment.  */
> -# define MADV_RANDOM  1 /* Expect random page references.  */
> -# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
> -# define MADV_WILLNEED  3 /* Will need these pages.  */
> -# define MADV_DONTNEED  4 /* Don't need these pages.  */
> -# define MADV_REMOVE  9 /* Remove these pages and resources.  */
> -# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
> -# define MADV_DOFORK  11 /* Do inherit across fork.  */
> -# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
> -# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
> -# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
> -# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
> -# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
> -                                   overrides the coredump filter bits.  */
> -# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
> -# define MADV_HWPOISON  100 /* Poison a page for testing.  */
> -#endif
> -
> -/* The POSIX people had to invent similar names for the same things.  */
> -#ifdef __USE_XOPEN2K
> -# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
> -# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
> -# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
> -# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
> -# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/sh/bits/mman.h b/sysdeps/unix/sysv/linux/sh/bits/mman.h
> index 40da97e..0573f83 100644
> --- a/sysdeps/unix/sysv/linux/sh/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/sh/bits/mman.h
> @@ -23,35 +23,8 @@
>  /* The following definitions basically come from the kernel headers.
>     But the kernel header is not namespace clean.  */
>  
> -
> -/* Protections are chosen from these bits, OR'd together.  The
> -   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> -   without PROT_READ.  The only guarantees are that no writing will be
> -   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
> -
> -#define PROT_READ 0x1 /* Page can be read.  */
> -#define PROT_WRITE 0x2 /* Page can be written.  */
> -#define PROT_EXEC 0x4 /* Page can be executed.  */
> -#define PROT_NONE 0x0 /* Page can not be accessed.  */
> -#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
> -   growsdown vma (mprotect only).  */
> -#define PROT_GROWSUP 0x02000000 /* Extend change to start of
> -   growsup vma (mprotect only).  */
> -
> -/* Sharing types (must choose one and only one of these).  */
> -#define MAP_SHARED 0x01 /* Share changes.  */
> -#define MAP_PRIVATE 0x02 /* Changes are private.  */
> -#ifdef __USE_MISC
> -# define MAP_TYPE 0x0f /* Mask for type of mapping.  */
> -#endif
> -
> -/* Other flags.  */
> -#define MAP_FIXED 0x10 /* Interpret addr exactly.  */
> -#ifdef __USE_MISC
> -# define MAP_FILE 0
> -# define MAP_ANONYMOUS 0x20 /* Don't use a file.  */
> -# define MAP_ANON MAP_ANONYMOUS
> -#endif
> +/* Include generic Linux declarations.  */
> +#include <bits/mman-linux.h>
>  
>  /* These are Linux-specific.  */
>  #ifdef __USE_MISC
> @@ -66,47 +39,7 @@
>  # define MAP_HUGETLB 0x40000 /* Create huge page mapping.  */
>  #endif
>  
> -/* Flags to `msync'.  */
> -#define MS_ASYNC 1 /* Sync memory asynchronously.  */
> -#define MS_SYNC 4 /* Synchronous memory sync.  */
> -#define MS_INVALIDATE 2 /* Invalidate the caches.  */
> -
>  /* Flags for `mlockall'.  */
>  #define MCL_CURRENT 1 /* Lock all currently mapped pages.  */
>  #define MCL_FUTURE 2 /* Lock all additions to address
>     space.  */
> -
> -/* Flags for `mremap'.  */
> -#ifdef __USE_GNU
> -# define MREMAP_MAYMOVE 1
> -# define MREMAP_FIXED 2
> -#endif
> -
> -/* Advice to `madvise'.  */
> -#ifdef __USE_BSD
> -# define MADV_NORMAL  0 /* No further special treatment.  */
> -# define MADV_RANDOM  1 /* Expect random page references.  */
> -# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
> -# define MADV_WILLNEED  3 /* Will need these pages.  */
> -# define MADV_DONTNEED  4 /* Don't need these pages.  */
> -# define MADV_REMOVE  9 /* Remove these pages and resources.  */
> -# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
> -# define MADV_DOFORK  11 /* Do inherit across fork.  */
> -# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
> -# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
> -# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
> -# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
> -# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
> -                                   overrides the coredump filter bits.  */
> -# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
> -# define MADV_HWPOISON  100 /* Poison a page for testing.  */
> -#endif
> -
> -/* The POSIX people had to invent similar names for the same things.  */
> -#ifdef __USE_XOPEN2K
> -# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
> -# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
> -# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
> -# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
> -# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/sparc/bits/mman.h b/sysdeps/unix/sysv/linux/sparc/bits/mman.h
> index 616e243..64cdd2e 100644
> --- a/sysdeps/unix/sysv/linux/sparc/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/sparc/bits/mman.h
> @@ -23,34 +23,11 @@
>  /* The following definitions basically come from the kernel headers.
>     But the kernel header is not namespace clean.  */
>  
> -
> -/* Protections are chosen from these bits, OR'd together.  The
> -   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> -   without PROT_READ.  The only guarantees are that no writing will be
> -   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
> -
> -#define PROT_READ 0x1 /* Page can be read.  */
> -#define PROT_WRITE 0x2 /* Page can be written.  */
> -#define PROT_EXEC 0x4 /* Page can be executed.  */
> -#define PROT_NONE 0x0 /* Page can not be accessed.  */
> -#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
> -   growsdown vma (mprotect only).  */
> -#define PROT_GROWSUP 0x02000000 /* Extend change to start of
> -   growsup vma (mprotect only).  */
> -
> -/* Sharing types (must choose one and only one of these).  */
> -#define MAP_SHARED 0x01 /* Share changes.  */
> -#define MAP_PRIVATE 0x02 /* Changes are private.  */
> -#ifdef __USE_MISC
> -# define MAP_TYPE 0x0f /* Mask for type of mapping.  */
> -#endif
> +/* Include generic Linux declarations.  */
> +#include <bits/mman-linux.h>
>  
>  /* Other flags.  */
> -#define MAP_FIXED 0x10 /* Interpret addr exactly.  */
>  #ifdef __USE_MISC
> -# define MAP_FILE 0x00
> -# define MAP_ANONYMOUS 0x20 /* Don't use a file.  */
> -# define MAP_ANON MAP_ANONYMOUS
>  # define MAP_RENAME MAP_ANONYMOUS
>  #endif
>  
> @@ -68,48 +45,8 @@
>  # define MAP_HUGETLB 0x40000 /* Create huge page mapping.  */
>  #endif
>  
> -/* Flags to `msync'.  */
> -#define MS_ASYNC 1 /* Sync memory asynchronously.  */
> -#define MS_SYNC 4 /* Synchronous memory sync.  */
> -#define MS_INVALIDATE 2 /* Invalidate the caches.  */
> -
>  /* Flags for `mlockall'.  */
>  #define MCL_CURRENT 0x2000 /* Lock all currently mapped pages.  */
>  #define MCL_FUTURE 0x4000 /* Lock all additions to address
>     space.  */
>  
> -/* Flags for `mremap'.  */
> -#ifdef __USE_GNU
> -# define MREMAP_MAYMOVE 1
> -# define MREMAP_FIXED 2
> -#endif
> -
> -/* Advice to `madvise'.  */
> -#ifdef __USE_BSD
> -# define MADV_NORMAL  0 /* No further special treatment.  */
> -# define MADV_RANDOM  1 /* Expect random page references.  */
> -# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
> -# define MADV_WILLNEED  3 /* Will need these pages.  */
> -# define MADV_DONTNEED  4 /* Don't need these pages.  */
> -# define MADV_FREE  5 /* Content can be freed (Solaris).  */
> -# define MADV_REMOVE  9 /* Remove these pages and resources.  */
> -# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
> -# define MADV_DOFORK  11 /* Do inherit across fork.  */
> -# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
> -# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
> -# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
> -# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
> -# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
> -                                   overrides the coredump filter bits.  */
> -# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
> -# define MADV_HWPOISON  100 /* Poison a page for testing.  */
> -#endif
> -
> -/* The POSIX people had to invent similar names for the same things.  */
> -#ifdef __USE_XOPEN2K
> -# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
> -# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
> -# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
> -# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
> -# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
> -#endif
> diff --git a/sysdeps/unix/sysv/linux/x86/bits/mman.h b/sysdeps/unix/sysv/linux/x86/bits/mman.h
> index 591df13..0f0f8b1 100644
> --- a/sysdeps/unix/sysv/linux/x86/bits/mman.h
> +++ b/sysdeps/unix/sysv/linux/x86/bits/mman.h
> @@ -23,34 +23,11 @@
>  /* The following definitions basically come from the kernel headers.
>     But the kernel header is not namespace clean.  */
>  
> -
> -/* Protections are chosen from these bits, OR'd together.  The
> -   implementation does not necessarily support PROT_EXEC or PROT_WRITE
> -   without PROT_READ.  The only guarantees are that no writing will be
> -   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
> -
> -#define PROT_READ 0x1 /* Page can be read.  */
> -#define PROT_WRITE 0x2 /* Page can be written.  */
> -#define PROT_EXEC 0x4 /* Page can be executed.  */
> -#define PROT_NONE 0x0 /* Page can not be accessed.  */
> -#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of
> -   growsdown vma (mprotect only).  */
> -#define PROT_GROWSUP 0x02000000 /* Extend change to start of
> -   growsup vma (mprotect only).  */
> -
> -/* Sharing types (must choose one and only one of these).  */
> -#define MAP_SHARED 0x01 /* Share changes.  */
> -#define MAP_PRIVATE 0x02 /* Changes are private.  */
> -#ifdef __USE_MISC
> -# define MAP_TYPE 0x0f /* Mask for type of mapping.  */
> -#endif
> +/* Include generic Linux declarations.  */
> +#include <bits/mman-linux.h>
>  
>  /* Other flags.  */
> -#define MAP_FIXED 0x10 /* Interpret addr exactly.  */
>  #ifdef __USE_MISC
> -# define MAP_FILE 0
> -# define MAP_ANONYMOUS 0x20 /* Don't use a file.  */
> -# define MAP_ANON MAP_ANONYMOUS
>  # define MAP_32BIT 0x40 /* Only give out 32-bit addresses.  */
>  #endif
>  
> @@ -67,47 +44,7 @@
>  # define MAP_HUGETLB 0x40000 /* Create huge page mapping.  */
>  #endif
>  
> -/* Flags to `msync'.  */
> -#define MS_ASYNC 1 /* Sync memory asynchronously.  */
> -#define MS_SYNC 4 /* Synchronous memory sync.  */
> -#define MS_INVALIDATE 2 /* Invalidate the caches.  */
> -
>  /* Flags for `mlockall'.  */
>  #define MCL_CURRENT 1 /* Lock all currently mapped pages.  */
>  #define MCL_FUTURE 2 /* Lock all additions to address
>     space.  */
> -
> -/* Flags for `mremap'.  */
> -#ifdef __USE_GNU
> -# define MREMAP_MAYMOVE 1
> -# define MREMAP_FIXED 2
> -#endif
> -
> -/* Advice to `madvise'.  */
> -#ifdef __USE_BSD
> -# define MADV_NORMAL  0 /* No further special treatment.  */
> -# define MADV_RANDOM  1 /* Expect random page references.  */
> -# define MADV_SEQUENTIAL  2 /* Expect sequential page references.  */
> -# define MADV_WILLNEED  3 /* Will need these pages.  */
> -# define MADV_DONTNEED  4 /* Don't need these pages.  */
> -# define MADV_REMOVE  9 /* Remove these pages and resources.  */
> -# define MADV_DONTFORK  10 /* Do not inherit across fork.  */
> -# define MADV_DOFORK  11 /* Do inherit across fork.  */
> -# define MADV_MERGEABLE  12 /* KSM may merge identical pages.  */
> -# define MADV_UNMERGEABLE 13 /* KSM may not merge identical pages.  */
> -# define MADV_HUGEPAGE  14 /* Worth backing with hugepages.  */
> -# define MADV_NOHUGEPAGE  15 /* Not worth backing with hugepages.  */
> -# define MADV_DONTDUMP  16    /* Explicity exclude from the core dump,
> -                                   overrides the coredump filter bits.  */
> -# define MADV_DODUMP  17 /* Clear the MADV_DONTDUMP flag.  */
> -# define MADV_HWPOISON  100 /* Poison a page for testing.  */
> -#endif
> -
> -/* The POSIX people had to invent similar names for the same things.  */
> -#ifdef __USE_XOPEN2K
> -# define POSIX_MADV_NORMAL 0 /* No further special treatment.  */
> -# define POSIX_MADV_RANDOM 1 /* Expect random page references.  */
> -# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references.  */
> -# define POSIX_MADV_WILLNEED 3 /* Will need these pages.  */
> -# define POSIX_MADV_DONTNEED 4 /* Don't need these pages.  */
> -#endif
>
Cheers,
Carlos.

unify-uapi-mman.h (17K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Create Linux common <bits/mman-linux.h>

Roland McGrath-4
I think we should start with AJ's version, which is more conservative.
Then we can consider piecemeal changes to further reduce duplication.


Thanks,
Roland
Reply | Threaded
Open this post in threaded view
|

Re: Create Linux common <bits/mman-linux.h>

Carlos O'Donell-6
On 03/01/2013 05:01 PM, Roland McGrath wrote:
> I think we should start with AJ's version, which is more conservative.
> Then we can consider piecemeal changes to further reduce duplication.

Fully agree.

Cheers,
Carlos.

Reply | Threaded
Open this post in threaded view
|

Re: Create Linux common <bits/mman-linux.h>

Andreas Jaeger-8
On 03/02/2013 12:19 AM, Carlos O'Donell wrote:
> On 03/01/2013 05:01 PM, Roland McGrath wrote:
>> I think we should start with AJ's version, which is more conservative.
>> Then we can consider piecemeal changes to further reduce duplication.
>
> Fully agree.


I think the way I created the files - just deleting the common things
from it, it should be safe. But I'll double check the diff tomorrow as well.

Anybody else that wants to review this - or how shall we continue?

Andreas
--
  Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
   SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
    GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
     GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126
Reply | Threaded
Open this post in threaded view
|

Re: Create Linux common <bits/mman-linux.h>

Carlos O'Donell-2
On Sun, Mar 3, 2013 at 4:16 PM, Andreas Jaeger <[hidden email]> wrote:
> I think the way I created the files - just deleting the common things from
> it, it should be safe. But I'll double check the diff tomorrow as well.
>
> Anybody else that wants to review this - or how shall we continue?

I gave it a quick check against the constants I expected to be
different for each machine and it looks good to me.

Like I said, the only thing I noticed was the MCL_* duplication
because one machine has it different, which is why I suggested making
a canonical file with all the constants, and have each machine
undefine those which are different.

Cheers,
Carlos.
Reply | Threaded
Open this post in threaded view
|

Re: Create Linux common <bits/mman-linux.h>

Andreas Jaeger-8
On Monday, March 04, 2013 09:11:53 Carlos O'Donell wrote:

> On Sun, Mar 3, 2013 at 4:16 PM, Andreas Jaeger <[hidden email]> wrote:
> > I think the way I created the files - just deleting the common
> > things from it, it should be safe. But I'll double check the diff
> > tomorrow as well.
> >
> > Anybody else that wants to review this - or how shall we continue?
>
> I gave it a quick check against the constants I expected to be
> different for each machine and it looks good to me.
>
> Like I said, the only thing I noticed was the MCL_* duplication
> because one machine has it different, which is why I suggested making
> a canonical file with all the constants, and have each machine
> undefine those which are different.

Let me rearrange the include order and then have an #ifndef MCL_ #define
there - and then I'll think we're fine for submission,

Andreas
--
 Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
  SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
   GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
    GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126

Reply | Threaded
Open this post in threaded view
|

Re: Create Linux common <bits/mman-linux.h>

Carlos O'Donell-6
On 03/04/2013 10:02 AM, Andreas Jaeger wrote:

> On Monday, March 04, 2013 09:11:53 Carlos O'Donell wrote:
>> On Sun, Mar 3, 2013 at 4:16 PM, Andreas Jaeger <[hidden email]> wrote:
>>> I think the way I created the files - just deleting the common
>>> things from it, it should be safe. But I'll double check the diff
>>> tomorrow as well.
>>>
>>> Anybody else that wants to review this - or how shall we continue?
>>
>> I gave it a quick check against the constants I expected to be
>> different for each machine and it looks good to me.
>>
>> Like I said, the only thing I noticed was the MCL_* duplication
>> because one machine has it different, which is why I suggested making
>> a canonical file with all the constants, and have each machine
>> undefine those which are different.
>
> Let me rearrange the include order and then have an #ifndef MCL_ #define
> there - and then I'll think we're fine for submission,

Please don't worry too much about this, it was just a suggestion.
Your patch as-is is perfectly acceptable. I'd rather see it checked
in today, than possibly three weeks from now. This kind of thing always
happens to me, I have 45 minutes to make a patch, and if the review
runs too long then I don't get time until next week :-)

Cheers,
Carlos.

Reply | Threaded
Open this post in threaded view
|

Re: Create Linux common <bits/mman-linux.h>

Andreas Jaeger-8
On 03/04/2013 04:27 PM, Carlos O'Donell wrote:

> On 03/04/2013 10:02 AM, Andreas Jaeger wrote:
>> [...]
>> Let me rearrange the include order and then have an #ifndef MCL_ #define
>> there - and then I'll think we're fine for submission,
>
> Please don't worry too much about this, it was just a suggestion.
> Your patch as-is is perfectly acceptable. I'd rather see it checked
> in today, than possibly three weeks from now. This kind of thing always
> happens to me, I have 45 minutes to make a patch, and if the review
> runs too long then I don't get time until next week :-)

Ok, pushed it - and will work on the followup now ;)

thanks,
Andreas
--
  Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
   SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
    GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
     GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126