commit: 2a0f0fc6c80b928f5b9589a4df301045d49ae7cf Author: Michal R <vad.sol <AT> proton <DOT> me> AuthorDate: Thu Oct 30 15:58:53 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Tue Nov 4 14:47:57 2025 +0000 URL: https://gitweb.gentoo.org/proj/rust-patches.git/commit/?id=2a0f0fc6
1.90.0: add patch fixing bootstrap with `-C linker=clang` Bug: https://bugs.gentoo.org/963657 Signed-off-by: Michal Rostecki <vadorovsky <AT> protonmail.com> Signed-off-by: Sam James <sam <AT> gentoo.org> (cherry picked from commit 1ac89e3be4dc14b42fc54c956589a24a64e370d6) 1.90.0/1.9.0-bootstrap-linker-features.patch | 187 +++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) diff --git a/1.90.0/1.9.0-bootstrap-linker-features.patch b/1.90.0/1.9.0-bootstrap-linker-features.patch new file mode 100644 index 0000000..35db09f --- /dev/null +++ b/1.90.0/1.9.0-bootstrap-linker-features.patch @@ -0,0 +1,187 @@ +From 2fc4243d58b838a3ae4eda0c02de95953ddcdaac Mon Sep 17 00:00:00 2001 +From: Boxy <[email protected]> +Date: Wed, 6 Aug 2025 13:31:17 +0100 +Subject: [PATCH] handle bootstrap cfgs + +--- + src/bootstrap/src/core/build_steps/test.rs | 20 ++++--------------- + src/bootstrap/src/core/builder/cargo.rs | 15 +++++--------- + src/bootstrap/src/core/builder/mod.rs | 2 +- + src/bootstrap/src/utils/helpers.rs | 23 ++++------------------ + 4 files changed, 14 insertions(+), 46 deletions(-) + +diff --git a/src/bootstrap/src/core/build_steps/test.rs b/src/bootstrap/src/core/build_steps/test.rs +index 9f0d1cc8892..3f63f58ae99 100644 +--- a/src/bootstrap/src/core/build_steps/test.rs ++++ b/src/bootstrap/src/core/build_steps/test.rs +@@ -264,13 +264,7 @@ fn run(self, builder: &Builder<'_>) { + .args(builder.config.test_args()) + .env("RUSTC", builder.rustc(compiler)) + .env("RUSTDOC", builder.rustdoc(compiler)); +- add_rustdoc_cargo_linker_args( +- &mut cmd, +- builder, +- compiler.host, +- LldThreads::No, +- compiler.stage, +- ); ++ add_rustdoc_cargo_linker_args(&mut cmd, builder, compiler.host, LldThreads::No); + cmd.delay_failure().run(builder); + } + } +@@ -880,7 +874,7 @@ fn run(self, builder: &Builder<'_>) { + .env("CFG_RELEASE_CHANNEL", &builder.config.channel) + .env("RUSTDOC_REAL", builder.rustdoc(self.compiler)) + .env("RUSTC_BOOTSTRAP", "1"); +- cmd.args(linker_args(builder, self.compiler.host, LldThreads::No, self.compiler.stage)); ++ cmd.args(linker_args(builder, self.compiler.host, LldThreads::No)); + + cmd.delay_failure().run(builder); + } +@@ -1056,13 +1050,7 @@ fn run(self, builder: &Builder<'_>) { + cmd.env("RUSTDOC", builder.rustdoc(self.compiler)) + .env("RUSTC", builder.rustc(self.compiler)); + +- add_rustdoc_cargo_linker_args( +- &mut cmd, +- builder, +- self.compiler.host, +- LldThreads::No, +- self.compiler.stage, +- ); ++ add_rustdoc_cargo_linker_args(&mut cmd, builder, self.compiler.host, LldThreads::No); + + for path in &builder.paths { + if let Some(p) = helpers::is_valid_test_suite_arg(path, "tests/rustdoc-gui", builder) { +@@ -1879,7 +1867,7 @@ fn run(self, builder: &Builder<'_>) { + } + + let mut hostflags = flags.clone(); +- hostflags.extend(linker_flags(builder, compiler.host, LldThreads::No, compiler.stage)); ++ hostflags.extend(linker_flags(builder, compiler.host, LldThreads::No)); + + let mut targetflags = flags; + +diff --git a/src/bootstrap/src/core/builder/cargo.rs b/src/bootstrap/src/core/builder/cargo.rs +index 6b3236ef47e..22c171865d1 100644 +--- a/src/bootstrap/src/core/builder/cargo.rs ++++ b/src/bootstrap/src/core/builder/cargo.rs +@@ -115,7 +115,7 @@ pub fn new( + // No need to configure the target linker for these command types. + Kind::Clean | Kind::Check | Kind::Format | Kind::Setup => {} + _ => { +- cargo.configure_linker(builder, mode); ++ cargo.configure_linker(builder); + } + } + +@@ -209,7 +209,7 @@ pub fn allow_features(&mut self, features: &str) -> &mut Cargo { + + // FIXME(onur-ozkan): Add coverage to make sure modifications to this function + // doesn't cause cache invalidations (e.g., #130108). +- fn configure_linker(&mut self, builder: &Builder<'_>, mode: Mode) -> &mut Cargo { ++ fn configure_linker(&mut self, builder: &Builder<'_>) -> &mut Cargo { + let target = self.target; + let compiler = self.compiler; + +@@ -264,12 +264,7 @@ fn configure_linker(&mut self, builder: &Builder<'_>, mode: Mode) -> &mut Cargo + } + } + +- // We use the snapshot compiler when building host code (build scripts/proc macros) of +- // `Mode::Std` tools, so we need to determine the current stage here to pass the proper +- // linker args (e.g. -C vs -Z). +- // This should stay synchronized with the [cargo] function. +- let host_stage = if mode == Mode::Std { 0 } else { compiler.stage }; +- for arg in linker_args(builder, compiler.host, LldThreads::Yes, host_stage) { ++ for arg in linker_args(builder, compiler.host, LldThreads::Yes) { + self.hostflags.arg(&arg); + } + +@@ -279,10 +274,10 @@ fn configure_linker(&mut self, builder: &Builder<'_>, mode: Mode) -> &mut Cargo + } + // We want to set -Clinker using Cargo, therefore we only call `linker_flags` and not + // `linker_args` here. +- for flag in linker_flags(builder, target, LldThreads::Yes, compiler.stage) { ++ for flag in linker_flags(builder, target, LldThreads::Yes) { + self.rustflags.arg(&flag); + } +- for arg in linker_args(builder, target, LldThreads::Yes, compiler.stage) { ++ for arg in linker_args(builder, target, LldThreads::Yes) { + self.rustdocflags.arg(&arg); + } + +diff --git a/src/bootstrap/src/core/builder/mod.rs b/src/bootstrap/src/core/builder/mod.rs +index deee041490b..ba1cc9e0e68 100644 +--- a/src/bootstrap/src/core/builder/mod.rs ++++ b/src/bootstrap/src/core/builder/mod.rs +@@ -1605,7 +1605,7 @@ pub fn rustdoc_cmd(&self, compiler: Compiler) -> BootstrapCommand { + cmd.arg("-Dwarnings"); + } + cmd.arg("-Znormalize-docs"); +- cmd.args(linker_args(self, compiler.host, LldThreads::Yes, compiler.stage)); ++ cmd.args(linker_args(self, compiler.host, LldThreads::Yes)); + cmd + } + +diff --git a/src/bootstrap/src/utils/helpers.rs b/src/bootstrap/src/utils/helpers.rs +index eb00ed566c2..451482717b6 100644 +--- a/src/bootstrap/src/utils/helpers.rs ++++ b/src/bootstrap/src/utils/helpers.rs +@@ -404,9 +404,8 @@ pub fn linker_args( + builder: &Builder<'_>, + target: TargetSelection, + lld_threads: LldThreads, +- stage: u32, + ) -> Vec<String> { +- let mut args = linker_flags(builder, target, lld_threads, stage); ++ let mut args = linker_flags(builder, target, lld_threads); + + if let Some(linker) = builder.linker(target) { + args.push(format!("-Clinker={}", linker.display())); +@@ -421,29 +420,16 @@ pub fn linker_flags( + builder: &Builder<'_>, + target: TargetSelection, + lld_threads: LldThreads, +- stage: u32, + ) -> Vec<String> { + let mut args = vec![]; + if !builder.is_lld_direct_linker(target) && builder.config.lld_mode.is_used() { + match builder.config.lld_mode { + LldMode::External => { +- // cfg(bootstrap) - remove the stage 0 check after updating the bootstrap compiler: +- // `-Clinker-features` has been stabilized. +- if stage == 0 { +- args.push("-Zlinker-features=+lld".to_string()); +- } else { +- args.push("-Clinker-features=+lld".to_string()); +- } ++ args.push("-Clinker-features=+lld".to_string()); + args.push("-Zunstable-options".to_string()); + } + LldMode::SelfContained => { +- // cfg(bootstrap) - remove the stage 0 check after updating the bootstrap compiler: +- // `-Clinker-features` has been stabilized. +- if stage == 0 { +- args.push("-Zlinker-features=+lld".to_string()); +- } else { +- args.push("-Clinker-features=+lld".to_string()); +- } ++ args.push("-Clinker-features=+lld".to_string()); + args.push("-Clink-self-contained=+linker".to_string()); + args.push("-Zunstable-options".to_string()); + } +@@ -465,9 +451,8 @@ pub fn add_rustdoc_cargo_linker_args( + builder: &Builder<'_>, + target: TargetSelection, + lld_threads: LldThreads, +- stage: u32, + ) { +- let args = linker_args(builder, target, lld_threads, stage); ++ let args = linker_args(builder, target, lld_threads); + let mut flags = cmd + .get_envs() + .find_map(|(k, v)| if k == OsStr::new("RUSTDOCFLAGS") { v } else { None }) +-- +2.51.0 +
