dev-libs/jemalloc: fix aarch64 non-4k page runtime issue

Jemalloc can't handle running on a system with a larger page size than
it was configured with, resulting in runtime failures if e.g. a binpkg
is used or build-time detection fails (some M1 processors, at least),
resulting in failures like:

	<jemalloc>: Unsupported system page size
	memory allocation of 72 bytes failed

On the other hand, it's quite happy to run when configured with a larger
page size (e.g. 64k) on systems with smaller page sizes (16k, 4k). Apply
an upstream patch to default to 64k on aarch64; users may override this
by passing `--with-lg-pagesize=foo` in `EXTRA_ECONF` if they so desire.

This won't resolve issues on other arches, but it's far less common to
see this sort of weirdness there anyway.

Closes: https://bugs.gentoo.org/964347
Signed-off-by: Matt Jolly <kangie@gentoo.org>
This commit is contained in:
Matt Jolly
2026-01-26 10:41:36 +10:00
parent a5384f4b6d
commit dcbf7b507e
2 changed files with 95 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
https://github.com/facebook/jemalloc/commit/7dcdafea00a3a02cfbc84a798a0cc626515011eb
From: lexprfuncall <5360361+lexprfuncall@users.noreply.github.com>
Date: Mon, 25 Aug 2025 19:39:30 -0700
Subject: [PATCH] Change the default page size to 64KiB on Aarch64 Linux
This updates the configuration script to set the default page size to
64KiB on Aarch64 Linux. This is motivated by compatibility as a build
configured for a 64KiB page will work on kernels that use the smaller
4KiB or 16KiB pages, whereas the reverse is not true.
To make the configured page size setting more visible, the script now
displays the page size when printing the configuration results.
Users that want to override the page size in to choose a smaller value
can still do so with the --with-lg-pagesize configuration option.
--- a/configure.ac
+++ b/configure.ac
@@ -1990,6 +1990,11 @@ case "${host}" in
LG_PAGE=14
fi
;;
+ aarch64-unknown-linux-*)
+ if test "x$LG_PAGE" = "xdetect"; then
+ LG_PAGE=16
+ fi
+ ;;
esac
if test "x$LG_PAGE" = "xdetect"; then
AC_CACHE_CHECK([LG_PAGE],
@@ -3077,6 +3082,8 @@ AC_MSG_RESULT([INCLUDEDIR : ${INCLUDEDIR}])
AC_MSG_RESULT([LIBDIR : ${LIBDIR}])
AC_MSG_RESULT([MANDIR : ${MANDIR}])
AC_MSG_RESULT([])
+AC_MSG_RESULT([LG_PAGE : ${LG_PAGE}])
+AC_MSG_RESULT([])
AC_MSG_RESULT([srcroot : ${srcroot}])
AC_MSG_RESULT([abs_srcroot : ${abs_srcroot}])
AC_MSG_RESULT([objroot : ${objroot}])

View File

@@ -0,0 +1,57 @@
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI="8"
inherit autotools multilib-minimal
DESCRIPTION="Jemalloc is a general-purpose scalable concurrent allocator"
HOMEPAGE="http://jemalloc.net/ https://github.com/jemalloc/jemalloc"
SRC_URI="https://github.com/jemalloc/jemalloc/releases/download/${PV}/${P}.tar.bz2"
LICENSE="BSD"
SLOT="0/2"
KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86"
IUSE="debug lazy-lock prof stats xmalloc"
HTML_DOCS=( doc/jemalloc.html )
PATCHES=(
"${FILESDIR}/${PN}-5.3.0-gentoo-fixups.patch"
"${FILESDIR}/${PN}-5.3.0-backport-pr-2312.patch"
"${FILESDIR}/${PN}-5.3.0-backport-pr-2338.patch"
"${FILESDIR}/${PN}-5.3.0-aarch64-64kib-page-size.patch" # users can override by passing `--with-lg-pagesize=foo`
)
MULTILIB_WRAPPED_HEADERS=( /usr/include/jemalloc/jemalloc.h )
src_prepare() {
default
eautoreconf
}
multilib_src_configure() {
local myconf=(
$(use_enable debug)
$(use_enable lazy-lock)
$(use_enable prof)
$(use_enable stats)
$(use_enable xmalloc)
)
ECONF_SOURCE="${S}" econf "${myconf[@]}"
}
multilib_src_install() {
# Copy man file which the Makefile looks for
cp "${S}/doc/jemalloc.3" "${BUILD_DIR}/doc" || die
emake DESTDIR="${D}" install
}
multilib_src_install_all() {
if [[ ${CHOST} == *-darwin* ]] ; then
# fixup install_name, #437362
install_name_tool \
-id "${EPREFIX}"/usr/$(get_libdir)/libjemalloc.2.dylib \
"${ED}"/usr/$(get_libdir)/libjemalloc.2.dylib || die
fi
find "${ED}" -name '*.a' -delete || die
}