Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Align address on a page boundary.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Wed, 20 Apr 2011 07:26:49 +0000 (09:26 +0200)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Wed, 20 Apr 2011 15:20:13 +0000 (17:20 +0200)
Ensure that the address provided to mmalloc_attach is aligned on a
page boundary.

This should fix the failing mmap on Debian/kfreebsd.  Only tested on
a qemu virtual machine, and thus I do not take the responsability to
revert commit 3aa361f346c4d2592c9cfe7cda39a728479d9d26.

src/xbt/mmalloc/mm_legacy.c

index e9fcb20..2bced98 100644 (file)
@@ -93,9 +93,10 @@ void free(void *p)
 
 /* Make sure it works with md==NULL */
 
 
 /* Make sure it works with md==NULL */
 
-#define HEAP_OFFSET   (128<<20)  /* Safety gap from the heap's break address.
-                                  * Try to increase this first if you experience
-                                  * strange errors under valgrind. */
+/* Safety gap from the heap's break address.
+ * Try to increase this first if you experience strange errors under
+ * valgrind. */
+#define HEAP_OFFSET   (128UL<<20)
 
 void *mmalloc_get_default_md(void)
 {
 
 void *mmalloc_get_default_md(void)
 {
@@ -145,8 +146,9 @@ void mmalloc_preinit(void)
 {
   int res;
   if (!__mmalloc_default_mdp) {
 {
   int res;
   if (!__mmalloc_default_mdp) {
-    __mmalloc_default_mdp =
-        mmalloc_attach(-1, (char *) sbrk(0) + HEAP_OFFSET);
+    unsigned long mask = ~((unsigned long)getpagesize() - 1);
+    void *addr = (void*)(((unsigned long)sbrk(0) + HEAP_OFFSET) & mask);
+    __mmalloc_default_mdp = mmalloc_attach(-1, addr);
     /* Fixme? only the default mdp in protected against forks */
     res = xbt_os_thread_atfork(mmalloc_fork_prepare,
                               mmalloc_fork_parent, mmalloc_fork_child);
     /* Fixme? only the default mdp in protected against forks */
     res = xbt_os_thread_atfork(mmalloc_fork_prepare,
                               mmalloc_fork_parent, mmalloc_fork_child);