bootstrap: Build jemalloc for LoongArch with support for 16K pages

By default, jemalloc is configured with a 4K page size. If the
host’s page size is larger than this, it will crash at runtime.
This patch raises the page size to 16K.
This commit is contained in:
WANG Rui 2025-09-11 21:52:42 +08:00
parent 76c5ed2847
commit 35979519ae
2 changed files with 20 additions and 11 deletions

View file

@ -1383,14 +1383,17 @@ pub fn rustc_cargo_env(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetS
}
}
// Build jemalloc on AArch64 with support for page sizes up to 64K
// See: https://github.com/rust-lang/rust/pull/135081
// See also the "JEMALLOC_SYS_WITH_LG_PAGE" setting in the tool build step.
if builder.config.jemalloc(target)
&& target.starts_with("aarch64")
&& env::var_os("JEMALLOC_SYS_WITH_LG_PAGE").is_none()
{
cargo.env("JEMALLOC_SYS_WITH_LG_PAGE", "16");
if builder.config.jemalloc(target) && env::var_os("JEMALLOC_SYS_WITH_LG_PAGE").is_none() {
// Build jemalloc on AArch64 with support for page sizes up to 64K
// See: https://github.com/rust-lang/rust/pull/135081
if target.starts_with("aarch64") {
cargo.env("JEMALLOC_SYS_WITH_LG_PAGE", "16");
}
// Build jemalloc on LoongArch with support for page sizes up to 16K
else if target.starts_with("loongarch") {
cargo.env("JEMALLOC_SYS_WITH_LG_PAGE", "14");
}
}
}

View file

@ -228,12 +228,18 @@ pub fn prepare_tool_cargo(
// own copy
cargo.env("LZMA_API_STATIC", "1");
// Build jemalloc on AArch64 with support for page sizes up to 64K
// See: https://github.com/rust-lang/rust/pull/135081
// Note that `miri` always uses jemalloc. As such, there is no checking of the jemalloc build flag.
// See also the "JEMALLOC_SYS_WITH_LG_PAGE" setting in the compile build step.
if target.starts_with("aarch64") && env::var_os("JEMALLOC_SYS_WITH_LG_PAGE").is_none() {
cargo.env("JEMALLOC_SYS_WITH_LG_PAGE", "16");
if env::var_os("JEMALLOC_SYS_WITH_LG_PAGE").is_none() {
// Build jemalloc on AArch64 with support for page sizes up to 64K
// See: https://github.com/rust-lang/rust/pull/135081
if target.starts_with("aarch64") {
cargo.env("JEMALLOC_SYS_WITH_LG_PAGE", "16");
}
// Build jemalloc on LoongArch with support for page sizes up to 16K
else if target.starts_with("loongarch") {
cargo.env("JEMALLOC_SYS_WITH_LG_PAGE", "14");
}
}
// CFG_RELEASE is needed by rustfmt (and possibly other tools) which