commit: e6afd1fe4bd15d46f748745ba16c6206b14a62c6 Author: Matt Jolly <kangie <AT> gentoo <DOT> org> AuthorDate: Mon Jun 2 09:22:16 2025 +0000 Commit: Matt Jolly <kangie <AT> gentoo <DOT> org> CommitDate: Mon Jun 2 09:22:16 2025 +0000 URL: https://gitweb.gentoo.org/proj/rust-patches.git/commit/?id=e6afd1fe
Add patches for Rust 1.76.0-r101 Patches: - 1.67.0-doc-wasm.patch - 1.70.0-ignore-broken-and-non-applicable-tests.patch - 1.74.1-cross-compile-libz.patch - 1.75.0-handle-vendored-sources.patch - 1.75.0-musl-dynamic-linking.patch - 1.76.0-loong-code-model.patch Signed-off-by: Matt Jolly <kangie <AT> gentoo.org> 1.76.0-loong-code-model.patch | 73 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/1.76.0-loong-code-model.patch b/1.76.0-loong-code-model.patch new file mode 100644 index 0000000..02bfeca --- /dev/null +++ b/1.76.0-loong-code-model.patch @@ -0,0 +1,73 @@ +https://github.com/rust-lang/rust/pull/120661 +From: WANG Xuerui <[email protected]> +Date: Mon, 5 Feb 2024 13:18:32 +0800 +Subject: [PATCH] target: default to the medium code model on LoongArch targets +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The Rust LoongArch targets have been using the default LLVM code model +so far, which is "small" in LLVM-speak and "normal" in LoongArch-speak. +As described in the "Code Model" section of LoongArch ELF psABI spec +v20231219 [1], one can only make function calls as far as ±128MiB with +the "normal" code model; this is insufficient for very large software +containing Rust components that needs to be linked into the big text +section, such as Chromium. + +Because: + +* we do not want to ask users to recompile std if they are to build + such software, +* objects compiled with larger code models can be linked with those + with smaller code models without problems, and +* the "medium" code model is comparable to the "small"/"normal" one + performance-wise (same data access pattern; each function call + becomes 2-insn long and indirect, but this may be relaxed back into + the direct 1-insn form in a future LLVM version), but is able to + perform function calls within ±128GiB, + +it is better to just switch the targets to the "medium" code model, +which is also "medium" in LLVM-speak. + +[1]: https://github.com/loongson/la-abi-specs/blob/v2.30/laelf.adoc#code-models +--- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_gnu.rs ++++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_linux_gnu.rs +@@ -1,4 +1,4 @@ +-use crate::spec::{base, Target, TargetOptions}; ++use crate::spec::{base, CodeModel, Target, TargetOptions}; + + pub fn target() -> Target { + Target { +@@ -7,6 +7,7 @@ pub fn target() -> Target { + data_layout: "e-m:e-p:64:64-i64:64-i128:128-n64-S128".into(), + arch: "loongarch64".into(), + options: TargetOptions { ++ code_model: Some(CodeModel::Medium), + cpu: "generic".into(), + features: "+f,+d".into(), + llvm_abiname: "lp64d".into(), +--- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none.rs ++++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none.rs +@@ -16,7 +16,7 @@ pub fn target() -> Target { + max_atomic_width: Some(64), + relocation_model: RelocModel::Static, + panic_strategy: PanicStrategy::Abort, +- code_model: Some(CodeModel::Small), ++ code_model: Some(CodeModel::Medium), + ..Default::default() + }, + } +--- a/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none_softfloat.rs ++++ b/compiler/rustc_target/src/spec/targets/loongarch64_unknown_none_softfloat.rs +@@ -17,7 +17,7 @@ pub fn target() -> Target { + max_atomic_width: Some(64), + relocation_model: RelocModel::Static, + panic_strategy: PanicStrategy::Abort, +- code_model: Some(CodeModel::Small), ++ code_model: Some(CodeModel::Medium), + ..Default::default() + }, + } +-- +2.43.0 +
