]> git.ipfire.org Git - thirdparty/gnulib.git/commitdiff
Remove support for IRIX and Solaris <= 7 regarding old mmap.
authorBruno Haible <bruno@clisp.org>
Wed, 10 Sep 2025 21:03:55 +0000 (23:03 +0200)
committerBruno Haible <bruno@clisp.org>
Wed, 10 Sep 2025 21:04:12 +0000 (23:04 +0200)
* m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Don't define HAVE_MAP_ANONYMOUS.
* m4/memchr.m4 (gl_FUNC_MEMCHR): Assume that mmap supports MAP_ANONYMOUS
or MAP_ANON.
* m4/strncat.m4 (gl_FUNC_STRNCAT): Likewise.
* lib/get-rusage-as.c (MAP_FILE): Remove macro.
(get_rusage_as_via_setrlimit): Assume that mmap supports MAP_ANONYMOUS
or MAP_ANON.
* modules/get-rusage-as (Depends-on): Remove 'open'.
* lib/pagealign_alloc.c (MAP_FILE): Remove macro.
(pagealign_alloc): Assume that mmap supports MAP_ANONYMOUS or MAP_ANON.
* modules/pagealign_alloc (Depends-on): Remove 'open'.
* lib/vma-iter.c: Remove code for IRIX.
(vma_iterate): Assume that mmap supports MAP_ANONYMOUS or MAP_ANON.
* lib/vma-iter.h: Remove code for IRIX.
* lib/stackvma.c: Remove code for IRIX.
(vma_iterate): Assume that mmap supports MAP_ANONYMOUS or MAP_ANON.
* lib/stackvma.h: Remove code for IRIX.
* tests/mmap-anon-util.h: (zero_fd, map_flags, MAP_FILE): Remove macros.
(mmap_zeromap): Assume that mmap supports MAP_ANONYMOUS or MAP_ANON.
* tests/zerosize-ptr.h (MAP_FILE): Remove macro.
(zerosize_ptr): Assume that mmap supports MAP_ANONYMOUS or MAP_ANON.
* tests/jit/test-cache.c (main): Assume that mmap supports MAP_ANONYMOUS
or MAP_ANON.
* tests/test-sigsegv-catch-segv1.c (main): Assume that mmap supports
MAP_ANONYMOUS or MAP_ANON.
* tests/test-sigsegv-catch-segv2.c (main): Likewise.
* tests/test-sigsegv-catch-stackoverflow2.c (main): Likewise.
* tests/test-vma-prot.c: Test HAVE_MMAP instead of HAVE_MAP_ANONYMOUS.

19 files changed:
ChangeLog
lib/get-rusage-as.c
lib/pagealign_alloc.c
lib/stackvma.c
lib/stackvma.h
lib/vma-iter.c
lib/vma-iter.h
m4/memchr.m4
m4/mmap-anon.m4
m4/strncat.m4
modules/get-rusage-as
modules/pagealign_alloc
tests/jit/test-cache.c
tests/mmap-anon-util.h
tests/test-sigsegv-catch-segv1.c
tests/test-sigsegv-catch-segv2.c
tests/test-sigsegv-catch-stackoverflow2.c
tests/test-vma-prot.c
tests/zerosize-ptr.h

index f38ad67678defe41c335fe6066bb2455167b7104..88931256cbe32ad04e428f47a8b34ab32a2d1a17 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,35 @@
 2025-09-10  Bruno Haible  <bruno@clisp.org>
 
