CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
CHECK_FUNCTION_EXISTS(backtrace HAVE_BACKTRACE)
+CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
CHECK_FUNCTION_EXISTS(getdtablesize HAVE_GETDTABLESIZE)
if (__malloc_use_mmalloc) {
__mmalloc_current_heap = mmalloc_preinit();
} else {
+#if HAVE_DLFUNC
+ mm_real_realloc = (void *(*)(void *, size_t))dlfunc(RTLD_NEXT, "realloc");
+ mm_real_malloc = (void *(*)(size_t))dlfunc(RTLD_NEXT, "malloc");
+ mm_real_free = (void (*)(void *))dlfunc(RTLD_NEXT, "free");
+ mm_real_calloc = (void *(*)(size_t, size_t))dlfunc(RTLD_NEXT, "calloc");
+#else
mm_real_realloc = dlsym(RTLD_NEXT, "realloc");
mm_real_malloc = dlsym(RTLD_NEXT, "malloc");
mm_real_free = dlsym(RTLD_NEXT, "free");
mm_real_calloc = dlsym(RTLD_NEXT, "calloc");
+#endif
}
mm_initializing = 0;
mm_initialized = 1;
/* Other function checks */
#define HAVE_BACKTRACE @HAVE_BACKTRACE@ /* Function backtrace */
+#define HAVE_DLFUNC @HAVE_DLFUNC@ /* Function dlfunc */
#define HAVE_MMAP @HAVE_MMAP@ /* Function mmap */
#define HAVE_MREMAP @HAVE_MREMAP@ /* Function mremap */
#define HAVE_SEM_INIT @HAVE_SEM_INIT@ /* Function sem_init (part of XPG6 standard only) */
/* Other checks */
#cmakedefine ADDR2LINE "@ADDR2LINE@" /* Path to the addr2line tool */
#define HAVE_GRAPHVIZ @HAVE_GRAPHVIZ@ /* The graphviz library */
-#define HAVE_LIBUNWIND @HAVE_LIBUNWIND@ /* The lib unwind library (for MC and backtrace display) */
\ No newline at end of file
+#define HAVE_LIBUNWIND @HAVE_LIBUNWIND@ /* The lib unwind library (for MC and backtrace display) */