-/* Support for an sbrk-like function that uses mmap.
- Copyright 1992, 2000 Free Software Foundation, Inc.
+/* Support for an sbrk-like function that uses mmap. */
- Contributed by Fred Fish at Cygnus Support. fnf@cygnus.com */
-
-/* Copyright (c) 2010-2012. The SimGrid Team.
+/* Copyright (c) 2010-2014. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
-#ifndef MAP_ANONYMOUS
-#define MAP_ANONYMOUS MAP_ANON
-#endif
+/* Copyright 1992, 2000 Free Software Foundation, Inc.
+
+ Contributed by Fred Fish at Cygnus Support. fnf@cygnus.com */
#ifdef HAVE_UNISTD_H
#include <unistd.h> /* Prototypes for lseek */
#include <stdio.h>
#include <fcntl.h>
#include <sys/mman.h>
+#include <sys/wait.h>
#include "mmprivate.h"
-/* Cache the pagesize for the current host machine. Note that if the host
- does not readily provide a getpagesize() function, we need to emulate it
- elsewhere, not clutter up this file with lots of kluges to try to figure
- it out. */
-
-static size_t pagesize;
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
-#define PAGE_ALIGN(addr) (void*) (((long)(addr) + pagesize - 1) & \
- ~(pagesize - 1))
+#define PAGE_ALIGN(addr) (void*) (((long)(addr) + xbt_pagesize - 1) & \
+ ~((long)xbt_pagesize - 1))
/* Return MAP_PRIVATE if MDP represents /dev/zero. Otherwise, return
MAP_SHARED. */
char buf = 0; /* Single byte to write to extend mapped file */
// fprintf(stderr,"increase %p by %u\n",mdp,size);
- if (pagesize == 0)
- pagesize = getpagesize();
if (size == 0) {
/* Just return the current "break" value. */
abort();
}
+#ifdef MADV_MERGEABLE
+ madvise(mapto, mapbytes, MADV_MERGEABLE);
+#endif
+
if (mdp->top == 0)
mdp->base = mdp->breakval = mapto;