+       Remove support for IRIX and Solaris <= 7 regarding old mmap.
+       * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Don't define HAVE_MAP_ANONYMOUS.
+       * m4/memchr.m4 (gl_FUNC_MEMCHR): Assume that mmap supports MAP_ANONYMOUS
+       or MAP_ANON.
+       * m4/strncat.m4 (gl_FUNC_STRNCAT): Likewise.
+       * lib/get-rusage-as.c (MAP_FILE): Remove macro.
+       (get_rusage_as_via_setrlimit): Assume that mmap supports MAP_ANONYMOUS
+       or MAP_ANON.
+       * modules/get-rusage-as (Depends-on): Remove 'open'.
+       * lib/pagealign_alloc.c (MAP_FILE): Remove macro.
+       (pagealign_alloc): Assume that mmap supports MAP_ANONYMOUS or MAP_ANON.
+       * modules/pagealign_alloc (Depends-on): Remove 'open'.
+       * lib/vma-iter.c: Remove code for IRIX.
+       (vma_iterate): Assume that mmap supports MAP_ANONYMOUS or MAP_ANON.
+       * lib/vma-iter.h: Remove code for IRIX.
+       * lib/stackvma.c: Remove code for IRIX.
+       (vma_iterate): Assume that mmap supports MAP_ANONYMOUS or MAP_ANON.
+       * lib/stackvma.h: Remove code for IRIX.
+       * tests/mmap-anon-util.h: (zero_fd, map_flags, MAP_FILE): Remove macros.
+       (mmap_zeromap): Assume that mmap supports MAP_ANONYMOUS or MAP_ANON.
+       * tests/zerosize-ptr.h (MAP_FILE): Remove macro.
+       (zerosize_ptr): Assume that mmap supports MAP_ANONYMOUS or MAP_ANON.
+       * tests/jit/test-cache.c (main): Assume that mmap supports MAP_ANONYMOUS
+       or MAP_ANON.
+       * tests/test-sigsegv-catch-segv1.c (main): Assume that mmap supports
+       MAP_ANONYMOUS or MAP_ANON.
+       * tests/test-sigsegv-catch-segv2.c (main): Likewise.
+       * tests/test-sigsegv-catch-stackoverflow2.c (main): Likewise.
+       * tests/test-vma-prot.c: Test HAVE_MMAP instead of HAVE_MAP_ANONYMOUS.
+
        signbit, *-ieee: Remove support for IRIX.
        * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): Remove code for IRIX.
 
index c1dad89a1b4c707c552fe73cad7aced8893f799d..312351b8b7d709a516cff4db80f675ca06735d16 100644 (file)
      is slightly larger higher than get_rusage_as_via_setrlimit(), by 4 KB in
      32-bit mode and by 40 KB in 64-bit mode.
 
-   IRIX:
-     a) setrlimit with RLIMIT_AS works.
-     b) The /proc/$pid file supports ioctls PIOCNMAP and PIOCMAP.
-     Both methods agree,
-
    Solaris:
      a) setrlimit with RLIMIT_AS works.
      b) The /proc/$pid file supports ioctls PIOCNMAP and PIOCMAP, and the
 # include <fcntl.h>
 # include <sys/types.h>
 # include <sys/mman.h> /* mmap, munmap */
-/* Define MAP_FILE when it isn't otherwise.  */
-# ifndef MAP_FILE
-#  define MAP_FILE 0
-# endif
 #endif
 
 
@@ -165,16 +156,6 @@ get_rusage_as_via_setrlimit (void)
 
   struct rlimit orig_limit;
 
