Skip to content

Commit 63712b4

Browse files
cmuellnerinterwq
authored andcommitted
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 <[email protected]>
1 parent 95789a2 commit 63712b4

File tree

2 files changed

+46
-28
lines changed

2 files changed

+46
-28
lines changed

INSTALL.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,14 @@ any of the following arguments (not a definitive list) to 'configure':
260260
configuration, jemalloc will provide additional size classes that are not
261261
16-byte-aligned (24, 40, and 56).
262262

263+
* `--with-lg-vaddr=<lg-vaddr>`
264+
265+
Specify the number of significant virtual address bits. jemalloc uses
266+
pointer tagging if the pointer size is bigger than the required size for
267+
virtual addresses. By default the configure script determines this via CPUID
268+
information on x86_64 and uses default values for other architectures. This
269+
option may be useful when cross compiling.
270+
263271
* `--disable-initial-exec-tls`
264272

265273
Disable the initial-exec TLS model for jemalloc's internal thread-local

configure.ac

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -409,22 +409,29 @@ esac
409409
AC_DEFINE_UNQUOTED([HAVE_CPU_SPINWAIT], [$HAVE_CPU_SPINWAIT])
410410
AC_DEFINE_UNQUOTED([CPU_SPINWAIT], [$CPU_SPINWAIT])
411411

412+
AC_ARG_WITH([lg_vaddr],
413+
[AS_HELP_STRING([--with-lg-vaddr=<lg-vaddr>], [Number of significant virtual address bits])],
414+
[LG_VADDR="$with_lg_vaddr"], [LG_VADDR="detect"])
415+
412416
case "${host_cpu}" in
413417
aarch64)
414-
AC_MSG_CHECKING([number of significant virtual address bits])
415-
if test "x${ac_cv_sizeof_void_p}" = "x4" ; then
416-
#aarch64 ILP32
417-
LG_VADDR=32
418-
else
419-
#aarch64 LP64
420-
LG_VADDR=48
418+
if test "x$LG_VADDR" = "xdetect"; then
419+
AC_MSG_CHECKING([number of significant virtual address bits])
420+
if test "x${LG_SIZEOF_PTR}" = "x2" ; then
421+
#aarch64 ILP32
422+
LG_VADDR=32
423+
else
424+
#aarch64 LP64
425+
LG_VADDR=48
426+
fi
427+
AC_MSG_RESULT([$LG_VADDR])
421428
fi
422-
AC_MSG_RESULT([$LG_VADDR])
423429
;;
424430
x86_64)
425-
AC_CACHE_CHECK([number of significant virtual address bits],
426-
[je_cv_lg_vaddr],
427-
AC_RUN_IFELSE([AC_LANG_PROGRAM(
431+
if test "x$LG_VADDR" = "xdetect"; then
432+
AC_CACHE_CHECK([number of significant virtual address bits],
433+
[je_cv_lg_vaddr],
434+
AC_RUN_IFELSE([AC_LANG_PROGRAM(
428435
[[
429436
#include <stdio.h>
430437
#ifdef _WIN32
@@ -461,27 +468,30 @@ typedef unsigned __int32 uint32_t;
461468
[je_cv_lg_vaddr=`cat conftest.out`],
462469
[je_cv_lg_vaddr=error],
463470
[je_cv_lg_vaddr=57]))
464-
if test "x${je_cv_lg_vaddr}" != "x" ; then
465-
LG_VADDR="${je_cv_lg_vaddr}"
466-
fi
467-
if test "x${LG_VADDR}" != "xerror" ; then
468-
AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])
469-
else
470-
AC_MSG_ERROR([cannot determine number of significant virtual address bits])
471+
if test "x${je_cv_lg_vaddr}" != "x" ; then
472+
LG_VADDR="${je_cv_lg_vaddr}"
473+
fi
474+
if test "x${LG_VADDR}" != "xerror" ; then
475+
AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])
476+
else
477+
AC_MSG_ERROR([cannot determine number of significant virtual address bits])
478+
fi
471479
fi
472480
;;
473481
*)
474-
AC_MSG_CHECKING([number of significant virtual address bits])
475-
if test "x${LG_SIZEOF_PTR}" = "x3" ; then
476-
LG_VADDR=64
477-
elif test "x${LG_SIZEOF_PTR}" = "x2" ; then
478-
LG_VADDR=32
479-
elif test "x${LG_SIZEOF_PTR}" = "xLG_SIZEOF_PTR_WIN" ; then
480-
LG_VADDR="(1U << (LG_SIZEOF_PTR_WIN+3))"
481-
else
482-
AC_MSG_ERROR([Unsupported lg(pointer size): ${LG_SIZEOF_PTR}])
482+
if test "x$LG_VADDR" = "xdetect"; then
483+
AC_MSG_CHECKING([number of significant virtual address bits])
484+
if test "x${LG_SIZEOF_PTR}" = "x3" ; then
485+
LG_VADDR=64
486+
elif test "x${LG_SIZEOF_PTR}" = "x2" ; then
487+
LG_VADDR=32
488+
elif test "x${LG_SIZEOF_PTR}" = "xLG_SIZEOF_PTR_WIN" ; then
489+
LG_VADDR="(1U << (LG_SIZEOF_PTR_WIN+3))"
490+
else
491+
AC_MSG_ERROR([Unsupported lg(pointer size): ${LG_SIZEOF_PTR}])
492+
fi
493+
AC_MSG_RESULT([$LG_VADDR])
483494
fi
484-
AC_MSG_RESULT([$LG_VADDR])
485495
;;
486496
esac
487497
AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])

0 commit comments

Comments
 (0)