[tor-commits] [tor/master] Add a --with-malloc option.

nickm at torproject.org nickm at torproject.org
Fri Aug 3 11:38:53 UTC 2018


commit abde9fb426c7d6d0dbdaccc724c3b4257d99ad30
Author: Nick Mathewson <nickm at torproject.org>
Date:   Wed Jul 11 09:28:23 2018 -0400

    Add a --with-malloc option.
    
    Based on a patch from Hello71 on ticket 20424.
    
    This patch additionally fixes openbsd-malloc support, switches
    our tcmalloc support to use pkgconfig, and tells the compiler to
    omit system malloc implementations as appropriate.
    
    squash! Add a --with-malloc option.
    
    Edit changelog file to fix a typo and credit Alex Xu in preferred format.
---
 changes/ticket20424 |  5 ++++
 configure.ac        | 71 ++++++++++++++++++++++++++++++++++++++++++++---------
 2 files changed, 65 insertions(+), 11 deletions(-)

diff --git a/changes/ticket20424 b/changes/ticket20424
new file mode 100644
index 000000000..123807ae2
--- /dev/null
+++ b/changes/ticket20424
@@ -0,0 +1,5 @@
+  o Minor features (compilation):
+    - Tor's configure script now supports a --with-malloc= option to select
+      your malloc implementation. Supported options are "tcmalloc",
+      "jemalloc", "openbsd", and "system" (the default). Addresses part of
+      ticket 20424. Based on a patch from Alex Xu.
diff --git a/configure.ac b/configure.ac
index 532476672..d414d0253 100644
--- a/configure.ac
+++ b/configure.ac
@@ -82,8 +82,6 @@ if test "$enable_memory_sentinels" = "no"; then
            [Defined if we're turning off memory safety code to look for bugs])
 fi
 
-AM_CONDITIONAL(USE_OPENBSD_MALLOC, test "x$enable_openbsd_malloc" = "xyes")
-
 AC_ARG_ENABLE(asciidoc,
      AS_HELP_STRING(--disable-asciidoc, [don't use asciidoc (disables building of manpages)]),
      [case "${enableval}" in
@@ -1766,19 +1764,70 @@ AC_ARG_WITH(tcmalloc,
 AS_HELP_STRING(--with-tcmalloc, [use tcmalloc memory allocation library]),
 [ tcmalloc=yes ], [ tcmalloc=no ])
 
-if test "x$tcmalloc" = "xyes"; then
-   LDFLAGS="-ltcmalloc $LDFLAGS"
-fi
+default_malloc=system
 
-using_custom_malloc=no
-if test "x$enable_openbsd_malloc" = "xyes"; then
-   using_custom_malloc=yes
+if test "x$enable_openbsd_malloc" = "xyes" ; then
+  AC_MSG_NOTICE([The --enable-openbsd-malloc argument is deprecated; use --with-malloc=openbsd instead.])
+  default_malloc=openbsd
 fi
+
 if test "x$tcmalloc" = "xyes"; then
-   using_custom_malloc=yes
+  AC_MSG_NOTICE([The --with-tcmalloc argument is deprecated; use --with-malloc=tcmalloc instead.])
+  default_malloc=tcmalloc
 fi
-if test "$using_custom_malloc" = "no"; then
-   AC_CHECK_FUNCS(mallinfo)
+
+AC_ARG_WITH(malloc,
+   AS_HELP_STRING([--with-malloc=[system,jemalloc,tcmalloc,openbsd]],
+                  [select special malloc implementation [system]]),
+   [ malloc="$with_malloc" ], [ malloc="$default_malloc" ])
+
+AS_CASE([$malloc],
+  [tcmalloc], [
+      PKG_CHECK_MODULES([TCMALLOC],
+			[libtcmalloc],
+			have_tcmalloc=yes,
+			have_tcmalloc=no)
+
+      if test "x$have_tcmalloc" = "xno" ; then
+          AC_MSG_ERROR([Unable to find tcmalloc requested by --with-malloc.])
+      fi
+
+      CFLAGS="$CFLAGS $TCMALLOC_CFLAGS"
+      LIBS="$TCMALLOC_LIBS $LIBS"
+  ],
+
+  [jemalloc], [
+      PKG_CHECK_MODULES([JEMALLOC],
+		        [jemalloc],
+			have_jemalloc=yes,
+			have_jemalloc=no)
+
+      if test "x$have_tcmalloc" = "xno" ; then
+          AC_MSG_ERROR([Unable to find jemalloc requested by --with-malloc.])
+      fi
+
+      CFLAGS="$CFLAGS $JEMALLOC_CFLAGS"
+      LIBS="$JEMALLOC_LIBS $LIBS"
+      using_custom_malloc=yes
+  ],
+
+  [openbsd], [
+    enable_openbsd_malloc=yes
+  ],
+
+  [system], [
+     # handle this later, including the jemalloc fallback
+    AC_CHECK_FUNCS(mallinfo)
+  ],
+
+  [AC_MSG_ERROR([--with-malloc=`$with_malloc' not supported, see --help])
+])
+
+AM_CONDITIONAL(USE_OPENBSD_MALLOC, test "x$enable_openbsd_malloc" = "xyes")
+
+if test "$malloc" != "system"; then
+  # Tell the C compiler not to use the system allocator functions.
+  TOR_CHECK_CFLAGS([-fno-builtin-malloc -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-free])
 fi
 
 # By default, we're going to assume we don't have mlockall()





More information about the tor-commits mailing list