-# if HAVE_MAP_ANONYMOUS
-  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
-  const int fd = -1;
-# else /* !HAVE_MAP_ANONYMOUS */
-  const int flags = MAP_FILE | MAP_PRIVATE;
-  int fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0666);
-  if (fd < 0)
-    return 0;
-# endif
-
   /* Record the original limit.  */
   if (getrlimit (RLIMIT_AS, &orig_limit) < 0)
     {
@@ -230,7 +211,8 @@ get_rusage_as_via_setrlimit (void)
             /* Allocate a page of memory, to compare the current address space
                size with try_limit.rlim_cur.  */
             void *new_page =
-              mmap (NULL, pagesize, PROT_READ | PROT_WRITE, flags, fd, 0);
+              mmap (NULL, pagesize, PROT_READ | PROT_WRITE,
+                    MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 
             if (new_page != (void *)(-1))
               {
@@ -276,7 +258,8 @@ get_rusage_as_via_setrlimit (void)
             /* Allocate a page of memory, to compare the current address space
                size with try_limit.rlim_cur.  */
             void *new_page =
-              mmap (NULL, pagesize, PROT_READ | PROT_WRITE, flags, fd, 0);
+              mmap (NULL, pagesize, PROT_READ | PROT_WRITE,
+                    MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 
             if (new_page != (void *)(-1))
               {
@@ -314,9 +297,6 @@ get_rusage_as_via_setrlimit (void)
     abort ();
 
  done2:
-# if !HAVE_MAP_ANONYMOUS
-  close (fd);
-# endif
   return result;
 }
 
index b027e78fc68e67af1390f9233bf2008fd22aac82..06aad1ee5222454efc3c2e000a09473670b37162 100644 (file)
 #define _(msgid) dgettext (GNULIB_TEXT_DOMAIN, msgid)
 
 #if HAVE_MMAP
-/* Define MAP_FILE when it isn't otherwise.  */
-# ifndef MAP_FILE
-#  define MAP_FILE 0
-# endif
 /* Define MAP_FAILED for old systems which neglect to.  */
 # ifndef MAP_FAILED
 #  define MAP_FAILED ((void *)-1)
@@ -123,22 +119,8 @@ pagealign_alloc (size_t size)
      based approaches, since the latter often waste an entire memory page
      per call.  */
 #if HAVE_MMAP
-# ifdef HAVE_MAP_ANONYMOUS
-  const int fd = -1;
-  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
-# else /* !HAVE_MAP_ANONYMOUS */
-  static int fd = -1;  /* Only open /dev/zero once in order to avoid limiting
-                          the amount of memory we may allocate based on the
-                          number of open file descriptors.  */
-  const int flags = MAP_FILE | MAP_PRIVATE;
-  if (fd == -1)
-    {
-      fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0666);
-      if (fd < 0)
-        error (EXIT_FAILURE, errno, _("Failed to open /dev/zero for read"));
-    }
-# endif /* HAVE_MAP_ANONYMOUS */
-  ret = mmap (NULL, size, PROT_READ | PROT_WRITE, flags, fd, 0);
+  ret = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE,
+              -1, 0);
   if (ret == MAP_FAILED)
     return NULL;
   new_memnode (ret, size);
index 719a129c2222ae084374314ff788decffb9d2bf0..95bb80db7c14c467d5aa0740a120068994a86ad7 100644 (file)
@@ -51,7 +51,7 @@
     || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ \
     || defined __NetBSD__ \
     || (defined __APPLE__ && defined __MACH__) \
-    || defined _AIX || defined __sgi || defined __sun \
+    || defined _AIX || defined __sun \
     || defined __CYGWIN__ || defined __HAIKU__
 
 /* This file contains the proximity test function for the simple cases, where
@@ -1854,7 +1854,7 @@ sigsegv_get_vma (uintptr_t address, struct vma_struct *vma)
 
 /* --------------------------- stackvma-procfs.c --------------------------- */
 
-#elif defined __sgi || defined __sun /* IRIX, Solaris */
+#elif defined __sun /* Solaris */
 
 # include <errno.h> /* errno, EINTR */
 # include <fcntl.h> /* open, O_RDONLY */
@@ -1961,13 +1961,6 @@ vma_iterate (struct callback_locals *locals)
   int fd;
   int nmaps;
   size_t memneed;
-#  if HAVE_MAP_ANONYMOUS
-#   define zero_fd -1
-#   define map_flags MAP_ANONYMOUS
-#  else /* !HAVE_MAP_ANONYMOUS */
-  int zero_fd;
-#   define map_flags 0
-#  endif
   void *auxmap;
   uintptr_t auxmap_start;
   uintptr_t auxmap_end;
@@ -2003,16 +1996,8 @@ vma_iterate (struct callback_locals *locals)
      and thus pre-allocate available memory.
      So use mmap(), and ignore the resulting VMA.  */
   memneed = ((memneed - 1) / pagesize + 1) * pagesize;
-#  if !HAVE_MAP_ANONYMOUS
-  zero_fd = open ("/dev/zero", O_RDONLY, 0644);
-  if (zero_fd < 0)
-    goto fail2;
-#  endif
   auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE,
-                          map_flags | MAP_PRIVATE, zero_fd, 0);
-#  if !HAVE_MAP_ANONYMOUS
-  close (zero_fd);
-#  endif
+                          MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
   if (auxmap == (void *) -1)
     goto fail2;
   auxmap_start = (uintptr_t) auxmap;
@@ -2071,13 +2056,6 @@ vma_iterate (struct callback_locals *locals)
   int fd;
   int nmaps;
   size_t memneed;
-#  if HAVE_MAP_ANONYMOUS
-#   define zero_fd -1
-#   define map_flags MAP_ANONYMOUS
-#  else /* !HAVE_MAP_ANONYMOUS */
-  int zero_fd;
-#   define map_flags 0
-#  endif
   void *auxmap;
   uintptr_t auxmap_start;
   uintptr_t auxmap_end;
@@ -2118,16 +2096,8 @@ vma_iterate (struct callback_locals *locals)
      and thus pre-allocate available memory.
      So use mmap(), and ignore the resulting VMA.  */
   memneed = ((memneed - 1) / pagesize + 1) * pagesize;
-#  if !HAVE_MAP_ANONYMOUS
-  zero_fd = open ("/dev/zero", O_RDONLY, 0644);
-  if (zero_fd < 0)
-    goto fail2;
-#  endif
   auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE,
-                          map_flags | MAP_PRIVATE, zero_fd, 0);
-#  if !HAVE_MAP_ANONYMOUS
-  close (zero_fd);
-#  endif
+                          MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
   if (auxmap == (void *) -1)
     goto fail2;
   auxmap_start = (uintptr_t) auxmap;
