aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Muellner <christoph.muellner@theobroma-systems.com>2018-05-03 16:52:03 +0200
committerQi Wang <interwq@gmail.com>2018-05-04 10:34:10 -0700
commit63712b4c4e046e9d91807d0e1b5c890c52925379 (patch)
tree990a0d1cc59a4e8bba5b440cdcf49dc125b96290
parent95789a24fab056e7a1ddc66e2366b1ec88aa2bcd (diff)
downloadplatform_external_jemalloc_new-63712b4c4e046e9d91807d0e1b5c890c52925379.tar.gz
platform_external_jemalloc_new-63712b4c4e046e9d91807d0e1b5c890c52925379.tar.bz2
platform_external_jemalloc_new-63712b4c4e046e9d91807d0e1b5c890c52925379.zip
configure: Add --with-lg-vaddr configure option.
This patch allows to override the lg-vaddr values, which are defined by the build machine's CPUID information (x86_64) or default values (other architectures like aarch64). Signed-off-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
-rw-r--r--INSTALL.md8
-rw-r--r--configure.ac66
2 files changed, 46 insertions, 28 deletions
diff --git a/INSTALL.md b/INSTALL.md
index 7837b2d9..cd05ccba 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -260,6 +260,14 @@ any of the following arguments (not a definitive list) to 'configure':
configuration, jemalloc will provide additional size classes that are not
16-byte-aligned (24, 40, and 56).
+* `--with-lg-vaddr=<lg-vaddr>`
+
+ Specify the number of significant virtual address bits. jemalloc uses
+ pointer tagging if the pointer size is bigger than the required size for
+ virtual addresses. By default the configure script determines this via CPUID
+ information on x86_64 and uses default values for other architectures. This
+ option may be useful when cross compiling.
+
* `--disable-initial-exec-tls`
Disable the initial-exec TLS model for jemalloc's internal thread-local
diff --git a/configure.ac b/configure.ac
index 8d21d0ae..a6a08db0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -409,22 +409,29 @@ esac
AC_DEFINE_UNQUOTED([HAVE_CPU_SPINWAIT], [$HAVE_CPU_SPINWAIT])
AC_DEFINE_UNQUOTED([CPU_SPINWAIT], [$CPU_SPINWAIT])
+AC_ARG_WITH([lg_vaddr],
+ [AS_HELP_STRING([--with-lg-vaddr=<lg-vaddr>], [Number of significant virtual address bits])],
+ [LG_VADDR="$with_lg_vaddr"], [LG_VADDR="detect"])
+
case "${host_cpu}" in
aarch64)
- AC_MSG_CHECKING([number of significant virtual address bits])
- if test "x${ac_cv_sizeof_void_p}" = "x4" ; then
- #aarch64 ILP32
- LG_VADDR=32
- else
- #aarch64 LP64
- LG_VADDR=48
+ if test "x$LG_VADDR" = "xdetect"; then
+ AC_MSG_CHECKING([number of significant virtual address bits])
+ if test "x${LG_SIZEOF_PTR}" = "x2" ; then
+ #aarch64 ILP32
+ LG_VADDR=32
+ else
+ #aarch64 LP64
+ LG_VADDR=48
+ fi
+ AC_MSG_RESULT([$LG_VADDR])
fi
- AC_MSG_RESULT([$LG_VADDR])
;;
x86_64)
- AC_CACHE_CHECK([number of significant virtual address bits],
- [je_cv_lg_vaddr],
- AC_RUN_IFELSE([AC_LANG_PROGRAM(
+ if test "x$LG_VADDR" = "xdetect"; then
+ AC_CACHE_CHECK([number of significant virtual address bits],
+ [je_cv_lg_vaddr],
+ AC_RUN_IFELSE([AC_LANG_PROGRAM(
[[
#include <stdio.h>
#ifdef _WIN32
@@ -461,27 +468,30 @@ typedef unsigned __int32 uint32_t;
[je_cv_lg_vaddr=`cat conftest.out`],
[je_cv_lg_vaddr=error],
[je_cv_lg_vaddr=57]))
- if test "x${je_cv_lg_vaddr}" != "x" ; then
- LG_VADDR="${je_cv_lg_vaddr}"
- fi
- if test "x${LG_VADDR}" != "xerror" ; then
- AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])
- else
- AC_MSG_ERROR([cannot determine number of significant virtual address bits])
+ if test "x${je_cv_lg_vaddr}" != "x" ; then
+ LG_VADDR="${je_cv_lg_vaddr}"
+ fi
+ if test "x${LG_VADDR}" != "xerror" ; then
+ AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])
+ else
+ AC_MSG_ERROR([cannot determine number of significant virtual address bits])
+ fi
fi
;;
*)
- AC_MSG_CHECKING([number of significant virtual address bits])
- if test "x${LG_SIZEOF_PTR}" = "x3" ; then
- LG_VADDR=64
- elif test "x${LG_SIZEOF_PTR}" = "x2" ; then
- LG_VADDR=32
- elif test "x${LG_SIZEOF_PTR}" = "xLG_SIZEOF_PTR_WIN" ; then
- LG_VADDR="(1U << (LG_SIZEOF_PTR_WIN+3))"
- else
- AC_MSG_ERROR([Unsupported lg(pointer size): ${LG_SIZEOF_PTR}])
+ if test "x$LG_VADDR" = "xdetect"; then
+ AC_MSG_CHECKING([number of significant virtual address bits])
+ if test "x${LG_SIZEOF_PTR}" = "x3" ; then
+ LG_VADDR=64
+ elif test "x${LG_SIZEOF_PTR}" = "x2" ; then
+ LG_VADDR=32
+ elif test "x${LG_SIZEOF_PTR}" = "xLG_SIZEOF_PTR_WIN" ; then
+ LG_VADDR="(1U << (LG_SIZEOF_PTR_WIN+3))"
+ else
+ AC_MSG_ERROR([Unsupported lg(pointer size): ${LG_SIZEOF_PTR}])
+ fi
+ AC_MSG_RESULT([$LG_VADDR])
fi
- AC_MSG_RESULT([$LG_VADDR])
;;
esac
AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])