>       Remove support for IRIX and Solaris <= 7 regarding old mmap.
>       * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Don't define HAVE_MAP_ANONYMOUS.

Oops, I made a mistake here: HAVE_MMAP is being used without being defined.
This patch fixes it.


2025-09-11  Bruno Haible  <[email protected]>

        pagealign_alloc, vma-prot tests: Fix use of HAVE_MMAP (regr. yesterday).
        * m4/mmap-anon.m4 (gl_FUNC_MMAP_ANON): Test for sys/mman.h. Use
        ac_cv_header_sys_mman_h instead of gl_have_mmap.
        * lib/pagealign_alloc.c: Test HAVE_SYS_MMAN_H instead of HAVE_MMAP.
        * tests/test-vma-prot.c: Likewise.

diff --git a/lib/pagealign_alloc.c b/lib/pagealign_alloc.c
index fdfffb4514..dc739b9509 100644
--- a/lib/pagealign_alloc.c
+++ b/lib/pagealign_alloc.c
@@ -28,7 +28,7 @@
 #include <unistd.h>
 #include <stdint.h>
 
-#if HAVE_MMAP
+#if HAVE_SYS_MMAN_H
 # include <sys/mman.h>
 #endif
 
@@ -38,7 +38,7 @@
 
 #define _(msgid) dgettext (GNULIB_TEXT_DOMAIN, msgid)
 
-#if HAVE_MMAP
+#if HAVE_SYS_MMAN_H
 /* Define MAP_FAILED for old systems which neglect to.  */
 # ifndef MAP_FAILED
 #  define MAP_FAILED ((void *)-1)
@@ -48,7 +48,7 @@
 
 #if ! HAVE_POSIX_MEMALIGN
 
-# if HAVE_MMAP
+# if HAVE_SYS_MMAN_H
 /* For each memory region, we store its size.  */
 typedef size_t info_t;
 # else
@@ -124,7 +124,7 @@ pagealign_alloc (size_t size)
       errno = status;
       return NULL;
     }
-#elif HAVE_MMAP
+#elif HAVE_SYS_MMAN_H
   /* Prefer mmap to malloc, since the latter often wastes an entire
      memory page per call.  */
   ret = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE,
@@ -132,7 +132,7 @@ pagealign_alloc (size_t size)
   if (ret == MAP_FAILED)
     return NULL;
   new_memnode (ret, size);
-#else /* !HAVE_MMAP && !HAVE_POSIX_MEMALIGN */
+#else /* !HAVE_SYS_MMAN_H && !HAVE_POSIX_MEMALIGN */
   size_t pagesize = getpagesize ();
   void *unaligned_ptr = malloc (size + pagesize - 1);
   if (unaligned_ptr == NULL)
@@ -145,7 +145,7 @@ pagealign_alloc (size_t size)
   ret = (char *) unaligned_ptr
         + ((- (uintptr_t) unaligned_ptr) & (pagesize - 1));
   new_memnode (ret, unaligned_ptr);
-#endif /* HAVE_MMAP && HAVE_POSIX_MEMALIGN */
+#endif /* HAVE_SYS_MMAN_H && HAVE_POSIX_MEMALIGN */
   return ret;
 }
 
@@ -167,7 +167,7 @@ pagealign_free (void *aligned_ptr)
 {
 #if HAVE_POSIX_MEMALIGN
   free (aligned_ptr);
-#elif HAVE_MMAP
+#elif HAVE_SYS_MMAN_H
   if (munmap (aligned_ptr, get_memnode (aligned_ptr)) < 0)
     error (EXIT_FAILURE, errno, "Failed to unmap memory");
 #else
diff --git a/m4/mmap-anon.m4 b/m4/mmap-anon.m4
index 48fefbdcf1..abf6194a28 100644
--- a/m4/mmap-anon.m4
+++ b/m4/mmap-anon.m4
@@ -1,5 +1,5 @@
 # mmap-anon.m4
-# serial 14
+# serial 15
 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,
@@ -21,11 +21,13 @@ AC_DEFUN_ONCE([gl_FUNC_MMAP_ANON]
   # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
   # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
   # irrelevant for anonymous mappings.
-  AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no])
+  # Instead, assume that mmap() exists if and only if <sys/mman.h> exists.
+  # Code needs to tests HAVE_SYS_MMAN_H, not HAVE_MMAP.
+  AC_CHECK_HEADERS_ONCE([sys/mman.h])
 
   # Try to allow MAP_ANONYMOUS.
   gl_have_mmap_anonymous=no
-  if test $gl_have_mmap = yes; then
+  if test $ac_cv_header_sys_mman_h = yes; then
     AC_MSG_CHECKING([for MAP_ANONYMOUS])
     AC_EGREP_CPP([I cannot identify this map], [
 #include <sys/mman.h>
diff --git a/tests/test-vma-prot.c b/tests/test-vma-prot.c
index 994dbe07c4..9336c16be0 100644
--- a/tests/test-vma-prot.c
+++ b/tests/test-vma-prot.c
@@ -22,7 +22,7 @@
 
 #include <stdlib.h>
 
-#if HAVE_MMAP
+#if HAVE_SYS_MMAN_H
 # 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_MMAP
+#if HAVE_SYS_MMAN_H
   /* Test on memory allocated through mmap().  */
   {
     char *mem = mmap (NULL, 1024*1024, PROT_READ | PROT_WRITE,




Reply via email to