diff mbox series

[2/3] rust: Upgrade 1.86.0 -> 1.87.0

Message ID 20250624091403.2469860-2-Yash.Shinde@windriver.com
State Accepted, archived
Commit 16ce25e6970b4a50f6433606a0c87d22ec74ea5a
Headers show
Series [1/3] rust: Drop obsolete rust-lld and extended tools dependencies | expand

Commit Message

Yash Shinde June 24, 2025, 9:14 a.m. UTC
From: Yash Shinde <Yash.Shinde@windriver.com>

Rust stable version updated to 1.87.0.
https://blog.rust-lang.org/2025/05/15/Rust-1.87.0/

* Update LLVM data-layout for arm64.

* Rebase existing patches with v1.87.0.

* Two tests from the `ui` and `codegen` modules now fail only on riscv64.
  Enable them on arm32/64 and x86-32/64 targets, while restricting
  them on riscv64 via `only-<target_arch>` tags.

* Add triagebot.patch file to keep running tidy checks.

* During rust installation, some binaries were installed from
  'stage2-tools' built path to '${D}${bindir}'. However, from
  v1.87 the stage2-tools are no longer built by default.
  Update logic to install from `stage1-tools` instead.

Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
---
 .../classes-recipe/rust-target-config.bbclass |   2 +-
 meta/conf/distro/include/tcmode-default.inc   |   2 +-
 .../rust/{cargo_1.86.0.bb => cargo_1.87.0.bb} |   0
 ...teps-tool.rs-switch-off-lto-for-rust.patch |  30 ++--
 ...crease-timeout-in-process-sigpipe-ru.patch |   4 +-
 ...d-statically-in-rustc_driver-feature.patch |  11 +-
 .../rust/files/rust-oe-selftest.patch         | 147 ++++++++++--------
 .../rust/files/triagebot.patch                |  32 ++++
 ...ibstd-rs_1.86.0.bb => libstd-rs_1.87.0.bb} |   0
 ....86.0.bb => rust-cross-canadian_1.87.0.bb} |   0
 ...ust-llvm_1.86.0.bb => rust-llvm_1.87.0.bb} |   4 +-
 meta/recipes-devtools/rust/rust-snapshot.inc  |  78 +++++-----
 meta/recipes-devtools/rust/rust-source.inc    |   3 +-
 .../rust/{rust_1.86.0.bb => rust_1.87.0.bb}   |   4 +-
 14 files changed, 186 insertions(+), 131 deletions(-)
 rename meta/recipes-devtools/rust/{cargo_1.86.0.bb => cargo_1.87.0.bb} (100%)
 create mode 100644 meta/recipes-devtools/rust/files/triagebot.patch
 rename meta/recipes-devtools/rust/{libstd-rs_1.86.0.bb => libstd-rs_1.87.0.bb} (100%)
 rename meta/recipes-devtools/rust/{rust-cross-canadian_1.86.0.bb => rust-cross-canadian_1.87.0.bb} (100%)
 rename meta/recipes-devtools/rust/{rust-llvm_1.86.0.bb => rust-llvm_1.87.0.bb} (96%)
 rename meta/recipes-devtools/rust/{rust_1.86.0.bb => rust_1.87.0.bb} (99%)

Comments

Randy MacLeod June 24, 2025, 4:47 p.m. UTC | #1
On 2025-06-24 5:14 a.m., Yash.Shinde@windriver.com wrote:
> From: Yash Shinde<Yash.Shinde@windriver.com>
>
> Rust stable version updated to 1.87.0.
> https://blog.rust-lang.org/2025/05/15/Rust-1.87.0/
>
> * Update LLVM data-layout for arm64.
Expand this section. Why are you doing this?
How did you decide on this data-layout?
>
> * Rebase existing patches with v1.87.0.
>
> * Two tests from the `ui` and `codegen` modules now fail only on riscv64.
>    Enable them on arm32/64 and x86-32/64 targets, while restricting
>    them on riscv64 via `only-<target_arch>` tags.
Nice! Can you mention the overall testsuite status briefly in the v2 
commit log?
>
> * Add triagebot.patch file to keep running tidy checks.

Could you expand this sentence to explain what these checks do, please?

Is this a new feature in 1.87.0? Ah, I read the patch and think you 
should just

include something like the first part of the patch in the commit log:

+Skip tidy triagebot linkcheck if triagebot.toml doesn't exist
+
+Distribution tarballs won't include triagebot.toml, which
+causes tidy checks to fail with the following error:
+
+   tidy error: triagebot.toml file not found
+   some tidy checks failed

but format it properly and mention that it's a backport.


>
> * During rust installation, some binaries were installed from
>    'stage2-tools' built path to '${D}${bindir}'. However, from
>    v1.87 the stage2-tools are no longer built by default.
>    Update logic to install from `stage1-tools` instead.

Okay. It would be nice to understand why but that's not essential, I 
suppose.


Generally, this is a good commit message, albeit a bit terse as pointed 
out above.


Can you also comment on the build time and FS footprint changes if any ?

I've looked through the changes below and I don't have any comments.

../Randy