index 307de847a3da86c8b839dbc8aa431d5aaa30aaf4..6bbd5e0cf9473d09aa2f88cb76523c8d30dab77f 100644 (file)
@@ -54,7 +54,7 @@ extern int sigsegv_get_vma (uintptr_t address, struct vma_struct *vma);
     || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ \
     || defined __NetBSD__ || defined __OpenBSD__ \
     || (defined __APPLE__ && defined __MACH__) \
-    || defined _AIX || defined __sgi || defined __sun \
+    || defined _AIX || defined __sun \
     || defined __CYGWIN__ || defined __HAIKU__
 # define HAVE_STACKVMA 1
 #endif
index 295696039ce2163806748f1a56cbadede7965dbb..e1308bef5b7c7fd3d5da33ec65521fbb9ec14d04 100644 (file)
 # include <sys/procfs.h> /* prmap_t */
 #endif
 
-#if defined __sgi /* IRIX */
-# include <string.h> /* memcpy */
-# include <sys/types.h>
-# include <sys/mman.h> /* mmap, munmap */
-# include <sys/procfs.h> /* PIOC*, prmap_t */
-#endif
-
 #if defined __sun /* Solaris */
 # include <string.h> /* memcpy */
 # include <sys/types.h>
@@ -1191,118 +1184,6 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
   close (fd);
   return 0;
 
-#elif defined __sgi /* IRIX */
-
-  size_t pagesize;
-  char fnamebuf[6+10+1];
-  char *fname;
-  int fd;
-  int nmaps;
-  size_t memneed;
-# if HAVE_MAP_ANONYMOUS
-#  define zero_fd -1
-#  define map_flags MAP_ANONYMOUS
-# else
-  int zero_fd;
-#  define map_flags 0
-# endif
-  void *auxmap;
-  unsigned long auxmap_start;
-  unsigned long auxmap_end;
-  prmap_t* maps;
-  prmap_t* mp;
-
-  pagesize = getpagesize ();
-
-  /* Construct fname = sprintf (fnamebuf+i, "/proc/%u", getpid ()).  */
-  fname = fnamebuf + sizeof (fnamebuf) - 1;
-  *fname = '\0';
-  {
-    unsigned int value = getpid ();
-    do
-      *--fname = (value % 10) + '0';
-    while ((value = value / 10) > 0);
-  }
-  fname -= 6;
-  memcpy (fname, "/proc/", 6);
-
-  fd = open (fname, O_RDONLY | O_CLOEXEC);
-  if (fd < 0)
-    return -1;
-
-  if (ioctl (fd, PIOCNMAP, &nmaps) < 0)
-    goto fail2;
-
-  memneed = (nmaps + 10) * sizeof (prmap_t);
-  /* Allocate memneed bytes of memory.
-     We cannot use alloca here, because not much stack space is guaranteed.
-     We also cannot use malloc here, because a malloc() call may call mmap()
-     and thus pre-allocate available memory.
-     So use mmap(), and ignore the resulting VMA.  */
-  memneed = ((memneed - 1) / pagesize + 1) * pagesize;
-# if !HAVE_MAP_ANONYMOUS
-  zero_fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0644);
-  if (zero_fd < 0)
-    goto fail2;
-# endif
-  auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE,
-                          map_flags | MAP_PRIVATE, zero_fd, 0);
-# if !HAVE_MAP_ANONYMOUS
-  close (zero_fd);
-# endif
-  if (auxmap == (void *) -1)
-    goto fail2;
-  auxmap_start = (unsigned long) auxmap;
-  auxmap_end = auxmap_start + memneed;
-  maps = (prmap_t *) auxmap;
-
-  if (ioctl (fd, PIOCMAP, maps) < 0)
-    goto fail1;
-
-  for (mp = maps;;)
-    {
-      unsigned long start, end;
-      unsigned int flags;
-
-      start = (unsigned long) mp->pr_vaddr;
-      end = start + mp->pr_size;
-      if (start == 0 && end == 0)
-        break;
-      flags = 0;
-      if (mp->pr_mflags & MA_READ)
-        flags |= VMA_PROT_READ;
-      if (mp->pr_mflags & MA_WRITE)
-        flags |= VMA_PROT_WRITE;
-      if (mp->pr_mflags & MA_EXEC)
-        flags |= VMA_PROT_EXECUTE;
-      mp++;
-      if (start <= auxmap_start && auxmap_end - 1 <= end - 1)
-        {
-          /* Consider [start,end-1] \ [auxmap_start,auxmap_end-1]
-             = [start,auxmap_start-1] u [auxmap_end,end-1].  */
-          if (start < auxmap_start)
-            if (callback (data, start, auxmap_start, flags))
-              break;
-          if (auxmap_end - 1 < end - 1)
-            if (callback (data, auxmap_end, end, flags))
-              break;
-        }
-      else
-        {
-          if (callback (data, start, end, flags))
-            break;
-        }
-    }
-  munmap (auxmap, memneed);
-  close (fd);
-  return 0;
-
- fail1:
-  munmap (auxmap, memneed);
- fail2:
-  close (fd);
-  return -1;
-
 #elif defined __sun /* Solaris */
 
   /* Note: Solaris <sys/procfs.h> defines a different type prmap_t with
@@ -1324,13 +1205,6 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
   int fd;
   int nmaps;
   size_t memneed;
-#  if HAVE_MAP_ANONYMOUS
-#   define zero_fd -1
-#   define map_flags MAP_ANONYMOUS
-#  else /* Solaris <= 7 */
-  int zero_fd;
-#   define map_flags 0
-#  endif
   void *auxmap;
   unsigned long auxmap_start;
   unsigned long auxmap_end;
