From 0e29a94c44693ecb6e7adee17a58ecb7511ad6b3 Mon Sep 17 00:00:00 2001 From: Davide Italiano Date: Thu, 19 Feb 2015 07:27:14 +0000 Subject: [PATCH] [Support/Timer] Make GetMallocUsage() aware of jemalloc. Differential Revision: D7657 Reviewed by: shankarke, majnemer llvm-svn: 229824 --- cmake/config-ix.cmake | 1 + include/llvm/Config/config.h.cmake | 3 +++ include/llvm/Config/config.h.in | 3 +++ lib/Support/Unix/Process.inc | 10 ++++++++++ 4 files changed, 17 insertions(+) diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake index 50f5859b34d..8b04d087d44 100755 --- a/cmake/config-ix.cmake +++ b/cmake/config-ix.cmake @@ -163,6 +163,7 @@ if( HAVE_SYS_UIO_H ) check_symbol_exists(writev sys/uio.h HAVE_WRITEV) endif() check_symbol_exists(nearbyintf math.h HAVE_NEARBYINTF) +check_symbol_exists(mallctl malloc_np.h HAVE_MALLCTL) check_symbol_exists(mallinfo malloc.h HAVE_MALLINFO) check_symbol_exists(malloc_zone_statistics malloc/malloc.h HAVE_MALLOC_ZONE_STATISTICS) diff --git a/include/llvm/Config/config.h.cmake b/include/llvm/Config/config.h.cmake index 32d0735628f..86ae8bb818e 100644 --- a/include/llvm/Config/config.h.cmake +++ b/include/llvm/Config/config.h.cmake @@ -222,6 +222,9 @@ /* Define to 1 if you have the `malloc_zone_statistics' function. */ #cmakedefine HAVE_MALLOC_ZONE_STATISTICS ${HAVE_MALLOC_ZONE_STATISTICS} +/* Define to 1 if you have the `mallctl` function. */ +#cmakedefine HAVE_MALLCTL ${HAVE_MALLCTL} + /* Define to 1 if you have the `mkdtemp' function. */ #cmakedefine HAVE_MKDTEMP ${HAVE_MKDTEMP} diff --git a/include/llvm/Config/config.h.in b/include/llvm/Config/config.h.in index 9827eeaea33..c317bb114a9 100644 --- a/include/llvm/Config/config.h.in +++ b/include/llvm/Config/config.h.in @@ -210,6 +210,9 @@ /* Define if mallinfo() is available on this platform. */ #undef HAVE_MALLINFO +/* Define if mallctl() is available on this plaform. */ +#undef HAVE_MALLCTL + /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H diff --git a/lib/Support/Unix/Process.inc b/lib/Support/Unix/Process.inc index 6e143f0795e..f52ba191ac0 100644 --- a/lib/Support/Unix/Process.inc +++ b/lib/Support/Unix/Process.inc @@ -39,6 +39,9 @@ !defined(__OpenBSD__) && !defined(__Bitrig__) #include #endif +#if defined(HAVE_MALLCTL) +#include +#endif #ifdef HAVE_MALLOC_MALLOC_H #include #endif @@ -98,6 +101,13 @@ size_t Process::GetMallocUsage() { malloc_statistics_t Stats; malloc_zone_statistics(malloc_default_zone(), &Stats); return Stats.size_in_use; // darwin +#elif defined(HAVE_MALLCTL) + size_t alloc, sz; + sz = sizeof(size_t); + if (mallctl("stats.allocated", &alloc, &sz, NULL, 0) == 0) + return alloc; + else + return 0; #elif defined(HAVE_SBRK) // Note this is only an approximation and more closely resembles // the value returned by mallinfo in the arena field.