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>
This commit is contained in:
Christoph Muellner 2018-05-03 16:52:03 +02:00 committed by Qi Wang
parent 95789a24fa
commit 63712b4c4e
2 changed files with 46 additions and 28 deletions

View File

@ -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 configuration, jemalloc will provide additional size classes that are not
16-byte-aligned (24, 40, and 56). 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-initial-exec-tls`
Disable the initial-exec TLS model for jemalloc's internal thread-local Disable the initial-exec TLS model for jemalloc's internal thread-local

View File

@ -409,10 +409,15 @@ esac
AC_DEFINE_UNQUOTED([HAVE_CPU_SPINWAIT], [$HAVE_CPU_SPINWAIT]) AC_DEFINE_UNQUOTED([HAVE_CPU_SPINWAIT], [$HAVE_CPU_SPINWAIT])
AC_DEFINE_UNQUOTED([CPU_SPINWAIT], [$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 case "${host_cpu}" in
aarch64) aarch64)
if test "x$LG_VADDR" = "xdetect"; then
AC_MSG_CHECKING([number of significant virtual address bits]) AC_MSG_CHECKING([number of significant virtual address bits])
if test "x${ac_cv_sizeof_void_p}" = "x4" ; then if test "x${LG_SIZEOF_PTR}" = "x2" ; then
#aarch64 ILP32 #aarch64 ILP32
LG_VADDR=32 LG_VADDR=32
else else
@ -420,8 +425,10 @@ case "${host_cpu}" in
LG_VADDR=48 LG_VADDR=48
fi fi
AC_MSG_RESULT([$LG_VADDR]) AC_MSG_RESULT([$LG_VADDR])
fi
;; ;;
x86_64) x86_64)
if test "x$LG_VADDR" = "xdetect"; then
AC_CACHE_CHECK([number of significant virtual address bits], AC_CACHE_CHECK([number of significant virtual address bits],
[je_cv_lg_vaddr], [je_cv_lg_vaddr],
AC_RUN_IFELSE([AC_LANG_PROGRAM( AC_RUN_IFELSE([AC_LANG_PROGRAM(
@ -469,8 +476,10 @@ typedef unsigned __int32 uint32_t;
else else
AC_MSG_ERROR([cannot determine number of significant virtual address bits]) AC_MSG_ERROR([cannot determine number of significant virtual address bits])
fi fi
fi
;; ;;
*) *)
if test "x$LG_VADDR" = "xdetect"; then
AC_MSG_CHECKING([number of significant virtual address bits]) AC_MSG_CHECKING([number of significant virtual address bits])
if test "x${LG_SIZEOF_PTR}" = "x3" ; then if test "x${LG_SIZEOF_PTR}" = "x3" ; then
LG_VADDR=64 LG_VADDR=64
@ -482,6 +491,7 @@ typedef unsigned __int32 uint32_t;
AC_MSG_ERROR([Unsupported lg(pointer size): ${LG_SIZEOF_PTR}]) AC_MSG_ERROR([Unsupported lg(pointer size): ${LG_SIZEOF_PTR}])
fi fi
AC_MSG_RESULT([$LG_VADDR]) AC_MSG_RESULT([$LG_VADDR])
fi
;; ;;
esac esac
AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR]) AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])