@@ -1365,16 +1239,8 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
      and thus pre-allocate available memory.
      So use mmap(), and ignore the resulting VMA.  */
   memneed = ((memneed - 1) / pagesize + 1) * pagesize;
-#  if !HAVE_MAP_ANONYMOUS
-  zero_fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0644);
-  if (zero_fd < 0)
-    goto fail2;
-#  endif
   auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE,
-                          map_flags | MAP_PRIVATE, zero_fd, 0);
-#  if !HAVE_MAP_ANONYMOUS
-  close (zero_fd);
-#  endif
+                          MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
   if (auxmap == (void *) -1)
     goto fail2;
   auxmap_start = (unsigned long) auxmap;
@@ -1442,13 +1308,6 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
   int fd;
   int nmaps;
   size_t memneed;
-#  if HAVE_MAP_ANONYMOUS
-#   define zero_fd -1
-#   define map_flags MAP_ANONYMOUS
-#  else /* Solaris <= 7 */
-  int zero_fd;
-#   define map_flags 0
-#  endif
   void *auxmap;
   unsigned long auxmap_start;
   unsigned long auxmap_end;
@@ -1488,16 +1347,8 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
      and thus pre-allocate available memory.
      So use mmap(), and ignore the resulting VMA.  */
   memneed = ((memneed - 1) / pagesize + 1) * pagesize;
-#  if !HAVE_MAP_ANONYMOUS
-  zero_fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0644);
-  if (zero_fd < 0)
-    goto fail2;
-#  endif
   auxmap = (void *) mmap ((void *) 0, memneed, PROT_READ | PROT_WRITE,
-                          map_flags | MAP_PRIVATE, zero_fd, 0);
-#  if !HAVE_MAP_ANONYMOUS
-  close (zero_fd);
-#  endif
+                          MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
   if (auxmap == (void *) -1)
     goto fail2;
   auxmap_start = (unsigned long) auxmap;
index bd5f35f582e8183c7a31cf53db523d5e409eddb6..f3f1f073b29a6d40f5b355e2f234c832973ffc25 100644 (file)
@@ -57,7 +57,7 @@ extern int vma_iterate (vma_iterate_callback_fn callback, void *data);
    this platform.
    Note that even when this macro is defined, vma_iterate() may still fail to
    find any virtual memory area, for example if /proc is not mounted.  */
