The HAVE_GNU_LD mode of mmalloc delegates in some cases to standard
malloc()/free() which are resolved with dlsym(). This cause some
bootstrap problems which are only resolved with the junkarea: the
junkarea is regularly broken when adding dependencies because the
junkarea is then too small.
By disabling the HAVE_GNU_LD path, we get rid of the junkarea hack.
std_heap = mmalloc_get_default_md();
xbt_assert(std_heap != NULL);
std_heap = mmalloc_get_default_md();
xbt_assert(std_heap != NULL);
-#if defined HAVE_GNU_LD && !defined MMALLOC_WANT_OVERRIDE_LEGACY
+#if 0 && defined HAVE_GNU_LD && !defined MMALLOC_WANT_OVERRIDE_LEGACY
/* use the system malloc for the model-checker data */
mc_heap = NULL;
#else
/* use the system malloc for the model-checker data */
mc_heap = NULL;
#else
#ifdef MMALLOC_WANT_OVERRIDE_LEGACY
#ifdef MMALLOC_WANT_OVERRIDE_LEGACY
+#if 0 && defined(HAVE_GNU_LD)
#undef _GNU_SOURCE
#define _GNU_SOURCE 1
#undef _GNU_SOURCE
#define _GNU_SOURCE 1
real_realloc = (void * (*) (void*,size_t)) dlsym(RTLD_NEXT, "realloc");
real_free = (void * (*) (void*)) dlsym(RTLD_NEXT, "free");
__mmalloc_current_heap = __mmalloc_default_mdp;
real_realloc = (void * (*) (void*,size_t)) dlsym(RTLD_NEXT, "realloc");
real_free = (void * (*) (void*)) dlsym(RTLD_NEXT, "free");
__mmalloc_current_heap = __mmalloc_default_mdp;
/* Hello pimple!
* DL needs some memory while resolving the malloc symbol, that is somehow problematic
/* Hello pimple!
* DL needs some memory while resolving the malloc symbol, that is somehow problematic
void *ret = mmalloc(mdp, n);
UNLOCK(mdp);
void *ret = mmalloc(mdp, n);
UNLOCK(mdp);
LOCK(mdp);
void *ret = mmalloc(mdp, nmemb*size);
UNLOCK(mdp);
LOCK(mdp);
void *ret = mmalloc(mdp, nmemb*size);
UNLOCK(mdp);
- memset(ret, 0, nmemb * size);
+ // This was already done in the callee:
+ if(!(mdp->options & XBT_MHEAP_OPTION_MEMSET)) {
+ memset(ret, 0, nmemb * size);
+ }
}
#endif /* NO GNU_LD */
#endif /* WANT_MALLOC_OVERRIDE */
}
#endif /* NO GNU_LD */
#endif /* WANT_MALLOC_OVERRIDE */
{
int res;
if (__mmalloc_default_mdp == NULL) {
{
int res;
if (__mmalloc_default_mdp == NULL) {
+ if(!xbt_pagesize)
+ xbt_pagesize = getpagesize();
unsigned long mask = ~((unsigned long)xbt_pagesize - 1);
void *addr = (void*)(((unsigned long)sbrk(0) + HEAP_OFFSET) & mask);
__mmalloc_default_mdp = xbt_mheap_new_options(-1, addr, XBT_MHEAP_OPTION_MEMSET);
unsigned long mask = ~((unsigned long)xbt_pagesize - 1);
void *addr = (void*)(((unsigned long)sbrk(0) + HEAP_OFFSET) & mask);
__mmalloc_default_mdp = xbt_mheap_new_options(-1, addr, XBT_MHEAP_OPTION_MEMSET);
}
xbt_assert(__mmalloc_default_mdp != NULL);
}
xbt_assert(__mmalloc_default_mdp != NULL);
-#if defined(HAVE_GNU_LD) && defined(MMALLOC_WANT_OVERRIDE_LEGACY)
+#if 0 && defined(HAVE_GNU_LD) && defined(MMALLOC_WANT_OVERRIDE_LEGACY)
mm_gnuld_legacy_init();
#endif
mm_gnuld_legacy_init();
#endif