> 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,