>
> Signed-off-by: Yash Shinde<Yash.Shinde@windriver.com>
> ---
>   .../classes-recipe/rust-target-config.bbclass |   2 +-
>   meta/conf/distro/include/tcmode-default.inc   |   2 +-
>   .../rust/{cargo_1.86.0.bb => cargo_1.87.0.bb} |   0
>   ...teps-tool.rs-switch-off-lto-for-rust.patch |  30 ++--
>   ...crease-timeout-in-process-sigpipe-ru.patch |   4 +-
>   ...d-statically-in-rustc_driver-feature.patch |  11 +-
>   .../rust/files/rust-oe-selftest.patch         | 147 ++++++++++--------
>   .../rust/files/triagebot.patch                |  32 ++++
>   ...ibstd-rs_1.86.0.bb => libstd-rs_1.87.0.bb} |   0
>   ....86.0.bb => rust-cross-canadian_1.87.0.bb} |   0
>   ...ust-llvm_1.86.0.bb => rust-llvm_1.87.0.bb} |   4 +-
>   meta/recipes-devtools/rust/rust-snapshot.inc  |  78 +++++-----
>   meta/recipes-devtools/rust/rust-source.inc    |   3 +-
>   .../rust/{rust_1.86.0.bb => rust_1.87.0.bb}   |   4 +-
>   14 files changed, 186 insertions(+), 131 deletions(-)
>   rename meta/recipes-devtools/rust/{cargo_1.86.0.bb => cargo_1.87.0.bb} (100%)
>   create mode 100644 meta/recipes-devtools/rust/files/triagebot.patch
>   rename meta/recipes-devtools/rust/{libstd-rs_1.86.0.bb => libstd-rs_1.87.0.bb} (100%)
>   rename meta/recipes-devtools/rust/{rust-cross-canadian_1.86.0.bb => rust-cross-canadian_1.87.0.bb} (100%)
>   rename meta/recipes-devtools/rust/{rust-llvm_1.86.0.bb => rust-llvm_1.87.0.bb} (96%)
>   rename meta/recipes-devtools/rust/{rust_1.86.0.bb => rust_1.87.0.bb} (99%)
>
> diff --git a/meta/classes-recipe/rust-target-config.bbclass b/meta/classes-recipe/rust-target-config.bbclass
> index 906a5083d7..cac6e90a9e 100644
> --- a/meta/classes-recipe/rust-target-config.bbclass
> +++ b/meta/classes-recipe/rust-target-config.bbclass
> @@ -171,7 +171,7 @@ MAX_ATOMIC_WIDTH[armv7-eabi] = "64"
>   FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2"
>   
>   ## aarch64-unknown-linux-{gnu, musl}
> -DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
> +DATA_LAYOUT[aarch64] = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
>   TARGET_ENDIAN[aarch64] = "little"
>   TARGET_POINTER_WIDTH[aarch64] = "64"
>   TARGET_C_INT_WIDTH[aarch64] = "32"
> diff --git a/meta/conf/distro/include/tcmode-default.inc b/meta/conf/distro/include/tcmode-default.inc
> index e943ca77d1..c506bb3ad5 100644
> --- a/meta/conf/distro/include/tcmode-default.inc
> +++ b/meta/conf/distro/include/tcmode-default.inc
> @@ -12,7 +12,7 @@ PREFERRED_PROVIDER_virtual/gettext ??= "gettext"
>   GCCVERSION ?= "15.%"
>   SDKGCCVERSION ?= "${GCCVERSION}"
>   GLIBCVERSION ?= "2.41%"
> -RUSTVERSION ?= "1.86.0%"
> +RUSTVERSION ?= "1.87.0%"
>   
>   PREFERRED_VERSION_gcc ?= "${GCCVERSION}"
>   PREFERRED_VERSION_gcc-cross-${TARGET_ARCH} ?= "${GCCVERSION}"
> diff --git a/meta/recipes-devtools/rust/cargo_1.86.0.bb b/meta/recipes-devtools/rust/cargo_1.87.0.bb
> similarity index 100%
> rename from meta/recipes-devtools/rust/cargo_1.86.0.bb
> rename to meta/recipes-devtools/rust/cargo_1.87.0.bb
> diff --git a/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch b/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch
> index 5e0f5912a1..a7da69dce3 100644
> --- a/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch
> +++ b/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch
> @@ -24,9 +24,9 @@ diff --git a/src/bootstrap/src/core/build_steps/tool.rs b/src/bootstrap/src/core
>   index 087df2f8a..00790affb 100644
>   --- a/src/bootstrap/src/core/build_steps/tool.rs
>   +++ b/src/bootstrap/src/core/build_steps/tool.rs
> -@@ -1,14 +1,11 @@
> - use std::path::PathBuf;
> - use std::{env, fs};
> +@@ -15,14 +15,12 @@
> + #[cfg(feature = "tracing")] + use tracing::instrument; -use 
> crate::core::build_steps::compile::is_lto_stage; use 
> crate::core::build_steps::toolstate::ToolState; @@ -36,18 +36,20 @@ 
> index 087df2f8a..00790affb 100644 - Builder, Cargo as CargoCommand, 
> RunConfig, ShouldRun, Step, cargo_profile_var, -}; -use 
> crate::core::config::{DebuginfoLevel, RustcLto, TargetSelection}; ++ 
> +use crate::core::builder::{Builder, Cargo as CargoCommand, RunConfig, 
> ShouldRun, Step}; +use crate::core::config::{DebuginfoLevel, 
> TargetSelection}; use crate::utils::channel::GitInfo; use 
> crate::utils::exec::{BootstrapCommand, command}; use 
> crate::utils::helpers::{add_dylib_path, exe, t}; -@@ -658,19 +655,7 @@ 
> - SourceType::InTree, - features.as_slice(), +@@ -148,20 +146,7 @@ + 
> &self.extra_features, ); -- -- // rustdoc is performance sensitive, so 
> apply LTO to it. -- if is_lto_stage(&build_compiler) { + +- if 
> path.ends_with("/rustdoc") &&
> +-            // rustdoc is performance sensitive, so apply LTO to it.
> +-            is_lto_stage(&self.compiler)
> +-        {
>   -            let lto = match builder.config.rust_lto {
>   -                RustcLto::Off => Some("off"),
>   -                RustcLto::Thin => Some("thin"), @@ -60,14 +62,14 @@ index 087df2f8a..00790affb 100644 - } + 
> cargo.rustflag("-Clto=off");
>    
> -         let _guard = builder.msg_tool(
> -             Kind::Build,
> +         if !self.allow_features.is_empty() {
> +             cargo.allow_features(self.allow_features);
>   diff --git a/src/bootstrap/src/core/builder/mod.rs b/src/bootstrap/src/core/builder/mod.rs
>   --- a/src/bootstrap/src/core/builder/mod.rs
>   +++ b/src/bootstrap/src/core/builder/mod.rs
> -@@ -11,7 +11,7 @@
> -
> - use clap::ValueEnum;
> +@@ -13,7 +13,7 @@
> + #[cfg(feature = "tracing")]
> + use tracing::instrument;
>    
>   -pub use self::cargo::{Cargo, cargo_profile_var};
>   +pub use self::cargo::Cargo;
> diff --git a/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch b/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
> index bb27ca35ff..5bd1abffb4 100644
> --- a/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
> +++ b/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
> @@ -22,10 +22,10 @@ index 11f363d62..c12d66016 100644
>   +++ b/tests/ui/process/process-sigpipe.rs
>   @@ -23,7 +23,7 @@ use std::thread;
>    fn main() {
> -     // Just in case `yes` doesn't check for EPIPE...
> +     // Just in case `yes` or `while-echo` doesn't check for EPIPE...
>        thread::spawn(|| {
>   -        thread::sleep_ms(5000);
>   +        thread::sleep_ms(50000);
>            process::exit(1);
>        });
> -     let output = process::Command::new("sh")
> +     // QNX Neutrino does not have `yes`. Therefore, use `while-echo` for `nto`
> diff --git a/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch b/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch
> index 20a49d46dc..9bbbce0182 100644
> --- a/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch
> +++ b/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch
> @@ -200,11 +200,10 @@ diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/c
>   index 27bbc8bd8f..a6fc4df2eb 100644
>   --- a/src/bootstrap/src/core/build_steps/compile.rs
>   +++ b/src/bootstrap/src/core/build_steps/compile.rs
> -@@ -1940,24 +1940,8 @@ impl Step for Assemble {
> -         let src_libdir = builder.sysroot_target_libdir(build_compiler, host);
> +@@ -2158,23 +2158,7 @@
>            for f in builder.read_dir(&src_libdir) {
>                let filename = f.file_name().into_string().unwrap();
> --
> +
>   -            let is_proc_macro = proc_macros.contains(&filename);
>   -            let is_dylib_or_debug = is_dylib(&f.path()) || is_debug_info(&filename);
>   -
> @@ -214,8 +213,7 @@ index 27bbc8bd8f..a6fc4df2eb 100644
>   -            let can_be_rustc_dynamic_dep = if builder
>   -                .link_std_into_rustc_driver(target_compiler.host)
>   -                && !target_compiler.host.is_windows()
> -+            if (is_dylib(Path::new(&filename)) || is_debug_info(&filename)) && !proc_macros.contains(&filename)
> -             {
> +-            {
>   -                let is_std = filename.starts_with("std-") || filename.starts_with("libstd-");
>   -                !is_std
>   -            } else {
> @@ -223,6 +221,7 @@ index 27bbc8bd8f..a6fc4df2eb 100644
>   -            };
>   -
>   -            if is_dylib_or_debug && can_be_rustc_dynamic_dep && !is_proc_macro {
> -                 builder.copy_link(&f.path(), &rustc_libdir.join(&filename));
> ++            if (is_dylib(Path::new(&filename)) || is_debug_info(&filename)) && !proc_macros.contains(&filename) {
> +                 builder.copy_link(&f.path(), &rustc_libdir.join(&filename), FileType::Regular);
>                }
>            }
> diff --git a/meta/recipes-devtools/rust/files/rust-oe-selftest.patch b/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
> index 49d85072cb..b7ef806e65 100644
> --- a/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
> +++ b/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
> @@ -47,61 +47,85 @@ diff --git a/library/std/tests/sync/rwlock.rs b/library/std/tests/sync/rwlock.rs
>   index 1a9d3d3f12f..0a9cfc48806 100644
>   --- a/library/std/tests/sync/rwlock.rs
>   +++ b/library/std/tests/sync/rwlock.rs
> -@@ -47,6 +47,7 @@ fn frob() {
> - }
> -
> +@@ -74,6 +74,7 @@
> +
>    #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>   +#[ignore]
>    fn test_rw_arc_poison_wr() {
>        let arc = Arc::new(RwLock::new(1));
>        let arc2 = arc.clone();
> -@@ -72,6 +73,7 @@ fn test_rw_arc_poison_mapped_w_r() {
> - }
> -
> +@@ -87,6 +88,7 @@
> +
> + #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
> ++#[ignore]
> + fn test_rw_arc_poison_mapped_w_r() {
> +     let arc = Arc::new(RwLock::new(1));
> +     let arc2 = arc.clone();
> +@@ -101,6 +103,7 @@
> +
>    #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>   +#[ignore]
>    fn test_rw_arc_poison_ww() {
>        let arc = Arc::new(RwLock::new(1));
>        assert!(!arc.is_poisoned());
> -@@ -100,6 +102,7 @@ fn test_rw_arc_poison_mapped_w_w() {
> +@@ -115,6 +118,7 @@
>    }
> -
> +
> + #[test]
> ++#[ignore]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
> + fn test_rw_arc_poison_mapped_w_w() {
> +     let arc = Arc::new(RwLock::new(1));
> +@@ -131,6 +135,7 @@
> +
>    #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>   +#[ignore]
>    fn test_rw_arc_no_poison_rr() {
>        let arc = Arc::new(RwLock::new(1));
>        let arc2 = arc.clone();
> -@@ -127,6 +130,7 @@ fn test_rw_arc_no_poison_mapped_r_r() {
> - }
> -
> +@@ -160,6 +165,7 @@
> +
>    #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>   +#[ignore]
>    fn test_rw_arc_no_poison_rw() {
>        let arc = Arc::new(RwLock::new(1));
>        let arc2 = arc.clone();
> -@@ -192,6 +196,7 @@ fn test_rw_arc() {
> - }
> -
> +@@ -227,6 +233,7 @@
> +
>    #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>   +#[ignore]
>    fn test_rw_arc_access_in_unwind() {
>        let arc = Arc::new(RwLock::new(1));
>        let arc2 = arc.clone();
> -@@ -275,6 +280,7 @@ fn drop(&mut self) {
> - }
> -
> +@@ -326,6 +333,7 @@
> +
>    #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>   +#[ignore]
>    fn test_into_inner_poison() {
>        let m = new_poisoned_rwlock(NonCopy(10));
> -
> -@@ -299,6 +305,7 @@ fn test_get_mut() {
> - }
> -
> +
> +@@ -362,6 +370,7 @@
> +
>    #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>   +#[ignore]
>    fn test_get_mut_poison() {
>        let mut m = new_poisoned_rwlock(NonCopy(10));
> +
> +@@ -567,6 +576,7 @@
> +
> + #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
> ++#[ignore]
> + fn panic_while_mapping_write_unlocked_poison() {
> +     let lock = RwLock::new(());
>   
>   diff --git a/library/test/src/tests.rs b/library/test/src/tests.rs
>   --- a/library/test/src/tests.rs
> @@ -117,52 +141,22 @@ diff --git a/library/test/src/tests.rs b/library/test/src/tests.rs
>   diff --git a/library/std/tests/sync/mutex.rs b/library/std/tests/sync/mutex.rs
>   --- a/library/std/tests/sync/mutex.rs
>   +++ b/library/std/tests/sync/mutex.rs
> -@@ -193,6 +193,7 @@
> - }
> -
> +@@ -312,6 +312,7 @@
> +
>    #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>   +#[ignore]
>    fn test_mutex_arc_poison_mapped() {
>        let arc = Arc::new(Mutex::new(1));
>        assert!(!arc.is_poisoned());
> -diff --git a/library/std/tests/sync/mutex.rs b/library/std/tests/sync/mutex.rs
> ---- a/library/std/tests/sync/mutex.rs
> -+++ b/library/std/tests/sync/mutex.rs
> -@@ -272,6 +272,7 @@
> - }
> -
> +@@ -391,6 +392,7 @@
> +
>    #[test]
> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>   +#[ignore]
>    fn panic_while_mapping_unlocked_poison() {
>        let lock = Mutex::new(());
>   
> -diff --git a/library/std/src/sync/rwlock/tests.rs b/library/std/tests/sync/rwlock.rs
> ---- a/library/std/tests/sync/rwlock.rs
> -+++ b/library/std/tests/sync/rwlock.rs
> -@@ -59,6 +59,7 @@ fn test_rw_arc_poison_wr() {
> - }
> -
> - #[test]
> -+#[ignore]
> - fn test_rw_arc_poison_mapped_w_r() {
> -     let arc = Arc::new(RwLock::new(1));
> -     let arc2 = arc.clone();
> -@@ -86,6 +87,7 @@ fn test_rw_arc_poison_ww() {
> - }
> -
> - #[test]
> -+#[ignore]
> - fn test_rw_arc_poison_mapped_w_w() {
> -     let arc = Arc::new(RwLock::new(1));
> -     let arc2 = arc.clone();
> -@@ -431,6 +433,7 @@ fn panic_while_mapping_read_unlocked_no_poison() {
> - }
> -
> - #[test]
> -+#[ignore]
> - fn panic_while_mapping_write_unlocked_poison() {
> -     let lock = RwLock::new(());
> -
>   diff --git a/library/coretests/benches/num/int_log/mod.rs b/library/coretests/benches/num/int_log/mod.rs
>   index 3807cd5d76c..018c5c04456 100644
>   --- a/library/coretests/benches/num/int_log/mod.rs
> @@ -199,10 +193,10 @@ index 9d4f52a092..d425e5f7b7 100644
>    fn thread_current_in_dtor() {
>        // Go through one round of TLS destruction first.
>        struct Defer;
> -diff --git a/library/alloc/tests/sort/tests.rs b/library/alloc/tests/sort/tests.rs
> +diff --git a/library/alloctests/tests/sort/tests.rs b/library/alloctests/tests/sort/tests.rs
>   index 14e6013f96..b670f27ab4 100644
> ---- a/library/alloc/tests/sort/tests.rs
> -+++ b/library/alloc/tests/sort/tests.rs
> +--- a/library/alloctests/tests/sort/tests.rs
> ++++ b/library/alloctests/tests/sort/tests.rs
>   @@ -915,12 +915,14 @@ gen_sort_test_fns_with_default_patterns_3_ty!(
>    macro_rules! instantiate_sort_test_inner {
>        ($sort_impl:ty, miri_yes, $test_fn_name:ident) => {
> @@ -234,10 +228,10 @@ diff --git a/tests/assembly/dwarf-mixed-versions-lto.rs b/tests/assembly/dwarf-m
>   index 5b8e5ff4f4a..e558fbd7bd7 100644
>   --- a/tests/assembly/dwarf-mixed-versions-lto.rs
>   +++ b/tests/assembly/dwarf-mixed-versions-lto.rs
> -@@ -1,6 +1,11 @@
> - // This test ensures that if LTO occurs between crates with different DWARF versions, we
> +@@ -2,6 +2,11 @@
>    // will choose the highest DWARF version for the final binary. This matches Clang's behavior.
> -
> + // Note: `.2byte` directive is used on MIPS.
> +
>   +//@ only-x86
>   +//@ only-x86_64
>   +//@ only-arm
> @@ -259,3 +253,30 @@ index 0e712bc3a4e..93965d990d0 100644
>    //@ revisions: OPT2 OPT3
>    //@[OPT2] compile-flags: -Copt-level=2
>    //@[OPT3] compile-flags: -C opt-level=3
> +diff --git a/tests/codegen/uninhabited-transparent-return-abi.rs b/tests/codegen/uninhabited-transparent-return-abi.rs
> +index face1577c3f..d69e5e34a7b 100644
> +--- a/tests/codegen/uninhabited-transparent-return-abi.rs
> ++++ b/tests/codegen/uninhabited-transparent-return-abi.rs
> +@@ -1,4 +1,8 @@
> + //@ compile-flags: -Copt-level=3
> ++//@ only-x86
> ++//@ only-x86_64
> ++//@ only-arm
> ++//@ only-aarch64
> +
> + // Seehttps://github.com/rust-lang/rust/issues/135802
> +
> +diff --git a/tests/ui/abi/rust-cold-works-with-rustic-args.rs b/tests/ui/abi/rust-cold-works-with-rustic-args.rs
> +index 57027364699..3faa7ea035e 100644
> +--- a/tests/ui/abi/rust-cold-works-with-rustic-args.rs
> ++++ b/tests/ui/abi/rust-cold-works-with-rustic-args.rs
> +@@ -1,5 +1,9 @@
> + //@build-pass
> + //@compile-flags: -Clink-dead-code=true --crate-type lib
> ++//@ only-x86
> ++//@ only-x86_64
> ++//@ only-arm
> ++//@ only-aarch64
> + // We used to not handle all "rustic" ABIs in a (relatively) uniform way,
> + // so we failed to fix up arguments for actually passing through the ABI...
> + #![feature(rust_cold_cc)]
> diff --git a/meta/recipes-devtools/rust/files/triagebot.patch b/meta/recipes-devtools/rust/files/triagebot.patch
> new file mode 100644
> index 0000000000..715664d081
> --- /dev/null
> +++ b/meta/recipes-devtools/rust/files/triagebot.patch
> @@ -0,0 +1,32 @@
> +Skip tidy triagebot linkcheck if triagebot.toml doesn't exist
> +
> +Distribution tarballs won't include triagebot.toml, which
> +causes tidy checks to fail with the following error:
> +
> +   tidy error: triagebot.toml file not found
> +   some tidy checks failed
> +
> +Drop the triagebot.toml check which is mostly to catch broken
> +path filters *within* `triagebot.toml` and not enforce
> +the existence of it.
> +
> +Upstream-Status: Backport [https://github.com/rust-lang/rust/pull/142666/commits]
> +
> +Signed-off-by: Yash Shinde<Yash.Shinde@windriver.com>
> +---
> +diff --git a/src/tools/tidy/src/triagebot.rs b/src/tools/tidy/src/triagebot.rs
> +--- a/src/tools/tidy/src/triagebot.rs
> ++++ b/src/tools/tidy/src/triagebot.rs
> +@@ -6,8 +6,11 @@
> +
> + pub fn check(path: &Path, bad: &mut bool) {
> +     let triagebot_path = path.join("triagebot.toml");
> ++
> ++    // This check is mostly to catch broken path filters *within* `triagebot.toml`, and not enforce
> ++    // the existence of `triagebot.toml` itself (which is more obvious), as distribution tarballs
> ++    // will not include non-essential bits like `triagebot.toml`.
> +     if !triagebot_path.exists() {
> +-        tidy_error!(bad, "triagebot.toml file not found");
> +         return;
> +     }
> +
> diff --git a/meta/recipes-devtools/rust/libstd-rs_1.86.0.bb b/meta/recipes-devtools/rust/libstd-rs_1.87.0.bb
> similarity index 100%
> rename from meta/recipes-devtools/rust/libstd-rs_1.86.0.bb
> rename to meta/recipes-devtools/rust/libstd-rs_1.87.0.bb
> diff --git a/meta/recipes-devtools/rust/rust-cross-canadian_1.86.0.bb b/meta/recipes-devtools/rust/rust-cross-canadian_1.87.0.bb
> similarity index 100%
> rename from meta/recipes-devtools/rust/rust-cross-canadian_1.86.0.bb
> rename to meta/recipes-devtools/rust/rust-cross-canadian_1.87.0.bb
> diff --git a/meta/recipes-devtools/rust/rust-llvm_1.86.0.bb b/meta/recipes-devtools/rust/rust-llvm_1.87.0.bb
> similarity index 96%
> rename from meta/recipes-devtools/rust/rust-llvm_1.86.0.bb
> rename to meta/recipes-devtools/rust/rust-llvm_1.87.0.bb
> index 327e8e6b69..d70aa350ab 100644
> --- a/meta/recipes-devtools/rust/rust-llvm_1.86.0.bb
> +++ b/meta/recipes-devtools/rust/rust-llvm_1.87.0.bb
> @@ -2,9 +2,9 @@ SUMMARY = "LLVM compiler framework (packaged with rust)"
>   LICENSE ?= "Apache-2.0-with-LLVM-exception"
>   HOMEPAGE ="http://www.rust-lang.org"
>   
> -# check src/llvm-project/cmake/Modules/LLVMVersion.cmake for llvm version in use
> +# check src/llvm-project/llvm/CMakeLists.txt for llvm version in use
>   #
> -LLVM_RELEASE = "19.1.7"
> +LLVM_RELEASE = "20.1.1"
>   
>   require rust-source.inc
>   
> diff --git a/meta/recipes-devtools/rust/rust-snapshot.inc b/meta/recipes-devtools/rust/rust-snapshot.inc
> index 445390fcaf..87b39a2cc2 100644
> --- a/meta/recipes-devtools/rust/rust-snapshot.inc
> +++ b/meta/recipes-devtools/rust/rust-snapshot.inc
> @@ -4,56 +4,56 @@
>   ## The exact (previous) version that has been used is specified in the source tarball.
>   ## The version is replicated here.
>   
> -SNAPSHOT_VERSION = "1.85.0"
> +SNAPSHOT_VERSION = "1.86.0"
>   
> -SRC_URI[rustc-snapshot-aarch64.sha256sum] = "e742b768f67303010b002b515f6613c639e69ffcc78cd0857d6fe7989e9880f6"
> -SRC_URI[rust-std-snapshot-aarch64.sha256sum] = "8af1d793f7820e9ad0ee23247a9123542c3ea23f8857a018651c7788af9bc5b7"
> -SRC_URI[cargo-snapshot-aarch64.sha256sum] = "cdebe48b066d512d664c13441e8fae2d0f67106c2080aa44289d98b24192b8bc"
> -SRC_URI[clippy-snapshot-aarch64.sha256sum] = "f3b8e769021a6bcee8174ac49a60c367effb6d97af0f2a6c44dc9ea39ff2bda9"
> +SRC_URI[rustc-snapshot-aarch64.sha256sum] = "ccece9e59546d2e6ff3fc3b8f4b033aab21631c271eefbe814b3cbace6628c6e"
> +SRC_URI[rust-std-snapshot-aarch64.sha256sum] = "176129577a5d560bbd94bcd2d24c0228bb495b73219df02556b4e4b4f0815bf7"
> +SRC_URI[cargo-snapshot-aarch64.sha256sum] = "37156542b702e8b4ffd1c5c75017632582343e93ca378285cdc92196c85c77e3"
> +SRC_URI[clippy-snapshot-aarch64.sha256sum] = "e70edcf560e6b50861618d7045d2b38cae9e2a555f489062570e2e7041563f42"
>   
> -SRC_URI[rustc-snapshot-i686.sha256sum] = "c5a5751f3cfa027b53fee83d01dec8e555f3622b6993335aed12b1747aa9543c"
> -SRC_URI[rust-std-snapshot-i686.sha256sum] = "401571adfe1223d83ed041e5a8c54c1f3afb3010d1d5b0c1fd79e7da1ab0a0de"
> -SRC_URI[cargo-snapshot-i686.sha256sum] = "3832027242911ab96fd86128587fc563596a5b10e8e38a073facf61c1ac9668f"
> -SRC_URI[clippy-snapshot-i686.sha256sum] = "74ed13a67c6ea0452c0d9e8697c6cfdd8280f983b207187ac93c287f72b65066"
> +SRC_URI[rustc-snapshot-i686.sha256sum] = "976f4604d949d722738a9fe95313035226571128396e942b0fc678180be487b0"
> +SRC_URI[rust-std-snapshot-i686.sha256sum] = "ce9f0fa4b0760730e26bf315cebe099f0b883436e095c5fc4b94ba20bd9f121a"
> +SRC_URI[cargo-snapshot-i686.sha256sum] = "24f20bdc1bb14f4ffbdc2f540488bebc3340437418725c3162215ae03cdad480"
> +SRC_URI[clippy-snapshot-i686.sha256sum] = "6788449fa0eceebe4ea8c797bbaf27495dad152087b3085d58dc05cacab0617a"
>   
> -SRC_URI[rustc-snapshot-loongarch64.sha256sum] = "d43d2119ff25d879b2d280d3e5a03fcd21c57a32d479ad5626500c32432f18c9"
> -SRC_URI[rust-std-snapshot-loongarch64.sha256sum] = "2d05f5e13e7cb3ee6b0ca0dcd13a231a28eeb0faa4d15257a35cf7284149cd6a"
> -SRC_URI[cargo-snapshot-loongarch64.sha256sum] = "9aa447eefcd3ba2f9dbab77596c8669849899ab243543fc8f1914089707081ac"
> -SRC_URI[clippy-snapshot-loongarch64.sha256sum] = "d437b39465343a71ff475a65acb6c03bc0f800861f293f48accf1fa170458432"
> +SRC_URI[rustc-snapshot-loongarch64.sha256sum] = "970089ad61f8ca82017b59444aee483c1fc005e3f7a6af63cd5f146df8287cce"
> +SRC_URI[rust-std-snapshot-loongarch64.sha256sum] = "2f528377f57fbf81da35e2f08ec7ba50daddabebdce2cc86b6ec909fee157a33"
> +SRC_URI[cargo-snapshot-loongarch64.sha256sum] = "c3b8ab03b64c824f2ea25db578b5760d44302be3fd1e4a78404c98cba39301f4"
> +SRC_URI[clippy-snapshot-loongarch64.sha256sum] = "1ab711423497a1d02408a240da28ad366450574dd7f528ffaee80d1d5ed10550"
>   
> -SRC_URI[rustc-snapshot-powerpc.sha256sum] = "fbe7154abc641d6cacfdc6239ed4701fc7a09b5046c6d1bd209b59e7f2b2d0f0"
> -SRC_URI[rust-std-snapshot-powerpc.sha256sum] = "ab2d5ac7cd295adaa4d959e8abbf42b372292c95d1a9f18aad64951ad6e2ab2b"
> -SRC_URI[cargo-snapshot-powerpc.sha256sum] = "e67c30a72f969c51ad199084b3ce0cdc573a4e21f732b2cc39dafbcb9807a5ce"
> -SRC_URI[clippy-snapshot-powerpc.sha256sum] = "497104d49803598cd3801749ac86cb26c88a2bd9c3a8c7bdc18fdf487f4650c0"
> +SRC_URI[rustc-snapshot-powerpc.sha256sum] = "21ea61181ba7daa04f61bec6a295ad76ce34bfbd74ad1d679c4548977bd82eb9"
> +SRC_URI[rust-std-snapshot-powerpc.sha256sum] = "e5ed58a861619bcc89fc3f969174c84fd6ed8a26b5d4b196f06efb868653c1c1"
> +SRC_URI[cargo-snapshot-powerpc.sha256sum] = "fd832c269af81dd1ee9f3831991fccdc2c7312e9a9069908510eefe7c313d144"
> +SRC_URI[clippy-snapshot-powerpc.sha256sum] = "c94578d31e4145a4169ab5761537a2a0133818278fb62ee76251ef8ef45228c8"
>   
> -SRC_URI[rustc-snapshot-powerpc64.sha256sum] = "f8e38291ba4241bc28e9c118d7a449ce3601abdeb2076f2f618858679fb3b929"
> -SRC_URI[rust-std-snapshot-powerpc64.sha256sum] = "e9ff89e759125ad2786ad2f6c40e820095720ea00fba66819d15fba79489430a"
> -SRC_URI[cargo-snapshot-powerpc64.sha256sum] = "73cf850f6715acbf0029c7e5d4694825f61bd4e193e6413e65a78bcb13df97b7"
> -SRC_URI[clippy-snapshot-powerpc64.sha256sum] = "29b63f23cd9af95846a246c9cc8349e514c3fb92ec0c840a38155e252d6cc668"
> +SRC_URI[rustc-snapshot-powerpc64.sha256sum] = "a54bbe16e6a405f137a0dc51fd570140c80077ba769d29d885a60e74cb3196bb"
> +SRC_URI[rust-std-snapshot-powerpc64.sha256sum] = "06538b41a9351c449d215498d4ec2f072f728bd18df8fac7ef8534a0d0f34e27"
> +SRC_URI[cargo-snapshot-powerpc64.sha256sum] = "4d398cd8da17d1a5f26734b39cb17e791b243ac3570f8da2e5e5580a9dfad578"
> +SRC_URI[clippy-snapshot-powerpc64.sha256sum] = "0abf31a8cb2762a7a81dbee8a5798e43e11a83326711ce00ad16c5587bcf5e49"
>   
> -SRC_URI[rustc-snapshot-powerpc64le.sha256sum] = "371e40f9d6d82aecb056f70f82868d98ddc1c20510aa7d388442ac8d2d86a6ca"
> -SRC_URI[rust-std-snapshot-powerpc64le.sha256sum] = "d0cfda4e18623d17922eb367e44ac9549ab3d5fe1c0bdbe0c2c95754255fa705"
> -SRC_URI[cargo-snapshot-powerpc64le.sha256sum] = "e1469f4249a7e21f872af487dcd1bd10ce388b5b3679bdab0cb0965e1e30fe47"
> -SRC_URI[clippy-snapshot-powerpc64le.sha256sum] = "d8c590bc2e6fc75800e41516427f5095ba0e15d7633167689499fcf6523dc61a"
> +SRC_URI[rustc-snapshot-powerpc64le.sha256sum] = "7585a20b02b7dd497e393a2e7552a0c6aabb51556fcf7507c6f7ffde530f8c88"
> +SRC_URI[rust-std-snapshot-powerpc64le.sha256sum] = "fcf940c0553a04cb9bd85cce524729c2f54b000b554fee95c7aa218d608b7e3d"
> +SRC_URI[cargo-snapshot-powerpc64le.sha256sum] = "8fefd2317023716a018986c4a62558a7b543ccf34e4e6d1104afc66edcae1c9c"
> +SRC_URI[clippy-snapshot-powerpc64le.sha256sum] = "8cc65649396ccad73cecd17b972ab8d4c34837136cf374425be63d697b541469"
>   
> -SRC_URI[rustc-snapshot-riscv64gc.sha256sum] = "2da33044f17a8bc49a1478dc1eb2536df491a44d6e6bb0ec7c86f46877d44e98"
> -SRC_URI[rust-std-snapshot-riscv64gc.sha256sum] = "0f5ecfe54859bbe715821f982b1a5396784fdf55605d00ece05d3e57a965ed16"
> -SRC_URI[cargo-snapshot-riscv64gc.sha256sum] = "c9f28b519799fc2d8089865e30fad04bb5339604d13725365fcd7ad7ee6c1489"
> -SRC_URI[clippy-snapshot-riscv64gc.sha256sum] = "9d21bc180196bccdb301e7e03034d3fd0df14b0c6520da0317bba7b1ce385fe8"
> +SRC_URI[rustc-snapshot-riscv64gc.sha256sum] = "4d1106b576221182f84412f3377a5148eab6950d20e45e4274cd8b58df46f26b"
> +SRC_URI[rust-std-snapshot-riscv64gc.sha256sum] = "b28b9c2f183521a204f2899610253c11c86ee4aa903fe66d8410dfaa22c926e6"
> +SRC_URI[cargo-snapshot-riscv64gc.sha256sum] = "7825556908e10a48320cfb2d812851271d7cf549977173e028a0dd23af9d7eac"
> +SRC_URI[clippy-snapshot-riscv64gc.sha256sum] = "c39c53a82fdaaa97413728a4f3f9feb5b31bdf3e3e563c64651bd01713e79166"
>   
> -SRC_URI[rustc-snapshot-s390x.sha256sum] = "308361737ed522aa77dd8b4ea91b5db244113ada5fa234d3ed008b526d07e2e8"
> -SRC_URI[rust-std-snapshot-s390x.sha256sum] = "d25053fbee1a0cb899bac8c8e4968aa35f9c3637e486cb5bb2c79ad43a78f3e7"
> -SRC_URI[cargo-snapshot-s390x.sha256sum] = "7e1defd60095c91ded1612194f811ec5f2fc2e83bb914d35594d01fa3c54049d"
> -SRC_URI[clippy-snapshot-s390x.sha256sum] = "9780d8c4cfef9d05460b3e540aad142391b2e3994accf8cfc8afb87fefac6cf0"
> +SRC_URI[rustc-snapshot-s390x.sha256sum] = "18caf22fbfc4d26c80b39b4c6b1cd5fb42dba3e32d5d3600c22eae6f688d7f4c"
> +SRC_URI[rust-std-snapshot-s390x.sha256sum] = "3919f6962d0aefdd2cd75d8dba749ed826936065b64c9a8d54d1d85c2685fd66"
> +SRC_URI[cargo-snapshot-s390x.sha256sum] = "1c6eb1be254574881a611a3b8904cdcfe43c79a285875673e59c890dcd5766c2"
> +SRC_URI[clippy-snapshot-s390x.sha256sum] = "c87183b52ddb4085ddf2524a775fd255d5fd11ad2fdd6424574f08750a8cf378"
>   
> -SRC_URI[rustc-snapshot-x86_64.sha256sum] = "7436f13797475082cd87aa65547449e01659d6a810b4cd5f8aedc48bb9f89dfb"
> -SRC_URI[rust-std-snapshot-x86_64.sha256sum] = "285e105d25ebdf501341238d4c0594ecdda50ec9078f45095f793a736b1f1ac2"
> -SRC_URI[cargo-snapshot-x86_64.sha256sum] = "0aff33b57b0e0b102d762a2b53042846c1ca346cff4b7bd96b5c03c9e8e51d81"
> -SRC_URI[clippy-snapshot-x86_64.sha256sum] = "0dc3ca1708a6c9eed05d0802364377572b79ff079815b7bcbe8e3991f77c4117"
> +SRC_URI[rustc-snapshot-x86_64.sha256sum] = "4438b809ce4a083af31ed17aeeedcc8fc60ccffc0625bef1926620751b6989d7"
> +SRC_URI[rust-std-snapshot-x86_64.sha256sum] = "67be7184ea388d8ce0feaf7fdea46f1775cfc2970930264343b3089898501d37"
> +SRC_URI[cargo-snapshot-x86_64.sha256sum] = "c5c1590f7e9246ad9f4f97cfe26ffa92707b52a769726596a9ef81565ebd908b"
> +SRC_URI[clippy-snapshot-x86_64.sha256sum] = "02aaff2c1407d2da8dba19aa4970dd873e311902b120a66cbcdbe51eb8836edf"
>   
> -SRC_URI[rust-std-snapshot-i586.sha256sum] = "3cb7318da10876de14076549d79410a8441923a92d62b616d8c105f5f5cd831b"
> +SRC_URI[rust-std-snapshot-i586.sha256sum] = "f0bddc6dba7d719b8ba131bcd634a8379e00fc825a51c0f17abf424c9cb5c052"
>   
> -SRC_URI[rust-std-snapshot-sparc64.sha256sum] = "65cd47af46a5b74e61ff6ae4cce8a979ee8670a57b8aa61e732828d1da073f73"
> +SRC_URI[rust-std-snapshot-sparc64.sha256sum] = "722238ae13e6e101d1b698d2b3a7915d59bb7f485b594e8d833cce8b9460383b"
>   
>   SRC_URI += " \
>       ${RUST_DIST_SERVER}/dist/${RUST_STD_SNAPSHOT}.tar.xz;name=rust-std-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
> diff --git a/meta/recipes-devtools/rust/rust-source.inc b/meta/recipes-devtools/rust/rust-source.inc
> index 30b159a84f..ed15d9c763 100644
> --- a/meta/recipes-devtools/rust/rust-source.inc
> +++ b/meta/recipes-devtools/rust/rust-source.inc
> @@ -9,8 +9,9 @@ SRC_URI +="https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;n 
> file://revert-link-std-statically-in-rustc_driver-feature.patch;patchdir=${RUSTSRC} 
> \ 
> file://0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch;patchdir=${RUSTSRC} 
> \ 
> file://0001-Disable-libunwind-cross-architecture-unwinding.patch;patchdir=${RUSTSRC} 
> \ + file://triagebot.patch;patchdir=${RUSTSRC} \ "
> -SRC_URI[rust.sha256sum] = "d939eada065dc827a9d4dbb55bd48533ad14c16e7f0a42e70147029c82a7707b"
> +SRC_URI[rust.sha256sum] = "8623b8651893e8c6aebfa45b6a90645a4f652f7b18189a0992a90d11ac2631f4"
>   
>   RUSTSRC = "${UNPACKDIR}/rustc-${RUST_VERSION}-src"
>   
> diff --git a/meta/recipes-devtools/rust/rust_1.86.0.bb b/meta/recipes-devtools/rust/rust_1.87.0.bb
> similarity index 99%
> rename from meta/recipes-devtools/rust/rust_1.86.0.bb
> rename to meta/recipes-devtools/rust/rust_1.87.0.bb
> index b13ec116be..5d804c7398 100644
> --- a/meta/recipes-devtools/rust/rust_1.86.0.bb
> +++ b/meta/recipes-devtools/rust/rust_1.87.0.bb
> @@ -266,7 +266,7 @@ rust_do_install:class-nativesdk() {
>   
>       install -d ${D}${bindir}
>       for i in cargo-clippy clippy-driver rustfmt; do
> -        cp build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
> +        cp build/${RUST_BUILD_SYS}/stage1-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
>           patchelf --set-rpath "\$ORIGIN/../lib" ${D}${bindir}/$i
>       done
>   
> @@ -301,7 +301,7 @@ rust_do_install:class-target() {
>   
>       install -d ${D}${bindir}
>       for i in ${EXTRA_TOOLS}; do
> -        cp build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
> +        cp build/${RUST_BUILD_SYS}/stage1-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
>           patchelf --set-rpath "\$ORIGIN/../lib" ${D}${bindir}/$i
>       done
>
Yash Shinde June 25, 2025, 10:28 a.m. UTC | #2
On 24-06-2025 22:17, Randy MacLeod wrote:
> On 2025-06-24 5:14 a.m., Yash.Shinde@windriver.com wrote:
>> From: Yash Shinde<Yash.Shinde@windriver.com>
>>
>> Rust stable version updated to 1.87.0.
>> https://blog.rust-lang.org/2025/05/15/Rust-1.87.0/
>>
>> * Update LLVM data-layout for arm64.
> Expand this section. Why are you doing this?
> How did you decide on this data-layout?
The do_compile task of the recipe informs about the new llvm data-layout:

error: data-layout for target `aarch64-poky-linux-gnu`, 
`e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32`,
differs from LLVM target's `aarch64-poky-linux-gnu` default layout, 
`e-m:e-p270:32:32-p2 
71:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32`

The aarch64 llvm data-layout was updated to to allow using 32-bit 
signed/unsigned pointers
when building 64-bit targets using 270, 271 and 272 address spaces.

https://github.com/rust-lang/rust/commit/e9853961452b56997cc127b51308879b9cd09482
https://github.com/llvm/llvm-project/commit/c9f27275c1330a325661bdf14fb3bc444a5e3648

>> * Rebase existing patches with v1.87.0.
>>
>> * Two tests from the `ui` and `codegen` modules now fail only on riscv64.
>>    Enable them on arm32/64 and x86-32/64 targets, while restricting
>>    them on riscv64 via `only-<target_arch>` tags.
> Nice! Can you mention the overall testsuite status briefly in the v2 
> commit log?
>> * Add triagebot.patch file to keep running tidy checks.
>
> Could you expand this sentence to explain what these checks do, please?
>
> Is this a new feature in 1.87.0? Ah, I read the patch and think you 
> should just
>
> include something like the first part of the patch in the commit log:
>
> +Skip tidy triagebot linkcheck if triagebot.toml doesn't exist
> +
> +Distribution tarballs won't include triagebot.toml, which
> +causes tidy checks to fail with the following error:
> +
> +   tidy error: triagebot.toml file not found
> +   some tidy checks failed
>
> but format it properly and mention that it's a backport.
>
>
Amended commit message in v2:
https://lists.openembedded.org/g/openembedded-core/message/219310
>
>> * During rust installation, some binaries were installed from
>>    'stage2-tools' built path to '${D}${bindir}'. However, from
>>    v1.87 the stage2-tools are no longer built by default.
>>    Update logic to install from `stage1-tools` instead.
>
> Okay. It would be nice to understand why but that's not essential, I 
> suppose.
>
>
> Generally, this is a good commit message, albeit a bit terse as 
> pointed out above.
>
>
> Can you also comment on the build time and FS footprint changes if any ?
>
The build time and filesystem usage remain similar to the previous version.


Regards,
Yash.
>
> I've looked through the changes below and I don't have any comments.
>
> ../Randy
>
>
>> Signed-off-by: Yash Shinde<Yash.Shinde@windriver.com>
>> ---
>>   .../classes-recipe/rust-target-config.bbclass |   2 +-
>>   meta/conf/distro/include/tcmode-default.inc   |   2 +-
>>   .../rust/{cargo_1.86.0.bb => cargo_1.87.0.bb} |   0
>>   ...teps-tool.rs-switch-off-lto-for-rust.patch |  30 ++--
>>   ...crease-timeout-in-process-sigpipe-ru.patch |   4 +-
>>   ...d-statically-in-rustc_driver-feature.patch |  11 +-
>>   .../rust/files/rust-oe-selftest.patch         | 147 ++++++++++--------
>>   .../rust/files/triagebot.patch                |  32 ++++
>>   ...ibstd-rs_1.86.0.bb => libstd-rs_1.87.0.bb} |   0
>>   ....86.0.bb => rust-cross-canadian_1.87.0.bb} |   0
>>   ...ust-llvm_1.86.0.bb => rust-llvm_1.87.0.bb} |   4 +-
>>   meta/recipes-devtools/rust/rust-snapshot.inc  |  78 +++++-----
>>   meta/recipes-devtools/rust/rust-source.inc    |   3 +-
>>   .../rust/{rust_1.86.0.bb => rust_1.87.0.bb}   |   4 +-
>>   14 files changed, 186 insertions(+), 131 deletions(-)
>>   rename meta/recipes-devtools/rust/{cargo_1.86.0.bb => cargo_1.87.0.bb} (100%)
>>   create mode 100644 meta/recipes-devtools/rust/files/triagebot.patch
>>   rename meta/recipes-devtools/rust/{libstd-rs_1.86.0.bb => libstd-rs_1.87.0.bb} (100%)
>>   rename meta/recipes-devtools/rust/{rust-cross-canadian_1.86.0.bb => rust-cross-canadian_1.87.0.bb} (100%)
>>   rename meta/recipes-devtools/rust/{rust-llvm_1.86.0.bb => rust-llvm_1.87.0.bb} (96%)
>>   rename meta/recipes-devtools/rust/{rust_1.86.0.bb => rust_1.87.0.bb} (99%)
>>
>> diff --git a/meta/classes-recipe/rust-target-config.bbclass b/meta/classes-recipe/rust-target-config.bbclass
>> index 906a5083d7..cac6e90a9e 100644
>> --- a/meta/classes-recipe/rust-target-config.bbclass
>> +++ b/meta/classes-recipe/rust-target-config.bbclass
>> @@ -171,7 +171,7 @@ MAX_ATOMIC_WIDTH[armv7-eabi] = "64"
>>   FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2"
>>   
>>   ## aarch64-unknown-linux-{gnu, musl}
>> -DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
>> +DATA_LAYOUT[aarch64] = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
>>   TARGET_ENDIAN[aarch64] = "little"
>>   TARGET_POINTER_WIDTH[aarch64] = "64"
>>   TARGET_C_INT_WIDTH[aarch64] = "32"
>> diff --git a/meta/conf/distro/include/tcmode-default.inc b/meta/conf/distro/include/tcmode-default.inc
>> index e943ca77d1..c506bb3ad5 100644
>> --- a/meta/conf/distro/include/tcmode-default.inc
>> +++ b/meta/conf/distro/include/tcmode-default.inc
>> @@ -12,7 +12,7 @@ PREFERRED_PROVIDER_virtual/gettext ??= "gettext"
>>   GCCVERSION ?= "15.%"
>>   SDKGCCVERSION ?= "${GCCVERSION}"
>>   GLIBCVERSION ?= "2.41%"
>> -RUSTVERSION ?= "1.86.0%"
>> +RUSTVERSION ?= "1.87.0%"
>>   
>>   PREFERRED_VERSION_gcc ?= "${GCCVERSION}"
>>   PREFERRED_VERSION_gcc-cross-${TARGET_ARCH} ?= "${GCCVERSION}"
>> diff --git a/meta/recipes-devtools/rust/cargo_1.86.0.bb b/meta/recipes-devtools/rust/cargo_1.87.0.bb
>> similarity index 100%
>> rename from meta/recipes-devtools/rust/cargo_1.86.0.bb
>> rename to meta/recipes-devtools/rust/cargo_1.87.0.bb
>> diff --git a/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch b/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch
>> index 5e0f5912a1..a7da69dce3 100644
>> --- a/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch
>> +++ b/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch
>> @@ -24,9 +24,9 @@ diff --git a/src/bootstrap/src/core/build_steps/tool.rs b/src/bootstrap/src/core
>>   index 087df2f8a..00790affb 100644
>>   --- a/src/bootstrap/src/core/build_steps/tool.rs
>>   +++ b/src/bootstrap/src/core/build_steps/tool.rs
>> -@@ -1,14 +1,11 @@
>> - use std::path::PathBuf;
>> - use std::{env, fs};
>> +@@ -15,14 +15,12 @@
>> + #[cfg(feature = "tracing")] + use tracing::instrument; -use 
>> crate::core::build_steps::compile::is_lto_stage; use 
>> crate::core::build_steps::toolstate::ToolState; @@ -36,18 +36,20 @@ 
>> index 087df2f8a..00790affb 100644 - Builder, Cargo as CargoCommand, 
>> RunConfig, ShouldRun, Step, cargo_profile_var, -}; -use 
>> crate::core::config::{DebuginfoLevel, RustcLto, TargetSelection}; ++ 
>> +use crate::core::builder::{Builder, Cargo as CargoCommand, 
>> RunConfig, ShouldRun, Step}; +use 
>> crate::core::config::{DebuginfoLevel, TargetSelection}; use 
>> crate::utils::channel::GitInfo; use 
>> crate::utils::exec::{BootstrapCommand, command}; use 
>> crate::utils::helpers::{add_dylib_path, exe, t}; -@@ -658,19 +655,7 
>> @@ - SourceType::InTree, - features.as_slice(), +@@ -148,20 +146,7 @@ 
>> + &self.extra_features, ); -- -- // rustdoc is performance sensitive, 
>> so apply LTO to it. -- if is_lto_stage(&build_compiler) { + +- if 
>> path.ends_with("/rustdoc") &&
>> +-            // rustdoc is performance sensitive, so apply LTO to it.
>> +-            is_lto_stage(&self.compiler)
>> +-        {
>>   -            let lto = match builder.config.rust_lto {
>>   -                RustcLto::Off => Some("off"),
>>   -                RustcLto::Thin => Some("thin"), @@ -60,14 +62,14 @@ index 087df2f8a..00790affb 100644 - } + 
>> cargo.rustflag("-Clto=off");
>>    
>> -         let _guard = builder.msg_tool(
>> -             Kind::Build,
>> +         if !self.allow_features.is_empty() {
>> +             cargo.allow_features(self.allow_features);
>>   diff --git a/src/bootstrap/src/core/builder/mod.rs b/src/bootstrap/src/core/builder/mod.rs
>>   --- a/src/bootstrap/src/core/builder/mod.rs
>>   +++ b/src/bootstrap/src/core/builder/mod.rs
>> -@@ -11,7 +11,7 @@
>> -
>> - use clap::ValueEnum;
>> +@@ -13,7 +13,7 @@
>> + #[cfg(feature = "tracing")]
>> + use tracing::instrument;
>>    
>>   -pub use self::cargo::{Cargo, cargo_profile_var};
>>   +pub use self::cargo::Cargo;
>> diff --git a/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch b/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
>> index bb27ca35ff..5bd1abffb4 100644
>> --- a/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
>> +++ b/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
>> @@ -22,10 +22,10 @@ index 11f363d62..c12d66016 100644
>>   +++ b/tests/ui/process/process-sigpipe.rs
>>   @@ -23,7 +23,7 @@ use std::thread;
>>    fn main() {
>> -     // Just in case `yes` doesn't check for EPIPE...
>> +     // Just in case `yes` or `while-echo` doesn't check for EPIPE...
>>        thread::spawn(|| {
>>   -        thread::sleep_ms(5000);
>>   +        thread::sleep_ms(50000);
>>            process::exit(1);
>>        });
>> -     let output = process::Command::new("sh")
>> +     // QNX Neutrino does not have `yes`. Therefore, use `while-echo` for `nto`
>> diff --git a/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch b/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch
>> index 20a49d46dc..9bbbce0182 100644
>> --- a/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch
>> +++ b/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch
>> @@ -200,11 +200,10 @@ diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/c
>>   index 27bbc8bd8f..a6fc4df2eb 100644
>>   --- a/src/bootstrap/src/core/build_steps/compile.rs
>>   +++ b/src/bootstrap/src/core/build_steps/compile.rs
>> -@@ -1940,24 +1940,8 @@ impl Step for Assemble {
>> -         let src_libdir = builder.sysroot_target_libdir(build_compiler, host);
>> +@@ -2158,23 +2158,7 @@
>>            for f in builder.read_dir(&src_libdir) {
>>                let filename = f.file_name().into_string().unwrap();
>> --
>> +
>>   -            let is_proc_macro = proc_macros.contains(&filename);
>>   -            let is_dylib_or_debug = is_dylib(&f.path()) || is_debug_info(&filename);
>>   -
>> @@ -214,8 +213,7 @@ index 27bbc8bd8f..a6fc4df2eb 100644
>>   -            let can_be_rustc_dynamic_dep = if builder
>>   -                .link_std_into_rustc_driver(target_compiler.host)
>>   -                && !target_compiler.host.is_windows()
>> -+            if (is_dylib(Path::new(&filename)) || is_debug_info(&filename)) && !proc_macros.contains(&filename)
>> -             {
>> +-            {
>>   -                let is_std = filename.starts_with("std-") || filename.starts_with("libstd-");
>>   -                !is_std
>>   -            } else {
>> @@ -223,6 +221,7 @@ index 27bbc8bd8f..a6fc4df2eb 100644
>>   -            };
>>   -
>>   -            if is_dylib_or_debug && can_be_rustc_dynamic_dep && !is_proc_macro {
>> -                 builder.copy_link(&f.path(), &rustc_libdir.join(&filename));
>> ++            if (is_dylib(Path::new(&filename)) || is_debug_info(&filename)) && !proc_macros.contains(&filename) {
>> +                 builder.copy_link(&f.path(), &rustc_libdir.join(&filename), FileType::Regular);
>>                }
>>            }
>> diff --git a/meta/recipes-devtools/rust/files/rust-oe-selftest.patch b/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
>> index 49d85072cb..b7ef806e65 100644
>> --- a/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
>> +++ b/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
>> @@ -47,61 +47,85 @@ diff --git a/library/std/tests/sync/rwlock.rs b/library/std/tests/sync/rwlock.rs
>>   index 1a9d3d3f12f..0a9cfc48806 100644
>>   --- a/library/std/tests/sync/rwlock.rs
>>   +++ b/library/std/tests/sync/rwlock.rs
>> -@@ -47,6 +47,7 @@ fn frob() {
>> - }
>> -
>> +@@ -74,6 +74,7 @@
>> +
>>    #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>>   +#[ignore]
>>    fn test_rw_arc_poison_wr() {
>>        let arc = Arc::new(RwLock::new(1));
>>        let arc2 = arc.clone();
>> -@@ -72,6 +73,7 @@ fn test_rw_arc_poison_mapped_w_r() {
>> - }
>> -
>> +@@ -87,6 +88,7 @@
>> +
>> + #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>> ++#[ignore]
>> + fn test_rw_arc_poison_mapped_w_r() {
>> +     let arc = Arc::new(RwLock::new(1));
>> +     let arc2 = arc.clone();
>> +@@ -101,6 +103,7 @@
>> +
>>    #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>>   +#[ignore]
>>    fn test_rw_arc_poison_ww() {
>>        let arc = Arc::new(RwLock::new(1));
>>        assert!(!arc.is_poisoned());
>> -@@ -100,6 +102,7 @@ fn test_rw_arc_poison_mapped_w_w() {
>> +@@ -115,6 +118,7 @@
>>    }
>> -
>> +
>> + #[test]
>> ++#[ignore]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>> + fn test_rw_arc_poison_mapped_w_w() {
>> +     let arc = Arc::new(RwLock::new(1));
>> +@@ -131,6 +135,7 @@
>> +
>>    #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>>   +#[ignore]
>>    fn test_rw_arc_no_poison_rr() {
>>        let arc = Arc::new(RwLock::new(1));
>>        let arc2 = arc.clone();
>> -@@ -127,6 +130,7 @@ fn test_rw_arc_no_poison_mapped_r_r() {
>> - }
>> -
>> +@@ -160,6 +165,7 @@
>> +
>>    #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>>   +#[ignore]
>>    fn test_rw_arc_no_poison_rw() {
>>        let arc = Arc::new(RwLock::new(1));
>>        let arc2 = arc.clone();
>> -@@ -192,6 +196,7 @@ fn test_rw_arc() {
>> - }
>> -
>> +@@ -227,6 +233,7 @@
>> +
>>    #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>>   +#[ignore]
>>    fn test_rw_arc_access_in_unwind() {
>>        let arc = Arc::new(RwLock::new(1));
>>        let arc2 = arc.clone();
>> -@@ -275,6 +280,7 @@ fn drop(&mut self) {
>> - }
>> -
>> +@@ -326,6 +333,7 @@
>> +
>>    #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>>   +#[ignore]
>>    fn test_into_inner_poison() {
>>        let m = new_poisoned_rwlock(NonCopy(10));
>> -
>> -@@ -299,6 +305,7 @@ fn test_get_mut() {
>> - }
>> -
>> +
>> +@@ -362,6 +370,7 @@
>> +
>>    #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>>   +#[ignore]
>>    fn test_get_mut_poison() {
>>        let mut m = new_poisoned_rwlock(NonCopy(10));
>> +
>> +@@ -567,6 +576,7 @@
>> +
>> + #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>> ++#[ignore]
>> + fn panic_while_mapping_write_unlocked_poison() {
>> +     let lock = RwLock::new(());
>>   
>>   diff --git a/library/test/src/tests.rs b/library/test/src/tests.rs
>>   --- a/library/test/src/tests.rs
>> @@ -117,52 +141,22 @@ diff --git a/library/test/src/tests.rs b/library/test/src/tests.rs
>>   diff --git a/library/std/tests/sync/mutex.rs b/library/std/tests/sync/mutex.rs
>>   --- a/library/std/tests/sync/mutex.rs
>>   +++ b/library/std/tests/sync/mutex.rs
>> -@@ -193,6 +193,7 @@
>> - }
>> -
>> +@@ -312,6 +312,7 @@
>> +
>>    #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>>   +#[ignore]
>>    fn test_mutex_arc_poison_mapped() {
>>        let arc = Arc::new(Mutex::new(1));
>>        assert!(!arc.is_poisoned());
>> -diff --git a/library/std/tests/sync/mutex.rs b/library/std/tests/sync/mutex.rs
>> ---- a/library/std/tests/sync/mutex.rs
>> -+++ b/library/std/tests/sync/mutex.rs
>> -@@ -272,6 +272,7 @@
>> - }
>> -
>> +@@ -391,6 +392,7 @@
>> +
>>    #[test]
>> + #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
>>   +#[ignore]
>>    fn panic_while_mapping_unlocked_poison() {
>>        let lock = Mutex::new(());
>>   
>> -diff --git a/library/std/src/sync/rwlock/tests.rs b/library/std/tests/sync/rwlock.rs
>> ---- a/library/std/tests/sync/rwlock.rs
>> -+++ b/library/std/tests/sync/rwlock.rs
>> -@@ -59,6 +59,7 @@ fn test_rw_arc_poison_wr() {
>> - }
>> -
>> - #[test]
>> -+#[ignore]
>> - fn test_rw_arc_poison_mapped_w_r() {
>> -     let arc = Arc::new(RwLock::new(1));
>> -     let arc2 = arc.clone();
>> -@@ -86,6 +87,7 @@ fn test_rw_arc_poison_ww() {
>> - }
>> -
>> - #[test]
>> -+#[ignore]
>> - fn test_rw_arc_poison_mapped_w_w() {
>> -     let arc = Arc::new(RwLock::new(1));
>> -     let arc2 = arc.clone();
>> -@@ -431,6 +433,7 @@ fn panic_while_mapping_read_unlocked_no_poison() {
>> - }
>> -
>> - #[test]
>> -+#[ignore]
>> - fn panic_while_mapping_write_unlocked_poison() {
>> -     let lock = RwLock::new(());
>> -
>>   diff --git a/library/coretests/benches/num/int_log/mod.rs b/library/coretests/benches/num/int_log/mod.rs
>>   index 3807cd5d76c..018c5c04456 100644
>>   --- a/library/coretests/benches/num/int_log/mod.rs
>> @@ -199,10 +193,10 @@ index 9d4f52a092..d425e5f7b7 100644
>>    fn thread_current_in_dtor() {
>>        // Go through one round of TLS destruction first.
>>        struct Defer;
>> -diff --git a/library/alloc/tests/sort/tests.rs b/library/alloc/tests/sort/tests.rs
>> +diff --git a/library/alloctests/tests/sort/tests.rs b/library/alloctests/tests/sort/tests.rs
>>   index 14e6013f96..b670f27ab4 100644
>> ---- a/library/alloc/tests/sort/tests.rs
>> -+++ b/library/alloc/tests/sort/tests.rs
>> +--- a/library/alloctests/tests/sort/tests.rs
>> ++++ b/library/alloctests/tests/sort/tests.rs
>>   @@ -915,12 +915,14 @@ gen_sort_test_fns_with_default_patterns_3_ty!(
>>    macro_rules! instantiate_sort_test_inner {
>>        ($sort_impl:ty, miri_yes, $test_fn_name:ident) => {
>> @@ -234,10 +228,10 @@ diff --git a/tests/assembly/dwarf-mixed-versions-lto.rs b/tests/assembly/dwarf-m
>>   index 5b8e5ff4f4a..e558fbd7bd7 100644
>>   --- a/tests/assembly/dwarf-mixed-versions-lto.rs
>>   +++ b/tests/assembly/dwarf-mixed-versions-lto.rs
>> -@@ -1,6 +1,11 @@
>> - // This test ensures that if LTO occurs between crates with different DWARF versions, we
>> +@@ -2,6 +2,11 @@
>>    // will choose the highest DWARF version for the final binary. This matches Clang's behavior.
>> -
>> + // Note: `.2byte` directive is used on MIPS.
>> +
>>   +//@ only-x86
>>   +//@ only-x86_64
>>   +//@ only-arm
>> @@ -259,3 +253,30 @@ index 0e712bc3a4e..93965d990d0 100644
>>    //@ revisions: OPT2 OPT3
>>    //@[OPT2] compile-flags: -Copt-level=2
>>    //@[OPT3] compile-flags: -C opt-level=3
>> +diff --git a/tests/codegen/uninhabited-transparent-return-abi.rs b/tests/codegen/uninhabited-transparent-return-abi.rs
>> +index face1577c3f..d69e5e34a7b 100644
>> +--- a/tests/codegen/uninhabited-transparent-return-abi.rs
>> ++++ b/tests/codegen/uninhabited-transparent-return-abi.rs
>> +@@ -1,4 +1,8 @@
>> + //@ compile-flags: -Copt-level=3
>> ++//@ only-x86
>> ++//@ only-x86_64
>> ++//@ only-arm
>> ++//@ only-aarch64
>> +
>> + // Seehttps://github.com/rust-lang/rust/issues/135802
>> +
>> +diff --git a/tests/ui/abi/rust-cold-works-with-rustic-args.rs b/tests/ui/abi/rust-cold-works-with-rustic-args.rs
>> +index 57027364699..3faa7ea035e 100644
>> +--- a/tests/ui/abi/rust-cold-works-with-rustic-args.rs
>> ++++ b/tests/ui/abi/rust-cold-works-with-rustic-args.rs
>> +@@ -1,5 +1,9 @@
>> + //@build-pass
>> + //@compile-flags: -Clink-dead-code=true --crate-type lib
>> ++//@ only-x86
>> ++//@ only-x86_64
>> ++//@ only-arm
>> ++//@ only-aarch64
>> + // We used to not handle all "rustic" ABIs in a (relatively) uniform way,
>> + // so we failed to fix up arguments for actually passing through the ABI...
>> + #![feature(rust_cold_cc)]
>> diff --git a/meta/recipes-devtools/rust/files/triagebot.patch b/meta/recipes-devtools/rust/files/triagebot.patch
>> new file mode 100644
>> index 0000000000..715664d081
>> --- /dev/null
>> +++ b/meta/recipes-devtools/rust/files/triagebot.patch
>> @@ -0,0 +1,32 @@
>> +Skip tidy triagebot linkcheck if triagebot.toml doesn't exist
>> +
>> +Distribution tarballs won't include triagebot.toml, which
>> +causes tidy checks to fail with the following error:
>> +
>> +   tidy error: triagebot.toml file not found
>> +   some tidy checks failed
>> +
>> +Drop the triagebot.toml check which is mostly to catch broken
>> +path filters *within* `triagebot.toml` and not enforce
>> +the existence of it.
>> +
>> +Upstream-Status: Backport [https://github.com/rust-lang/rust/pull/142666/commits]
>> +
>> +Signed-off-by: Yash Shinde<Yash.Shinde@windriver.com>
>> +---
>> +diff --git a/src/tools/tidy/src/triagebot.rs b/src/tools/tidy/src/triagebot.rs
>> +--- a/src/tools/tidy/src/triagebot.rs
>> ++++ b/src/tools/tidy/src/triagebot.rs
>> +@@ -6,8 +6,11 @@
>> +
>> + pub fn check(path: &Path, bad: &mut bool) {
>> +     let triagebot_path = path.join("triagebot.toml");
>> ++
>> ++    // This check is mostly to catch broken path filters *within* `triagebot.toml`, and not enforce
>> ++    // the existence of `triagebot.toml` itself (which is more obvious), as distribution tarballs
>> ++    // will not include non-essential bits like `triagebot.toml`.
>> +     if !triagebot_path.exists() {
>> +-        tidy_error!(bad, "triagebot.toml file not found");
>> +         return;
>> +     }
>> +
>> diff --git a/meta/recipes-devtools/rust/libstd-rs_1.86.0.bb b/meta/recipes-devtools/rust/libstd-rs_1.87.0.bb
>> similarity index 100%
>> rename from meta/recipes-devtools/rust/libstd-rs_1.86.0.bb
>> rename to meta/recipes-devtools/rust/libstd-rs_1.87.0.bb
>> diff --git a/meta/recipes-devtools/rust/rust-cross-canadian_1.86.0.bb b/meta/recipes-devtools/rust/rust-cross-canadian_1.87.0.bb
>> similarity index 100%
>> rename from meta/recipes-devtools/rust/rust-cross-canadian_1.86.0.bb
>> rename to meta/recipes-devtools/rust/rust-cross-canadian_1.87.0.bb
>> diff --git a/meta/recipes-devtools/rust/rust-llvm_1.86.0.bb b/meta/recipes-devtools/rust/rust-llvm_1.87.0.bb
>> similarity index 96%
>> rename from meta/recipes-devtools/rust/rust-llvm_1.86.0.bb
>> rename to meta/recipes-devtools/rust/rust-llvm_1.87.0.bb
>> index 327e8e6b69..d70aa350ab 100644
>> --- a/meta/recipes-devtools/rust/rust-llvm_1.86.0.bb
>> +++ b/meta/recipes-devtools/rust/rust-llvm_1.87.0.bb
>> @@ -2,9 +2,9 @@ SUMMARY = "LLVM compiler framework (packaged with rust)"
>>   LICENSE ?= "Apache-2.0-with-LLVM-exception"
>>   HOMEPAGE ="http://www.rust-lang.org"
>>   
>> -# check src/llvm-project/cmake/Modules/LLVMVersion.cmake for llvm version in use
>> +# check src/llvm-project/llvm/CMakeLists.txt for llvm version in use
>>   #
>> -LLVM_RELEASE = "19.1.7"
>> +LLVM_RELEASE = "20.1.1"
>>   
>>   require rust-source.inc
>>   
>> diff --git a/meta/recipes-devtools/rust/rust-snapshot.inc b/meta/recipes-devtools/rust/rust-snapshot.inc
>> index 445390fcaf..87b39a2cc2 100644
>> --- a/meta/recipes-devtools/rust/rust-snapshot.inc
>> +++ b/meta/recipes-devtools/rust/rust-snapshot.inc
>> @@ -4,56 +4,56 @@
>>   ## The exact (previous) version that has been used is specified in the source tarball.
>>   ## The version is replicated here.
>>   
>> -SNAPSHOT_VERSION = "1.85.0"
>> +SNAPSHOT_VERSION = "1.86.0"
>>   
>> -SRC_URI[rustc-snapshot-aarch64.sha256sum] = "e742b768f67303010b002b515f6613c639e69ffcc78cd0857d6fe7989e9880f6"
>> -SRC_URI[rust-std-snapshot-aarch64.sha256sum] = "8af1d793f7820e9ad0ee23247a9123542c3ea23f8857a018651c7788af9bc5b7"
>> -SRC_URI[cargo-snapshot-aarch64.sha256sum] = "cdebe48b066d512d664c13441e8fae2d0f67106c2080aa44289d98b24192b8bc"
>> -SRC_URI[clippy-snapshot-aarch64.sha256sum] = "f3b8e769021a6bcee8174ac49a60c367effb6d97af0f2a6c44dc9ea39ff2bda9"
>> +SRC_URI[rustc-snapshot-aarch64.sha256sum] = "ccece9e59546d2e6ff3fc3b8f4b033aab21631c271eefbe814b3cbace6628c6e"
>> +SRC_URI[rust-std-snapshot-aarch64.sha256sum] = "176129577a5d560bbd94bcd2d24c0228bb495b73219df02556b4e4b4f0815bf7"
>> +SRC_URI[cargo-snapshot-aarch64.sha256sum] = "37156542b702e8b4ffd1c5c75017632582343e93ca378285cdc92196c85c77e3"
>> +SRC_URI[clippy-snapshot-aarch64.sha256sum] = "e70edcf560e6b50861618d7045d2b38cae9e2a555f489062570e2e7041563f42"
>>   
>> -SRC_URI[rustc-snapshot-i686.sha256sum] = "c5a5751f3cfa027b53fee83d01dec8e555f3622b6993335aed12b1747aa9543c"
>> -SRC_URI[rust-std-snapshot-i686.sha256sum] = "401571adfe1223d83ed041e5a8c54c1f3afb3010d1d5b0c1fd79e7da1ab0a0de"
>> -SRC_URI[cargo-snapshot-i686.sha256sum] = "3832027242911ab96fd86128587fc563596a5b10e8e38a073facf61c1ac9668f"
>> -SRC_URI[clippy-snapshot-i686.sha256sum] = "74ed13a67c6ea0452c0d9e8697c6cfdd8280f983b207187ac93c287f72b65066"
>> +SRC_URI[rustc-snapshot-i686.sha256sum] = "976f4604d949d722738a9fe95313035226571128396e942b0fc678180be487b0"
>> +SRC_URI[rust-std-snapshot-i686.sha256sum] = "ce9f0fa4b0760730e26bf315cebe099f0b883436e095c5fc4b94ba20bd9f121a"
>> +SRC_URI[cargo-snapshot-i686.sha256sum] = "24f20bdc1bb14f4ffbdc2f540488bebc3340437418725c3162215ae03cdad480"
>> +SRC_URI[clippy-snapshot-i686.sha256sum] = "6788449fa0eceebe4ea8c797bbaf27495dad152087b3085d58dc05cacab0617a"
>>   
>> -SRC_URI[rustc-snapshot-loongarch64.sha256sum] = "d43d2119ff25d879b2d280d3e5a03fcd21c57a32d479ad5626500c32432f18c9"
>> -SRC_URI[rust-std-snapshot-loongarch64.sha256sum] = "2d05f5e13e7cb3ee6b0ca0dcd13a231a28eeb0faa4d15257a35cf7284149cd6a"
>> -SRC_URI[cargo-snapshot-loongarch64.sha256sum] = "9aa447eefcd3ba2f9dbab77596c8669849899ab243543fc8f1914089707081ac"
>> -SRC_URI[clippy-snapshot-loongarch64.sha256sum] = "d437b39465343a71ff475a65acb6c03bc0f800861f293f48accf1fa170458432"
>> +SRC_URI[rustc-snapshot-loongarch64.sha256sum] = "970089ad61f8ca82017b59444aee483c1fc005e3f7a6af63cd5f146df8287cce"
>> +SRC_URI[rust-std-snapshot-loongarch64.sha256sum] = "2f528377f57fbf81da35e2f08ec7ba50daddabebdce2cc86b6ec909fee157a33"
>> +SRC_URI[cargo-snapshot-loongarch64.sha256sum] = "c3b8ab03b64c824f2ea25db578b5760d44302be3fd1e4a78404c98cba39301f4"
>> +SRC_URI[clippy-snapshot-loongarch64.sha256sum] = "1ab711423497a1d02408a240da28ad366450574dd7f528ffaee80d1d5ed10550"
>>   
>> -SRC_URI[rustc-snapshot-powerpc.sha256sum] = "fbe7154abc641d6cacfdc6239ed4701fc7a09b5046c6d1bd209b59e7f2b2d0f0"
>> -SRC_URI[rust-std-snapshot-powerpc.sha256sum] = "ab2d5ac7cd295adaa4d959e8abbf42b372292c95d1a9f18aad64951ad6e2ab2b"
>> -SRC_URI[cargo-snapshot-powerpc.sha256sum] = "e67c30a72f969c51ad199084b3ce0cdc573a4e21f732b2cc39dafbcb9807a5ce"
>> -SRC_URI[clippy-snapshot-powerpc.sha256sum] = "497104d49803598cd3801749ac86cb26c88a2bd9c3a8c7bdc18fdf487f4650c0"
>> +SRC_URI[rustc-snapshot-powerpc.sha256sum] = "21ea61181ba7daa04f61bec6a295ad76ce34bfbd74ad1d679c4548977bd82eb9"
>> +SRC_URI[rust-std-snapshot-powerpc.sha256sum] = "e5ed58a861619bcc89fc3f969174c84fd6ed8a26b5d4b196f06efb868653c1c1"
>> +SRC_URI[cargo-snapshot-powerpc.sha256sum] = "fd832c269af81dd1ee9f3831991fccdc2c7312e9a9069908510eefe7c313d144"
>> +SRC_URI[clippy-snapshot-powerpc.sha256sum] = "c94578d31e4145a4169ab5761537a2a0133818278fb62ee76251ef8ef45228c8"
>>   
>> -SRC_URI[rustc-snapshot-powerpc64.sha256sum] = "f8e38291ba4241bc28e9c118d7a449ce3601abdeb2076f2f618858679fb3b929"
>> -SRC_URI[rust-std-snapshot-powerpc64.sha256sum] = "e9ff89e759125ad2786ad2f6c40e820095720ea00fba66819d15fba79489430a"
>> -SRC_URI[cargo-snapshot-powerpc64.sha256sum] = "73cf850f6715acbf0029c7e5d4694825f61bd4e193e6413e65a78bcb13df97b7"
>> -SRC_URI[clippy-snapshot-powerpc64.sha256sum] = "29b63f23cd9af95846a246c9cc8349e514c3fb92ec0c840a38155e252d6cc668"
>> +SRC_URI[rustc-snapshot-powerpc64.sha256sum] = "a54bbe16e6a405f137a0dc51fd570140c80077ba769d29d885a60e74cb3196bb"
>> +SRC_URI[rust-std-snapshot-powerpc64.sha256sum] = "06538b41a9351c449d215498d4ec2f072f728bd18df8fac7ef8534a0d0f34e27"
>> +SRC_URI[cargo-snapshot-powerpc64.sha256sum] = "4d398cd8da17d1a5f26734b39cb17e791b243ac3570f8da2e5e5580a9dfad578"
>> +SRC_URI[clippy-snapshot-powerpc64.sha256sum] = "0abf31a8cb2762a7a81dbee8a5798e43e11a83326711ce00ad16c5587bcf5e49"
>>   
>> -SRC_URI[rustc-snapshot-powerpc64le.sha256sum] = "371e40f9d6d82aecb056f70f82868d98ddc1c20510aa7d388442ac8d2d86a6ca"
>> -SRC_URI[rust-std-snapshot-powerpc64le.sha256sum] = "d0cfda4e18623d17922eb367e44ac9549ab3d5fe1c0bdbe0c2c95754255fa705"
>> -SRC_URI[cargo-snapshot-powerpc64le.sha256sum] = "e1469f4249a7e21f872af487dcd1bd10ce388b5b3679bdab0cb0965e1e30fe47"
>> -SRC_URI[clippy-snapshot-powerpc64le.sha256sum] = "d8c590bc2e6fc75800e41516427f5095ba0e15d7633167689499fcf6523dc61a"
>> +SRC_URI[rustc-snapshot-powerpc64le.sha256sum] = "7585a20b02b7dd497e393a2e7552a0c6aabb51556fcf7507c6f7ffde530f8c88"
>> +SRC_URI[rust-std-snapshot-powerpc64le.sha256sum] = "fcf940c0553a04cb9bd85cce524729c2f54b000b554fee95c7aa218d608b7e3d"
>> +SRC_URI[cargo-snapshot-powerpc64le.sha256sum] = "8fefd2317023716a018986c4a62558a7b543ccf34e4e6d1104afc66edcae1c9c"
>> +SRC_URI[clippy-snapshot-powerpc64le.sha256sum] = "8cc65649396ccad73cecd17b972ab8d4c34837136cf374425be63d697b541469"
>>   
>> -SRC_URI[rustc-snapshot-riscv64gc.sha256sum] = "2da33044f17a8bc49a1478dc1eb2536df491a44d6e6bb0ec7c86f46877d44e98"
>> -SRC_URI[rust-std-snapshot-riscv64gc.sha256sum] = "0f5ecfe54859bbe715821f982b1a5396784fdf55605d00ece05d3e57a965ed16"
>> -SRC_URI[cargo-snapshot-riscv64gc.sha256sum] = "c9f28b519799fc2d8089865e30fad04bb5339604d13725365fcd7ad7ee6c1489"
>> -SRC_URI[clippy-snapshot-riscv64gc.sha256sum] = "9d21bc180196bccdb301e7e03034d3fd0df14b0c6520da0317bba7b1ce385fe8"
>> +SRC_URI[rustc-snapshot-riscv64gc.sha256sum] = "4d1106b576221182f84412f3377a5148eab6950d20e45e4274cd8b58df46f26b"
>> +SRC_URI[rust-std-snapshot-riscv64gc.sha256sum] = "b28b9c2f183521a204f2899610253c11c86ee4aa903fe66d8410dfaa22c926e6"
>> +SRC_URI[cargo-snapshot-riscv64gc.sha256sum] = "7825556908e10a48320cfb2d812851271d7cf549977173e028a0dd23af9d7eac"
>> +SRC_URI[clippy-snapshot-riscv64gc.sha256sum] = "c39c53a82fdaaa97413728a4f3f9feb5b31bdf3e3e563c64651bd01713e79166"
>>   
>> -SRC_URI[rustc-snapshot-s390x.sha256sum] = "308361737ed522aa77dd8b4ea91b5db244113ada5fa234d3ed008b526d07e2e8"
>> -SRC_URI[rust-std-snapshot-s390x.sha256sum] = "d25053fbee1a0cb899bac8c8e4968aa35f9c3637e486cb5bb2c79ad43a78f3e7"
>> -SRC_URI[cargo-snapshot-s390x.sha256sum] = "7e1defd60095c91ded1612194f811ec5f2fc2e83bb914d35594d01fa3c54049d"
>> -SRC_URI[clippy-snapshot-s390x.sha256sum] = "9780d8c4cfef9d05460b3e540aad142391b2e3994accf8cfc8afb87fefac6cf0"
>> +SRC_URI[rustc-snapshot-s390x.sha256sum] = "18caf22fbfc4d26c80b39b4c6b1cd5fb42dba3e32d5d3600c22eae6f688d7f4c"
>> +SRC_URI[rust-std-snapshot-s390x.sha256sum] = "3919f6962d0aefdd2cd75d8dba749ed826936065b64c9a8d54d1d85c2685fd66"
>> +SRC_URI[cargo-snapshot-s390x.sha256sum] = "1c6eb1be254574881a611a3b8904cdcfe43c79a285875673e59c890dcd5766c2"
>> +SRC_URI[clippy-snapshot-s390x.sha256sum] = "c87183b52ddb4085ddf2524a775fd255d5fd11ad2fdd6424574f08750a8cf378"
>>   
>> -SRC_URI[rustc-snapshot-x86_64.sha256sum] = "7436f13797475082cd87aa65547449e01659d6a810b4cd5f8aedc48bb9f89dfb"
>> -SRC_URI[rust-std-snapshot-x86_64.sha256sum] = "285e105d25ebdf501341238d4c0594ecdda50ec9078f45095f793a736b1f1ac2"
>> -SRC_URI[cargo-snapshot-x86_64.sha256sum] = "0aff33b57b0e0b102d762a2b53042846c1ca346cff4b7bd96b5c03c9e8e51d81"
>> -SRC_URI[clippy-snapshot-x86_64.sha256sum] = "0dc3ca1708a6c9eed05d0802364377572b79ff079815b7bcbe8e3991f77c4117"
>> +SRC_URI[rustc-snapshot-x86_64.sha256sum] = "4438b809ce4a083af31ed17aeeedcc8fc60ccffc0625bef1926620751b6989d7"
>> +SRC_URI[rust-std-snapshot-x86_64.sha256sum] = "67be7184ea388d8ce0feaf7fdea46f1775cfc2970930264343b3089898501d37"
>> +SRC_URI[cargo-snapshot-x86_64.sha256sum] = "c5c1590f7e9246ad9f4f97cfe26ffa92707b52a769726596a9ef81565ebd908b"
>> +SRC_URI[clippy-snapshot-x86_64.sha256sum] = "02aaff2c1407d2da8dba19aa4970dd873e311902b120a66cbcdbe51eb8836edf"
>>   
>> -SRC_URI[rust-std-snapshot-i586.sha256sum] = "3cb7318da10876de14076549d79410a8441923a92d62b616d8c105f5f5cd831b"
>> +SRC_URI[rust-std-snapshot-i586.sha256sum] = "f0bddc6dba7d719b8ba131bcd634a8379e00fc825a51c0f17abf424c9cb5c052"
>>   
>> -SRC_URI[rust-std-snapshot-sparc64.sha256sum] = "65cd47af46a5b74e61ff6ae4cce8a979ee8670a57b8aa61e732828d1da073f73"
>> +SRC_URI[rust-std-snapshot-sparc64.sha256sum] = "722238ae13e6e101d1b698d2b3a7915d59bb7f485b594e8d833cce8b9460383b"
>>   
>>   SRC_URI += " \
>>       ${RUST_DIST_SERVER}/dist/${RUST_STD_SNAPSHOT}.tar.xz;name=rust-std-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
>> diff --git a/meta/recipes-devtools/rust/rust-source.inc b/meta/recipes-devtools/rust/rust-source.inc
>> index 30b159a84f..ed15d9c763 100644
>> --- a/meta/recipes-devtools/rust/rust-source.inc
>> +++ b/meta/recipes-devtools/rust/rust-source.inc
>> @@ -9,8 +9,9 @@ SRC_URI +="https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;n 
>> file://revert-link-std-statically-in-rustc_driver-feature.patch;patchdir=${RUSTSRC} 
>> \ 
>> file://0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch;patchdir=${RUSTSRC} 
>> \ 
>> file://0001-Disable-libunwind-cross-architecture-unwinding.patch;patchdir=${RUSTSRC} 
>> \ + file://triagebot.patch;patchdir=${RUSTSRC} \ "
>> -SRC_URI[rust.sha256sum] = "d939eada065dc827a9d4dbb55bd48533ad14c16e7f0a42e70147029c82a7707b"
>> +SRC_URI[rust.sha256sum] = "8623b8651893e8c6aebfa45b6a90645a4f652f7b18189a0992a90d11ac2631f4"
>>   
>>   RUSTSRC = "${UNPACKDIR}/rustc-${RUST_VERSION}-src"
>>   
>> diff --git a/meta/recipes-devtools/rust/rust_1.86.0.bb b/meta/recipes-devtools/rust/rust_1.87.0.bb
>> similarity index 99%
>> rename from meta/recipes-devtools/rust/rust_1.86.0.bb
>> rename to meta/recipes-devtools/rust/rust_1.87.0.bb
>> index b13ec116be..5d804c7398 100644
>> --- a/meta/recipes-devtools/rust/rust_1.86.0.bb
>> +++ b/meta/recipes-devtools/rust/rust_1.87.0.bb
>> @@ -266,7 +266,7 @@ rust_do_install:class-nativesdk() {
>>   
>>       install -d ${D}${bindir}
>>       for i in cargo-clippy clippy-driver rustfmt; do
>> -        cp build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
>> +        cp build/${RUST_BUILD_SYS}/stage1-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
>>           patchelf --set-rpath "\$ORIGIN/../lib" ${D}${bindir}/$i
>>       done
>>   
>> @@ -301,7 +301,7 @@ rust_do_install:class-target() {
>>   
>>       install -d ${D}${bindir}
>>       for i in ${EXTRA_TOOLS}; do
>> -        cp build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
>> +        cp build/${RUST_BUILD_SYS}/stage1-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
>>           patchelf --set-rpath "\$ORIGIN/../lib" ${D}${bindir}/$i
>>       done
>>   
>
>
> -- 
> # Randy MacLeod
> # Wind River Linux
diff mbox series

Patch

diff --git a/meta/classes-recipe/rust-target-config.bbclass b/meta/classes-recipe/rust-target-config.bbclass
index 906a5083d7..cac6e90a9e 100644
--- a/meta/classes-recipe/rust-target-config.bbclass
+++ b/meta/classes-recipe/rust-target-config.bbclass
@@ -171,7 +171,7 @@  MAX_ATOMIC_WIDTH[armv7-eabi] = "64"
 FEATURES[armv7-eabi] = "+v7,+vfp2,+thumb2"
 
 ## aarch64-unknown-linux-{gnu, musl}
-DATA_LAYOUT[aarch64] = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
+DATA_LAYOUT[aarch64] = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"
 TARGET_ENDIAN[aarch64] = "little"
 TARGET_POINTER_WIDTH[aarch64] = "64"
 TARGET_C_INT_WIDTH[aarch64] = "32"
diff --git a/meta/conf/distro/include/tcmode-default.inc b/meta/conf/distro/include/tcmode-default.inc
index e943ca77d1..c506bb3ad5 100644
--- a/meta/conf/distro/include/tcmode-default.inc
+++ b/meta/conf/distro/include/tcmode-default.inc
@@ -12,7 +12,7 @@  PREFERRED_PROVIDER_virtual/gettext ??= "gettext"
 GCCVERSION ?= "15.%"
 SDKGCCVERSION ?= "${GCCVERSION}"
 GLIBCVERSION ?= "2.41%"
-RUSTVERSION ?= "1.86.0%"
+RUSTVERSION ?= "1.87.0%"
 
 PREFERRED_VERSION_gcc ?= "${GCCVERSION}"
 PREFERRED_VERSION_gcc-cross-${TARGET_ARCH} ?= "${GCCVERSION}"
diff --git a/meta/recipes-devtools/rust/cargo_1.86.0.bb b/meta/recipes-devtools/rust/cargo_1.87.0.bb
similarity index 100%
rename from meta/recipes-devtools/rust/cargo_1.86.0.bb
rename to meta/recipes-devtools/rust/cargo_1.87.0.bb
diff --git a/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch b/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch
index 5e0f5912a1..a7da69dce3 100644
--- a/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch
+++ b/meta/recipes-devtools/rust/files/0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch
@@ -24,9 +24,9 @@  diff --git a/src/bootstrap/src/core/build_steps/tool.rs b/src/bootstrap/src/core
 index 087df2f8a..00790affb 100644
 --- a/src/bootstrap/src/core/build_steps/tool.rs
 +++ b/src/bootstrap/src/core/build_steps/tool.rs
-@@ -1,14 +1,11 @@
- use std::path::PathBuf;
- use std::{env, fs};
+@@ -15,14 +15,12 @@
+ #[cfg(feature = "tracing")]
+ use tracing::instrument;
  
 -use crate::core::build_steps::compile::is_lto_stage;
  use crate::core::build_steps::toolstate::ToolState;
@@ -36,18 +36,20 @@  index 087df2f8a..00790affb 100644
 -    Builder, Cargo as CargoCommand, RunConfig, ShouldRun, Step, cargo_profile_var,
 -};
 -use crate::core::config::{DebuginfoLevel, RustcLto, TargetSelection};
++
 +use crate::core::builder::{Builder, Cargo as CargoCommand, RunConfig, ShouldRun, Step};
 +use crate::core::config::{DebuginfoLevel, TargetSelection};
  use crate::utils::channel::GitInfo;
  use crate::utils::exec::{BootstrapCommand, command};
  use crate::utils::helpers::{add_dylib_path, exe, t};
-@@ -658,19 +655,7 @@
-             SourceType::InTree,
-             features.as_slice(),
+@@ -148,20 +146,7 @@
+             &self.extra_features,
          );
--
--        // rustdoc is performance sensitive, so apply LTO to it.
--        if is_lto_stage(&build_compiler) {
+ 
+-        if path.ends_with("/rustdoc") &&
+-            // rustdoc is performance sensitive, so apply LTO to it.
+-            is_lto_stage(&self.compiler)
+-        {
 -            let lto = match builder.config.rust_lto {
 -                RustcLto::Off => Some("off"),
 -                RustcLto::Thin => Some("thin"),
@@ -60,14 +62,14 @@  index 087df2f8a..00790affb 100644
 -        }
 +        cargo.rustflag("-Clto=off");
  
-         let _guard = builder.msg_tool(
-             Kind::Build,
+         if !self.allow_features.is_empty() {
+             cargo.allow_features(self.allow_features);
 diff --git a/src/bootstrap/src/core/builder/mod.rs b/src/bootstrap/src/core/builder/mod.rs
 --- a/src/bootstrap/src/core/builder/mod.rs
 +++ b/src/bootstrap/src/core/builder/mod.rs
-@@ -11,7 +11,7 @@
- 
- use clap::ValueEnum;
+@@ -13,7 +13,7 @@
+ #[cfg(feature = "tracing")]
+ use tracing::instrument;
  
 -pub use self::cargo::{Cargo, cargo_profile_var};
 +pub use self::cargo::Cargo;
diff --git a/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch b/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
index bb27ca35ff..5bd1abffb4 100644
--- a/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
+++ b/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
@@ -22,10 +22,10 @@  index 11f363d62..c12d66016 100644
 +++ b/tests/ui/process/process-sigpipe.rs
 @@ -23,7 +23,7 @@ use std::thread;
  fn main() {
-     // Just in case `yes` doesn't check for EPIPE...
+     // Just in case `yes` or `while-echo` doesn't check for EPIPE...
      thread::spawn(|| {
 -        thread::sleep_ms(5000);
 +        thread::sleep_ms(50000);
          process::exit(1);
      });
-     let output = process::Command::new("sh")
+     // QNX Neutrino does not have `yes`. Therefore, use `while-echo` for `nto`
diff --git a/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch b/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch
index 20a49d46dc..9bbbce0182 100644
--- a/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch
+++ b/meta/recipes-devtools/rust/files/revert-link-std-statically-in-rustc_driver-feature.patch
@@ -200,11 +200,10 @@  diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/c
 index 27bbc8bd8f..a6fc4df2eb 100644
 --- a/src/bootstrap/src/core/build_steps/compile.rs
 +++ b/src/bootstrap/src/core/build_steps/compile.rs
-@@ -1940,24 +1940,8 @@ impl Step for Assemble {
-         let src_libdir = builder.sysroot_target_libdir(build_compiler, host);
+@@ -2158,23 +2158,7 @@
          for f in builder.read_dir(&src_libdir) {
              let filename = f.file_name().into_string().unwrap();
--
+ 
 -            let is_proc_macro = proc_macros.contains(&filename);
 -            let is_dylib_or_debug = is_dylib(&f.path()) || is_debug_info(&filename);
 -
@@ -214,8 +213,7 @@  index 27bbc8bd8f..a6fc4df2eb 100644
 -            let can_be_rustc_dynamic_dep = if builder
 -                .link_std_into_rustc_driver(target_compiler.host)
 -                && !target_compiler.host.is_windows()
-+            if (is_dylib(Path::new(&filename)) || is_debug_info(&filename)) && !proc_macros.contains(&filename)
-             {
+-            {
 -                let is_std = filename.starts_with("std-") || filename.starts_with("libstd-");
 -                !is_std
 -            } else {
@@ -223,6 +221,7 @@  index 27bbc8bd8f..a6fc4df2eb 100644
 -            };
 -
 -            if is_dylib_or_debug && can_be_rustc_dynamic_dep && !is_proc_macro {
-                 builder.copy_link(&f.path(), &rustc_libdir.join(&filename));
++            if (is_dylib(Path::new(&filename)) || is_debug_info(&filename)) && !proc_macros.contains(&filename) {
+                 builder.copy_link(&f.path(), &rustc_libdir.join(&filename), FileType::Regular);
              }
          }
diff --git a/meta/recipes-devtools/rust/files/rust-oe-selftest.patch b/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
index 49d85072cb..b7ef806e65 100644
--- a/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
+++ b/meta/recipes-devtools/rust/files/rust-oe-selftest.patch
@@ -47,61 +47,85 @@  diff --git a/library/std/tests/sync/rwlock.rs b/library/std/tests/sync/rwlock.rs
 index 1a9d3d3f12f..0a9cfc48806 100644
 --- a/library/std/tests/sync/rwlock.rs
 +++ b/library/std/tests/sync/rwlock.rs
-@@ -47,6 +47,7 @@ fn frob() {
- }
-
+@@ -74,6 +74,7 @@
+ 
  #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
 +#[ignore]
  fn test_rw_arc_poison_wr() {
      let arc = Arc::new(RwLock::new(1));
      let arc2 = arc.clone();
-@@ -72,6 +73,7 @@ fn test_rw_arc_poison_mapped_w_r() {
- }
-
+@@ -87,6 +88,7 @@
+ 
+ #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
++#[ignore]
+ fn test_rw_arc_poison_mapped_w_r() {
+     let arc = Arc::new(RwLock::new(1));
+     let arc2 = arc.clone();
+@@ -101,6 +103,7 @@
+ 
  #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
 +#[ignore]
  fn test_rw_arc_poison_ww() {
      let arc = Arc::new(RwLock::new(1));
      assert!(!arc.is_poisoned());
-@@ -100,6 +102,7 @@ fn test_rw_arc_poison_mapped_w_w() {
+@@ -115,6 +118,7 @@
  }
-
+ 
+ #[test]
++#[ignore]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
+ fn test_rw_arc_poison_mapped_w_w() {
+     let arc = Arc::new(RwLock::new(1));
+@@ -131,6 +135,7 @@
+ 
  #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
 +#[ignore]
  fn test_rw_arc_no_poison_rr() {
      let arc = Arc::new(RwLock::new(1));
      let arc2 = arc.clone();
-@@ -127,6 +130,7 @@ fn test_rw_arc_no_poison_mapped_r_r() {
- }
-
+@@ -160,6 +165,7 @@
+ 
  #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
 +#[ignore]
  fn test_rw_arc_no_poison_rw() {
      let arc = Arc::new(RwLock::new(1));
      let arc2 = arc.clone();
-@@ -192,6 +196,7 @@ fn test_rw_arc() {
- }
-
+@@ -227,6 +233,7 @@
+ 
  #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
 +#[ignore]
  fn test_rw_arc_access_in_unwind() {
      let arc = Arc::new(RwLock::new(1));
      let arc2 = arc.clone();
-@@ -275,6 +280,7 @@ fn drop(&mut self) {
- }
-
+@@ -326,6 +333,7 @@
+ 
  #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
 +#[ignore]
  fn test_into_inner_poison() {
      let m = new_poisoned_rwlock(NonCopy(10));
-
-@@ -299,6 +305,7 @@ fn test_get_mut() {
- }
-
+ 
+@@ -362,6 +370,7 @@
+ 
  #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
 +#[ignore]
  fn test_get_mut_poison() {
      let mut m = new_poisoned_rwlock(NonCopy(10));
+ 
+@@ -567,6 +576,7 @@
+ 
+ #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
++#[ignore]
+ fn panic_while_mapping_write_unlocked_poison() {
+     let lock = RwLock::new(());
 
 diff --git a/library/test/src/tests.rs b/library/test/src/tests.rs
 --- a/library/test/src/tests.rs
@@ -117,52 +141,22 @@  diff --git a/library/test/src/tests.rs b/library/test/src/tests.rs
 diff --git a/library/std/tests/sync/mutex.rs b/library/std/tests/sync/mutex.rs
 --- a/library/std/tests/sync/mutex.rs
 +++ b/library/std/tests/sync/mutex.rs
-@@ -193,6 +193,7 @@
- }
-
+@@ -312,6 +312,7 @@
+ 
  #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
 +#[ignore]
  fn test_mutex_arc_poison_mapped() {
      let arc = Arc::new(Mutex::new(1));
      assert!(!arc.is_poisoned());
-diff --git a/library/std/tests/sync/mutex.rs b/library/std/tests/sync/mutex.rs
---- a/library/std/tests/sync/mutex.rs
-+++ b/library/std/tests/sync/mutex.rs
-@@ -272,6 +272,7 @@
- }
-
+@@ -391,6 +392,7 @@
+ 
  #[test]
+ #[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")]
 +#[ignore]
  fn panic_while_mapping_unlocked_poison() {
      let lock = Mutex::new(());
 
-diff --git a/library/std/src/sync/rwlock/tests.rs b/library/std/tests/sync/rwlock.rs
---- a/library/std/tests/sync/rwlock.rs
-+++ b/library/std/tests/sync/rwlock.rs
-@@ -59,6 +59,7 @@ fn test_rw_arc_poison_wr() {
- }
-
- #[test]
-+#[ignore]
- fn test_rw_arc_poison_mapped_w_r() {
-     let arc = Arc::new(RwLock::new(1));
-     let arc2 = arc.clone();
-@@ -86,6 +87,7 @@ fn test_rw_arc_poison_ww() {
- }
-
- #[test]
-+#[ignore]
- fn test_rw_arc_poison_mapped_w_w() {
-     let arc = Arc::new(RwLock::new(1));
-     let arc2 = arc.clone();
-@@ -431,6 +433,7 @@ fn panic_while_mapping_read_unlocked_no_poison() {
- }
-
- #[test]
-+#[ignore]
- fn panic_while_mapping_write_unlocked_poison() {
-     let lock = RwLock::new(());
-
 diff --git a/library/coretests/benches/num/int_log/mod.rs b/library/coretests/benches/num/int_log/mod.rs
 index 3807cd5d76c..018c5c04456 100644
 --- a/library/coretests/benches/num/int_log/mod.rs
@@ -199,10 +193,10 @@  index 9d4f52a092..d425e5f7b7 100644
  fn thread_current_in_dtor() {
      // Go through one round of TLS destruction first.
      struct Defer;
-diff --git a/library/alloc/tests/sort/tests.rs b/library/alloc/tests/sort/tests.rs
+diff --git a/library/alloctests/tests/sort/tests.rs b/library/alloctests/tests/sort/tests.rs
 index 14e6013f96..b670f27ab4 100644
---- a/library/alloc/tests/sort/tests.rs
-+++ b/library/alloc/tests/sort/tests.rs
+--- a/library/alloctests/tests/sort/tests.rs
++++ b/library/alloctests/tests/sort/tests.rs
 @@ -915,12 +915,14 @@ gen_sort_test_fns_with_default_patterns_3_ty!(
  macro_rules! instantiate_sort_test_inner {
      ($sort_impl:ty, miri_yes, $test_fn_name:ident) => {
@@ -234,10 +228,10 @@  diff --git a/tests/assembly/dwarf-mixed-versions-lto.rs b/tests/assembly/dwarf-m
 index 5b8e5ff4f4a..e558fbd7bd7 100644
 --- a/tests/assembly/dwarf-mixed-versions-lto.rs
 +++ b/tests/assembly/dwarf-mixed-versions-lto.rs
-@@ -1,6 +1,11 @@
- // This test ensures that if LTO occurs between crates with different DWARF versions, we
+@@ -2,6 +2,11 @@
  // will choose the highest DWARF version for the final binary. This matches Clang's behavior.
-
+ // Note: `.2byte` directive is used on MIPS.
+ 
 +//@ only-x86
 +//@ only-x86_64
 +//@ only-arm
@@ -259,3 +253,30 @@  index 0e712bc3a4e..93965d990d0 100644
  //@ revisions: OPT2 OPT3
  //@[OPT2] compile-flags: -Copt-level=2
  //@[OPT3] compile-flags: -C opt-level=3
+diff --git a/tests/codegen/uninhabited-transparent-return-abi.rs b/tests/codegen/uninhabited-transparent-return-abi.rs
+index face1577c3f..d69e5e34a7b 100644
+--- a/tests/codegen/uninhabited-transparent-return-abi.rs
++++ b/tests/codegen/uninhabited-transparent-return-abi.rs
+@@ -1,4 +1,8 @@
+ //@ compile-flags: -Copt-level=3
++//@ only-x86
++//@ only-x86_64
++//@ only-arm
++//@ only-aarch64
+ 
+ // See https://github.com/rust-lang/rust/issues/135802
+
+diff --git a/tests/ui/abi/rust-cold-works-with-rustic-args.rs b/tests/ui/abi/rust-cold-works-with-rustic-args.rs
+index 57027364699..3faa7ea035e 100644
+--- a/tests/ui/abi/rust-cold-works-with-rustic-args.rs
++++ b/tests/ui/abi/rust-cold-works-with-rustic-args.rs
+@@ -1,5 +1,9 @@
+ //@build-pass
+ //@compile-flags: -Clink-dead-code=true --crate-type lib
++//@ only-x86
++//@ only-x86_64
++//@ only-arm
++//@ only-aarch64
+ // We used to not handle all "rustic" ABIs in a (relatively) uniform way,
+ // so we failed to fix up arguments for actually passing through the ABI...
+ #![feature(rust_cold_cc)]
diff --git a/meta/recipes-devtools/rust/files/triagebot.patch b/meta/recipes-devtools/rust/files/triagebot.patch
new file mode 100644
index 0000000000..715664d081
--- /dev/null
+++ b/meta/recipes-devtools/rust/files/triagebot.patch
@@ -0,0 +1,32 @@ 
+Skip tidy triagebot linkcheck if triagebot.toml doesn't exist
+
+Distribution tarballs won't include triagebot.toml, which
+causes tidy checks to fail with the following error:
+
+   tidy error: triagebot.toml file not found
+   some tidy checks failed
+
+Drop the triagebot.toml check which is mostly to catch broken
+path filters *within* `triagebot.toml` and not enforce
+the existence of it.
+
+Upstream-Status: Backport [https://github.com/rust-lang/rust/pull/142666/commits]
+
+Signed-off-by: Yash Shinde <Yash.Shinde@windriver.com>
+---
+diff --git a/src/tools/tidy/src/triagebot.rs b/src/tools/tidy/src/triagebot.rs
+--- a/src/tools/tidy/src/triagebot.rs
++++ b/src/tools/tidy/src/triagebot.rs
+@@ -6,8 +6,11 @@
+ 
+ pub fn check(path: &Path, bad: &mut bool) {
+     let triagebot_path = path.join("triagebot.toml");
++
++    // This check is mostly to catch broken path filters *within* `triagebot.toml`, and not enforce
++    // the existence of `triagebot.toml` itself (which is more obvious), as distribution tarballs
++    // will not include non-essential bits like `triagebot.toml`.
+     if !triagebot_path.exists() {
+-        tidy_error!(bad, "triagebot.toml file not found");
+         return;
+     }
+
diff --git a/meta/recipes-devtools/rust/libstd-rs_1.86.0.bb b/meta/recipes-devtools/rust/libstd-rs_1.87.0.bb
similarity index 100%
rename from meta/recipes-devtools/rust/libstd-rs_1.86.0.bb
rename to meta/recipes-devtools/rust/libstd-rs_1.87.0.bb
diff --git a/meta/recipes-devtools/rust/rust-cross-canadian_1.86.0.bb b/meta/recipes-devtools/rust/rust-cross-canadian_1.87.0.bb
similarity index 100%
rename from meta/recipes-devtools/rust/rust-cross-canadian_1.86.0.bb
rename to meta/recipes-devtools/rust/rust-cross-canadian_1.87.0.bb
diff --git a/meta/recipes-devtools/rust/rust-llvm_1.86.0.bb b/meta/recipes-devtools/rust/rust-llvm_1.87.0.bb
similarity index 96%
rename from meta/recipes-devtools/rust/rust-llvm_1.86.0.bb
rename to meta/recipes-devtools/rust/rust-llvm_1.87.0.bb
index 327e8e6b69..d70aa350ab 100644
--- a/meta/recipes-devtools/rust/rust-llvm_1.86.0.bb
+++ b/meta/recipes-devtools/rust/rust-llvm_1.87.0.bb
@@ -2,9 +2,9 @@  SUMMARY = "LLVM compiler framework (packaged with rust)"
 LICENSE ?= "Apache-2.0-with-LLVM-exception"
 HOMEPAGE = "http://www.rust-lang.org"
 
-# check src/llvm-project/cmake/Modules/LLVMVersion.cmake for llvm version in use
+# check src/llvm-project/llvm/CMakeLists.txt for llvm version in use
 #
-LLVM_RELEASE = "19.1.7"
+LLVM_RELEASE = "20.1.1"
 
 require rust-source.inc
 
diff --git a/meta/recipes-devtools/rust/rust-snapshot.inc b/meta/recipes-devtools/rust/rust-snapshot.inc
index 445390fcaf..87b39a2cc2 100644
--- a/meta/recipes-devtools/rust/rust-snapshot.inc
+++ b/meta/recipes-devtools/rust/rust-snapshot.inc
@@ -4,56 +4,56 @@ 
 ## The exact (previous) version that has been used is specified in the source tarball.
 ## The version is replicated here.
 
-SNAPSHOT_VERSION = "1.85.0"
+SNAPSHOT_VERSION = "1.86.0"
 
-SRC_URI[rustc-snapshot-aarch64.sha256sum] = "e742b768f67303010b002b515f6613c639e69ffcc78cd0857d6fe7989e9880f6"
-SRC_URI[rust-std-snapshot-aarch64.sha256sum] = "8af1d793f7820e9ad0ee23247a9123542c3ea23f8857a018651c7788af9bc5b7"
-SRC_URI[cargo-snapshot-aarch64.sha256sum] = "cdebe48b066d512d664c13441e8fae2d0f67106c2080aa44289d98b24192b8bc"
-SRC_URI[clippy-snapshot-aarch64.sha256sum] = "f3b8e769021a6bcee8174ac49a60c367effb6d97af0f2a6c44dc9ea39ff2bda9"
+SRC_URI[rustc-snapshot-aarch64.sha256sum] = "ccece9e59546d2e6ff3fc3b8f4b033aab21631c271eefbe814b3cbace6628c6e"
+SRC_URI[rust-std-snapshot-aarch64.sha256sum] = "176129577a5d560bbd94bcd2d24c0228bb495b73219df02556b4e4b4f0815bf7"
+SRC_URI[cargo-snapshot-aarch64.sha256sum] = "37156542b702e8b4ffd1c5c75017632582343e93ca378285cdc92196c85c77e3"
+SRC_URI[clippy-snapshot-aarch64.sha256sum] = "e70edcf560e6b50861618d7045d2b38cae9e2a555f489062570e2e7041563f42"
 
-SRC_URI[rustc-snapshot-i686.sha256sum] = "c5a5751f3cfa027b53fee83d01dec8e555f3622b6993335aed12b1747aa9543c"
-SRC_URI[rust-std-snapshot-i686.sha256sum] = "401571adfe1223d83ed041e5a8c54c1f3afb3010d1d5b0c1fd79e7da1ab0a0de"
-SRC_URI[cargo-snapshot-i686.sha256sum] = "3832027242911ab96fd86128587fc563596a5b10e8e38a073facf61c1ac9668f"
-SRC_URI[clippy-snapshot-i686.sha256sum] = "74ed13a67c6ea0452c0d9e8697c6cfdd8280f983b207187ac93c287f72b65066"
+SRC_URI[rustc-snapshot-i686.sha256sum] = "976f4604d949d722738a9fe95313035226571128396e942b0fc678180be487b0"
+SRC_URI[rust-std-snapshot-i686.sha256sum] = "ce9f0fa4b0760730e26bf315cebe099f0b883436e095c5fc4b94ba20bd9f121a"
+SRC_URI[cargo-snapshot-i686.sha256sum] = "24f20bdc1bb14f4ffbdc2f540488bebc3340437418725c3162215ae03cdad480"
+SRC_URI[clippy-snapshot-i686.sha256sum] = "6788449fa0eceebe4ea8c797bbaf27495dad152087b3085d58dc05cacab0617a"
 
-SRC_URI[rustc-snapshot-loongarch64.sha256sum] = "d43d2119ff25d879b2d280d3e5a03fcd21c57a32d479ad5626500c32432f18c9"
-SRC_URI[rust-std-snapshot-loongarch64.sha256sum] = "2d05f5e13e7cb3ee6b0ca0dcd13a231a28eeb0faa4d15257a35cf7284149cd6a"
-SRC_URI[cargo-snapshot-loongarch64.sha256sum] = "9aa447eefcd3ba2f9dbab77596c8669849899ab243543fc8f1914089707081ac"
-SRC_URI[clippy-snapshot-loongarch64.sha256sum] = "d437b39465343a71ff475a65acb6c03bc0f800861f293f48accf1fa170458432"
+SRC_URI[rustc-snapshot-loongarch64.sha256sum] = "970089ad61f8ca82017b59444aee483c1fc005e3f7a6af63cd5f146df8287cce"
+SRC_URI[rust-std-snapshot-loongarch64.sha256sum] = "2f528377f57fbf81da35e2f08ec7ba50daddabebdce2cc86b6ec909fee157a33"
+SRC_URI[cargo-snapshot-loongarch64.sha256sum] = "c3b8ab03b64c824f2ea25db578b5760d44302be3fd1e4a78404c98cba39301f4"
+SRC_URI[clippy-snapshot-loongarch64.sha256sum] = "1ab711423497a1d02408a240da28ad366450574dd7f528ffaee80d1d5ed10550"
 
-SRC_URI[rustc-snapshot-powerpc.sha256sum] = "fbe7154abc641d6cacfdc6239ed4701fc7a09b5046c6d1bd209b59e7f2b2d0f0"
-SRC_URI[rust-std-snapshot-powerpc.sha256sum] = "ab2d5ac7cd295adaa4d959e8abbf42b372292c95d1a9f18aad64951ad6e2ab2b"
-SRC_URI[cargo-snapshot-powerpc.sha256sum] = "e67c30a72f969c51ad199084b3ce0cdc573a4e21f732b2cc39dafbcb9807a5ce"
-SRC_URI[clippy-snapshot-powerpc.sha256sum] = "497104d49803598cd3801749ac86cb26c88a2bd9c3a8c7bdc18fdf487f4650c0"
+SRC_URI[rustc-snapshot-powerpc.sha256sum] = "21ea61181ba7daa04f61bec6a295ad76ce34bfbd74ad1d679c4548977bd82eb9"
+SRC_URI[rust-std-snapshot-powerpc.sha256sum] = "e5ed58a861619bcc89fc3f969174c84fd6ed8a26b5d4b196f06efb868653c1c1"
+SRC_URI[cargo-snapshot-powerpc.sha256sum] = "fd832c269af81dd1ee9f3831991fccdc2c7312e9a9069908510eefe7c313d144"
+SRC_URI[clippy-snapshot-powerpc.sha256sum] = "c94578d31e4145a4169ab5761537a2a0133818278fb62ee76251ef8ef45228c8"
 
-SRC_URI[rustc-snapshot-powerpc64.sha256sum] = "f8e38291ba4241bc28e9c118d7a449ce3601abdeb2076f2f618858679fb3b929"
-SRC_URI[rust-std-snapshot-powerpc64.sha256sum] = "e9ff89e759125ad2786ad2f6c40e820095720ea00fba66819d15fba79489430a"
-SRC_URI[cargo-snapshot-powerpc64.sha256sum] = "73cf850f6715acbf0029c7e5d4694825f61bd4e193e6413e65a78bcb13df97b7"
-SRC_URI[clippy-snapshot-powerpc64.sha256sum] = "29b63f23cd9af95846a246c9cc8349e514c3fb92ec0c840a38155e252d6cc668"
+SRC_URI[rustc-snapshot-powerpc64.sha256sum] = "a54bbe16e6a405f137a0dc51fd570140c80077ba769d29d885a60e74cb3196bb"
+SRC_URI[rust-std-snapshot-powerpc64.sha256sum] = "06538b41a9351c449d215498d4ec2f072f728bd18df8fac7ef8534a0d0f34e27"
+SRC_URI[cargo-snapshot-powerpc64.sha256sum] = "4d398cd8da17d1a5f26734b39cb17e791b243ac3570f8da2e5e5580a9dfad578"
+SRC_URI[clippy-snapshot-powerpc64.sha256sum] = "0abf31a8cb2762a7a81dbee8a5798e43e11a83326711ce00ad16c5587bcf5e49"
 
-SRC_URI[rustc-snapshot-powerpc64le.sha256sum] = "371e40f9d6d82aecb056f70f82868d98ddc1c20510aa7d388442ac8d2d86a6ca"
-SRC_URI[rust-std-snapshot-powerpc64le.sha256sum] = "d0cfda4e18623d17922eb367e44ac9549ab3d5fe1c0bdbe0c2c95754255fa705"
-SRC_URI[cargo-snapshot-powerpc64le.sha256sum] = "e1469f4249a7e21f872af487dcd1bd10ce388b5b3679bdab0cb0965e1e30fe47"
-SRC_URI[clippy-snapshot-powerpc64le.sha256sum] = "d8c590bc2e6fc75800e41516427f5095ba0e15d7633167689499fcf6523dc61a"
+SRC_URI[rustc-snapshot-powerpc64le.sha256sum] = "7585a20b02b7dd497e393a2e7552a0c6aabb51556fcf7507c6f7ffde530f8c88"
+SRC_URI[rust-std-snapshot-powerpc64le.sha256sum] = "fcf940c0553a04cb9bd85cce524729c2f54b000b554fee95c7aa218d608b7e3d"
+SRC_URI[cargo-snapshot-powerpc64le.sha256sum] = "8fefd2317023716a018986c4a62558a7b543ccf34e4e6d1104afc66edcae1c9c"
+SRC_URI[clippy-snapshot-powerpc64le.sha256sum] = "8cc65649396ccad73cecd17b972ab8d4c34837136cf374425be63d697b541469"
 
-SRC_URI[rustc-snapshot-riscv64gc.sha256sum] = "2da33044f17a8bc49a1478dc1eb2536df491a44d6e6bb0ec7c86f46877d44e98"
-SRC_URI[rust-std-snapshot-riscv64gc.sha256sum] = "0f5ecfe54859bbe715821f982b1a5396784fdf55605d00ece05d3e57a965ed16"
-SRC_URI[cargo-snapshot-riscv64gc.sha256sum] = "c9f28b519799fc2d8089865e30fad04bb5339604d13725365fcd7ad7ee6c1489"
-SRC_URI[clippy-snapshot-riscv64gc.sha256sum] = "9d21bc180196bccdb301e7e03034d3fd0df14b0c6520da0317bba7b1ce385fe8"
+SRC_URI[rustc-snapshot-riscv64gc.sha256sum] = "4d1106b576221182f84412f3377a5148eab6950d20e45e4274cd8b58df46f26b"
+SRC_URI[rust-std-snapshot-riscv64gc.sha256sum] = "b28b9c2f183521a204f2899610253c11c86ee4aa903fe66d8410dfaa22c926e6"
+SRC_URI[cargo-snapshot-riscv64gc.sha256sum] = "7825556908e10a48320cfb2d812851271d7cf549977173e028a0dd23af9d7eac"
+SRC_URI[clippy-snapshot-riscv64gc.sha256sum] = "c39c53a82fdaaa97413728a4f3f9feb5b31bdf3e3e563c64651bd01713e79166"
 
-SRC_URI[rustc-snapshot-s390x.sha256sum] = "308361737ed522aa77dd8b4ea91b5db244113ada5fa234d3ed008b526d07e2e8"
-SRC_URI[rust-std-snapshot-s390x.sha256sum] = "d25053fbee1a0cb899bac8c8e4968aa35f9c3637e486cb5bb2c79ad43a78f3e7"
-SRC_URI[cargo-snapshot-s390x.sha256sum] = "7e1defd60095c91ded1612194f811ec5f2fc2e83bb914d35594d01fa3c54049d"
-SRC_URI[clippy-snapshot-s390x.sha256sum] = "9780d8c4cfef9d05460b3e540aad142391b2e3994accf8cfc8afb87fefac6cf0"
+SRC_URI[rustc-snapshot-s390x.sha256sum] = "18caf22fbfc4d26c80b39b4c6b1cd5fb42dba3e32d5d3600c22eae6f688d7f4c"
+SRC_URI[rust-std-snapshot-s390x.sha256sum] = "3919f6962d0aefdd2cd75d8dba749ed826936065b64c9a8d54d1d85c2685fd66"
+SRC_URI[cargo-snapshot-s390x.sha256sum] = "1c6eb1be254574881a611a3b8904cdcfe43c79a285875673e59c890dcd5766c2"
+SRC_URI[clippy-snapshot-s390x.sha256sum] = "c87183b52ddb4085ddf2524a775fd255d5fd11ad2fdd6424574f08750a8cf378"
 
-SRC_URI[rustc-snapshot-x86_64.sha256sum] = "7436f13797475082cd87aa65547449e01659d6a810b4cd5f8aedc48bb9f89dfb"
-SRC_URI[rust-std-snapshot-x86_64.sha256sum] = "285e105d25ebdf501341238d4c0594ecdda50ec9078f45095f793a736b1f1ac2"
-SRC_URI[cargo-snapshot-x86_64.sha256sum] = "0aff33b57b0e0b102d762a2b53042846c1ca346cff4b7bd96b5c03c9e8e51d81"
-SRC_URI[clippy-snapshot-x86_64.sha256sum] = "0dc3ca1708a6c9eed05d0802364377572b79ff079815b7bcbe8e3991f77c4117"
+SRC_URI[rustc-snapshot-x86_64.sha256sum] = "4438b809ce4a083af31ed17aeeedcc8fc60ccffc0625bef1926620751b6989d7"
+SRC_URI[rust-std-snapshot-x86_64.sha256sum] = "67be7184ea388d8ce0feaf7fdea46f1775cfc2970930264343b3089898501d37"
+SRC_URI[cargo-snapshot-x86_64.sha256sum] = "c5c1590f7e9246ad9f4f97cfe26ffa92707b52a769726596a9ef81565ebd908b"
+SRC_URI[clippy-snapshot-x86_64.sha256sum] = "02aaff2c1407d2da8dba19aa4970dd873e311902b120a66cbcdbe51eb8836edf"
 
-SRC_URI[rust-std-snapshot-i586.sha256sum] = "3cb7318da10876de14076549d79410a8441923a92d62b616d8c105f5f5cd831b"
+SRC_URI[rust-std-snapshot-i586.sha256sum] = "f0bddc6dba7d719b8ba131bcd634a8379e00fc825a51c0f17abf424c9cb5c052"
 
-SRC_URI[rust-std-snapshot-sparc64.sha256sum] = "65cd47af46a5b74e61ff6ae4cce8a979ee8670a57b8aa61e732828d1da073f73"
+SRC_URI[rust-std-snapshot-sparc64.sha256sum] = "722238ae13e6e101d1b698d2b3a7915d59bb7f485b594e8d833cce8b9460383b"
 
 SRC_URI += " \
     ${RUST_DIST_SERVER}/dist/${RUST_STD_SNAPSHOT}.tar.xz;name=rust-std-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \
diff --git a/meta/recipes-devtools/rust/rust-source.inc b/meta/recipes-devtools/rust/rust-source.inc
index 30b159a84f..ed15d9c763 100644
--- a/meta/recipes-devtools/rust/rust-source.inc
+++ b/meta/recipes-devtools/rust/rust-source.inc
@@ -9,8 +9,9 @@  SRC_URI += "https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;n
             file://revert-link-std-statically-in-rustc_driver-feature.patch;patchdir=${RUSTSRC} \
             file://0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch;patchdir=${RUSTSRC} \
             file://0001-Disable-libunwind-cross-architecture-unwinding.patch;patchdir=${RUSTSRC} \
+            file://triagebot.patch;patchdir=${RUSTSRC} \
 "
-SRC_URI[rust.sha256sum] = "d939eada065dc827a9d4dbb55bd48533ad14c16e7f0a42e70147029c82a7707b"
+SRC_URI[rust.sha256sum] = "8623b8651893e8c6aebfa45b6a90645a4f652f7b18189a0992a90d11ac2631f4"
 
 RUSTSRC = "${UNPACKDIR}/rustc-${RUST_VERSION}-src"
 
diff --git a/meta/recipes-devtools/rust/rust_1.86.0.bb b/meta/recipes-devtools/rust/rust_1.87.0.bb
similarity index 99%
rename from meta/recipes-devtools/rust/rust_1.86.0.bb
rename to meta/recipes-devtools/rust/rust_1.87.0.bb
index b13ec116be..5d804c7398 100644
--- a/meta/recipes-devtools/rust/rust_1.86.0.bb
+++ b/meta/recipes-devtools/rust/rust_1.87.0.bb
@@ -266,7 +266,7 @@  rust_do_install:class-nativesdk() {
 
     install -d ${D}${bindir}
     for i in cargo-clippy clippy-driver rustfmt; do
-        cp build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
+        cp build/${RUST_BUILD_SYS}/stage1-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
         patchelf --set-rpath "\$ORIGIN/../lib" ${D}${bindir}/$i
     done
 
@@ -301,7 +301,7 @@  rust_do_install:class-target() {
 
     install -d ${D}${bindir}
     for i in ${EXTRA_TOOLS}; do
-        cp build/${RUST_BUILD_SYS}/stage2-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
+        cp build/${RUST_BUILD_SYS}/stage1-tools/${RUST_HOST_SYS}/release/$i ${D}${bindir}
         patchelf --set-rpath "\$ORIGIN/../lib" ${D}${bindir}/$i
     done