+2025-09-11 Bruno Haible <bruno@clisp.org>
+
+ 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.
+
2025-09-10 Paul Eggert <eggert@cs.ucla.edu>
pagealign_alloc: prefer posix_memalign
#include <unistd.h>
#include <stdint.h>
-#if HAVE_MMAP
+#if HAVE_SYS_MMAN_H
# include <sys/mman.h>
#endif
#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)
#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
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,
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)
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;
}
{
#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
# 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,
# 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>
#include <stdlib.h>
-#if HAVE_MMAP
+#if HAVE_SYS_MMAN_H
# include <sys/mman.h>
# include <unistd.h>
#endif
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,