-#if defined __linux__ || defined __ANDROID__ || defined __gnu_hurd__ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sgi || defined __sun || HAVE_PSTAT_GETPROCVM || (defined __APPLE__ && defined __MACH__) || defined _WIN32 || defined __CYGWIN__ || defined __BEOS__ || defined __HAIKU__ || defined __minix || HAVE_MQUERY
+#if defined __linux__ || defined __ANDROID__ || defined __gnu_hurd__ || defined __FreeBSD_kernel__ || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || HAVE_PSTAT_GETPROCVM || (defined __APPLE__ && defined __MACH__) || defined _WIN32 || defined __CYGWIN__ || defined __BEOS__ || defined __HAIKU__ || defined __minix || HAVE_MQUERY
 # define VMA_ITERATE_SUPPORTED 1
 #endif
 
index d5bce3935c3fb0583b157220b08b2f45fb01a255..9647b20e3acac79c7e73104d2667e96f92d78be1 100644 (file)
@@ -1,5 +1,5 @@
 # memchr.m4
-# serial 20
+# serial 21
 dnl Copyright (C) 2002-2004, 2009-2025 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -33,31 +33,20 @@ AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
 # include <unistd.h>
 # include <sys/types.h>
 # include <sys/mman.h>
-# ifndef MAP_FILE
-#  define MAP_FILE 0
-# endif
 #endif
 ]], [[
   int result = 0;
   char *fence = NULL;
 #if HAVE_SYS_MMAN_H && HAVE_MPROTECT
-# if HAVE_MAP_ANONYMOUS
-  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
-  const int fd = -1;
-# else /* !HAVE_MAP_ANONYMOUS */
-  const int flags = MAP_FILE | MAP_PRIVATE;
-  int fd = open ("/dev/zero", O_RDONLY, 0666);
-  if (fd >= 0)
-# endif
-    {
-      long int pagesize = sysconf (_SC_PAGESIZE);
-      char *two_pages =
-        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
-                       flags, fd, 0);
-      if (two_pages != (char *)(-1)
-          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
-        fence = two_pages + pagesize;
-    }
+  {
+    long int pagesize = sysconf (_SC_PAGESIZE);
+    char *two_pages =
+      (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                     MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+    if (two_pages != (char *)(-1)
+        && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+      fence = two_pages + pagesize;
+  }
 #endif
   if (fence)
     {
index aee4c2106fe5d41f5a44ef5732226eca775d4040..48fefbdcf1fb717fc9a0acfc81212c9ebd2a7568 100644 (file)
@@ -1,5 +1,5 @@
 # mmap-anon.m4
-# serial 13
+# serial 14
 dnl Copyright (C) 2005, 2007, 2009-2025 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -12,8 +12,6 @@ dnl This file is offered as-is, without any warranty.
 #   MAP_ANON exist and have the same value.
 # - On HP-UX, only MAP_ANONYMOUS exists.
 # - On Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, only MAP_ANON exists.
-# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be
-#   used.
 
 AC_DEFUN_ONCE([gl_FUNC_MMAP_ANON],
 [
@@ -48,10 +46,5 @@ AC_DEFUN_ONCE([gl_FUNC_MMAP_ANON],
          gl_have_mmap_anonymous=yes])
     fi
     AC_MSG_RESULT([$gl_have_mmap_anonymous])
-    if test $gl_have_mmap_anonymous = yes; then
-      AC_DEFINE([HAVE_MAP_ANONYMOUS], [1],
-        [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
-         config.h and <sys/mman.h>.])
-    fi
   fi
 ])
index b1e94a2b789121dda91945fe83fde8473a409985..81a0ce6a6bd0269497ba05b4933432e7ac33bb03 100644 (file)
@@ -1,5 +1,5 @@
 # strncat.m4
-# serial 9
+# serial 10
 dnl Copyright (C) 2002-2004, 2009-2025 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -29,31 +29,20 @@ AC_DEFUN_ONCE([gl_FUNC_STRNCAT],
 # include <unistd.h>
 # include <sys/types.h>
 # include <sys/mman.h>
-# ifndef MAP_FILE
-#  define MAP_FILE 0
-# endif
 #endif
 ]GL_MDA_DEFINES],
 [[
   char *fence = NULL;
 #if HAVE_SYS_MMAN_H && HAVE_MPROTECT
-# if HAVE_MAP_ANONYMOUS
-  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
-  const int fd = -1;
-# else /* !HAVE_MAP_ANONYMOUS */
-  const int flags = MAP_FILE | MAP_PRIVATE;
-  int fd = open ("/dev/zero", O_RDONLY, 0666);
-  if (fd >= 0)
-# endif
-    {
-      long int pagesize = sysconf (_SC_PAGESIZE);
-      char *two_pages =
-        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
-                       flags, fd, 0);
-      if (two_pages != (char *)(-1)
-          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
-        fence = two_pages + pagesize;
-    }
+  {
+    long int pagesize = sysconf (_SC_PAGESIZE);
+    char *two_pages =
+      (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                     MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+    if (two_pages != (char *)(-1)
+        && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+      fence = two_pages + pagesize;
+  }
 #endif
   if (fence)
     {
index ecb41e1b2a04179b7518c7d2878b1bd41685e4fb..2705c155540353607bf406a7f7ad8e073e9c3671 100644 (file)
@@ -11,7 +11,6 @@ stdint-h
 unistd-h
 extensions
 getpagesize
-open
 vma-iter
 
 configure.ac:
index 79f8038e8d3cba0f61bfb2eaa856e72d6b73ac90..65702266654675d4e6250ed74c90c398bc616826 100644 (file)
@@ -13,7 +13,6 @@ extensions
 getpagesize
 gettext-h
 gnulib-i18n
-open
 stdlib-h
 xalloc
 unistd-h
index e2e36d7dd4004bcddd7e6a709b31ca7d290e5cef..8423705961949583980e7adc480a95895eafcee2 100644 (file)
@@ -302,17 +302,8 @@ main ()
       return 1;
     start_rw = start;
 #else
-# ifdef HAVE_MAP_ANONYMOUS
-    int flags = MAP_ANONYMOUS | MAP_PRIVATE;
-    int fd = -1;
-# else
-    int flags = MAP_FILE | MAP_PRIVATE;
-    int fd = open ("/dev/zero", O_RDONLY | O_CLOEXEC, 0666);
-    if (fd < 0)
-      return 1;
-# endif
     start = mmap (NULL, mapping_size, PROT_READ | PROT_WRITE | PROT_EXEC,
-                  flags, fd, 0);
+                  MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
     if (start != (char *) (-1))
       {
         /* A platform that allows a mmap'ed memory region to be simultaneously
@@ -332,7 +323,7 @@ main ()
         if (register_temporary_file (filename) < 0)
           return 2;
 # endif
-        fd = open (filename, O_CREAT | O_RDWR | O_TRUNC, 0700);
+        int fd = open (filename, O_CREAT | O_RDWR | O_TRUNC, 0700);
         if (fd < 0)
           return 3;
 # ifndef KEEP_TEMP_FILE_VISIBLE
index 27ab812c0dd6252cd11ed2df19d2c8fcb2242b6f..41c1aade5c053b0ba6d731bdac7c1f3a62f16873 100644 (file)
@@ -73,26 +73,17 @@ mprotect (void *addr, size_t len, int prot)
 # endif
 # define PROT_READ_WRITE  (PROT_READ|PROT_WRITE)
 
-# if HAVE_MAP_ANONYMOUS
-#  define zero_fd -1
-#  define map_flags MAP_ANONYMOUS | MAP_PRIVATE
-# else
-#  ifndef MAP_FILE
-#   define MAP_FILE 0
-#  endif
-static int zero_fd;
-#  define map_flags MAP_FILE | MAP_PRIVATE
-# endif
-
 static void *
 mmap_zeromap (void *map_addr_hint, size_t map_len)
 {
 # ifdef __hpux
   /* HP-UX 10 mmap() often fails when given a hint.  So give the OS complete
      freedom about the address range.  */
-  return (void *) mmap ((void *) 0,    map_len, PROT_READ_WRITE, map_flags, zero_fd, 0);
+  return (void *) mmap ((void *) 0,    map_len, PROT_READ_WRITE,
+                        MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 # else
-  return (void *) mmap (map_addr_hint, map_len, PROT_READ_WRITE, map_flags, zero_fd, 0);
+  return (void *) mmap (map_addr_hint, map_len, PROT_READ_WRITE,
+                        MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 # endif
 }
 
index 3144557f5bfcc664569248cb6de51f12bffc5ca5..e23c90276e856822439dfc4167a49fa915f38163 100644 (file)
@@ -66,11 +66,6 @@ main ()
   int prot_unwritable;
   void *p;
 
-  /* Preparations.  */
-# if !HAVE_MAP_ANONYMOUS
-  zero_fd = open ("/dev/zero", O_RDONLY, 0644);
-# endif
-
 # if defined __linux__ && defined __sparc__
   /* On Linux 2.6.26/SPARC64, PROT_READ has the same effect as
      PROT_READ | PROT_WRITE.  */
index ea72d84686b9efba875a6614636b52c9bed014ff..c65101d9cf0680a83221742a76e3b8db3a1b1f41 100644 (file)
@@ -87,11 +87,6 @@ main ()
   void *p;
   sigset_t emptyset;
 
-  /* Preparations.  */
-# if !HAVE_MAP_ANONYMOUS
-  zero_fd = open ("/dev/zero", O_RDONLY, 0644);
-# endif
-
 # if defined __linux__ && defined __sparc__
   /* On Linux 2.6.26/SPARC64, PROT_READ has the same effect as
      PROT_READ | PROT_WRITE.  */
index 1b49442d6ad9e30a72b654d52a30a5e8e051d9fd..8d10ebeefa280e0c28cfe1502384d74186ff9548 100644 (file)
@@ -151,11 +151,6 @@ main ()
       < 0)
     exit (2);
 
-  /* Preparations.  */
-# if !HAVE_MAP_ANONYMOUS
-  zero_fd = open ("/dev/zero", O_RDONLY, 0644);
-# endif
-
 # if defined __linux__ && defined __sparc__
   /* On Linux 2.6.26/SPARC64, PROT_READ has the same effect as
      PROT_READ | PROT_WRITE.  */
index b081ed86b108fec148f0f053d332ff0d5e6fbda7..994dbe07c4bdc23168a6807a921a7e9fd981f205 100644 (file)
@@ -22,7 +22,7 @@
 
 #include <stdlib.h>
 
-#if HAVE_MAP_ANONYMOUS
+#if HAVE_MMAP
 # include <sys/mman.h>
 # include <unistd.h>
 #endif
@@ -56,7 +56,7 @@ main (void)
     ASSERT (((VMA_PROT_READ | VMA_PROT_WRITE) & ~prot) == 0);
   }
 
-#if HAVE_MAP_ANONYMOUS
+#if HAVE_MMAP
   /* Test on memory allocated through mmap().  */
   {
     char *mem = mmap (NULL, 1024*1024, PROT_READ | PROT_WRITE,
index d3978ee0af2b477978a257e92c68b2cf43ea79dc..07d09f2c755913c2b9ae1de8bdeaa5198a2f1e0f 100644 (file)
 # include <unistd.h>
 # include <sys/types.h>
 # include <sys/mman.h>
-/* Define MAP_FILE when it isn't otherwise.  */
-# ifndef MAP_FILE
-#  define MAP_FILE 0
-# endif
 #endif
 
 /* Return a pointer to a zero-size object in memory (that is, actually, a
@@ -60,23 +56,13 @@ zerosize_ptr (void)
 /* Use mmap and mprotect when they exist.  Don't test HAVE_MMAP, because it is
    not defined on HP-UX 11 (since it does not support MAP_FIXED).  */
 #if HAVE_SYS_MMAN_H && HAVE_MPROTECT && !defined __KLIBC__
-# if HAVE_MAP_ANONYMOUS
-  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
-  const int fd = -1;
-# else /* !HAVE_MAP_ANONYMOUS */
-  const int flags = MAP_FILE | MAP_PRIVATE;
-  int fd = open ("/dev/zero", O_RDONLY, 0666);
-  if (fd >= 0)
-# endif
-    {
-      size_t pagesize = sysconf (_SC_PAGESIZE);
-      char *two_pages =
-        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
-                       flags, fd, 0);
-      if (two_pages != (char *)(-1)
-          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
-        return two_pages + pagesize;
-    }
+  size_t pagesize = sysconf (_SC_PAGESIZE);
+  char *two_pages =
+    (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                   MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+  if (two_pages != (char *)(-1)
+      && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+    return two_pages + pagesize;
 #endif
   return NULL;
 }