9
#define CHECK(x) (!(x) ? abort() : (void)0)
11
/* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
14
# undef HAVE_MMAP_DEV_ZERO
16
# include <sys/mman.h>
18
# define MAP_FAILED -1
20
# if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
21
# define MAP_ANONYMOUS MAP_ANON
27
#ifdef HAVE_MMAP_DEV_ZERO
29
# include <sys/mman.h>
31
# define MAP_FAILED -1
39
allocate_mmap (size_t size)
42
#if defined (HAVE_MMAP_DEV_ZERO)
43
static int dev_zero_fd = -1;
46
#ifdef HAVE_MMAP_DEV_ZERO
47
if (dev_zero_fd == -1)
49
dev_zero_fd = open ("/dev/zero", O_RDONLY);
50
if (dev_zero_fd == -1)
52
perror ("open /dev/zero: %m");
60
page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
61
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
63
#ifdef HAVE_MMAP_DEV_ZERO
64
page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
65
MAP_PRIVATE, dev_zero_fd, 0);
68
if (page == MAP_FAILED)
70
perror ("virtual memory exhausted");