From c7ff77c2e7f934ad3e6234b09b7f80047544ed7c Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Wed, 20 Apr 2011 09:26:49 +0200 Subject: [PATCH 1/1] Align address on a page boundary. 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 | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/xbt/mmalloc/mm_legacy.c b/src/xbt/mmalloc/mm_legacy.c index e9fcb2048b..2bced98dd1 100644 --- a/src/xbt/mmalloc/mm_legacy.c +++ b/src/xbt/mmalloc/mm_legacy.c @@ -93,9 +93,10 @@ void free(void *p) /* 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) { @@ -145,8 +146,9 @@ void mmalloc_preinit(void) { 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); -- 2.20.1