From 2435b16b050ebdca0f70fe9ed1eebfdd3bacf19d Mon Sep 17 00:00:00 2001 From: Peter Tatrai Date: Mon, 11 Aug 2025 10:43:34 +0200 Subject: [PATCH] rust: backport cstring-merging test fix for PowerPC targets The Rust cstring-merging assembly test was failing on PowerPC targets due to LLVM's GlobalMerge optimization pass merging all global string constants into a single merged global. This caused the test's CHECK directives to fail as they expected separate .Lanon labels for each string literal ("foo", "bar", "baz"). The test verifies that C-style string literals are correctly placed in mergeable read-only sections (.rodata.str1.1) with proper section flags (aMS - Allocatable, Merge, Strings) for linker optimization. This backports the upstream fix that disables the GlobalMerge pass (-Cllvm-args=-enable-global-merge=0) specifically for this test, allowing it to verify the expected assembly structure without interference from the optimization. Fixes test failure: - tests/assembly/cstring-merging.rs on powerpc-poky-linux-gnu Backport of https://github.com/rust-lang/rust/commit/2d51acd2fbcbadb6f30709c5dd305494d413d388 Signed-off-by: Peter Tatrai Tested-by: Peter Marko Signed-off-by: Mathieu Dubois-Briand Signed-off-by: Richard Purdie --- .../backport-fix-test-string-merging.patch | 27 +++++++++++++++++++ meta/recipes-devtools/rust/rust-source.inc | 1 + 2 files changed, 28 insertions(+) create mode 100644 meta/recipes-devtools/rust/files/backport-fix-test-string-merging.patch diff --git a/meta/recipes-devtools/rust/files/backport-fix-test-string-merging.patch b/meta/recipes-devtools/rust/files/backport-fix-test-string-merging.patch new file mode 100644 index 0000000000..1e72c100bb --- /dev/null +++ b/meta/recipes-devtools/rust/files/backport-fix-test-string-merging.patch @@ -0,0 +1,27 @@ +From 2d51acd2fbcbadb6f30709c5dd305494d413d388 Mon Sep 17 00:00:00 2001 +From: Jens Reidel +Date: Fri, 18 Jul 2025 19:44:20 +0200 +Subject: [PATCH] tests: assembly: cstring-merging: Disable GlobalMerge pass + +The test relies on LLVM not merging all the globals into one and would +currently otherwise fail on powerpc64le. + +Signed-off-by: Peter Tatrai +Upstream-Status: Backport [https://github.com/rust-lang/rust/commit/2d51acd2fbcbadb6f30709c5dd305494d413d388] +--- + tests/assembly/cstring-merging.rs | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/assembly/cstring-merging.rs b/tests/assembly/cstring-merging.rs +index f7d0775f7affd..03688e0068b79 100644 +--- a/tests/assembly/cstring-merging.rs ++++ b/tests/assembly/cstring-merging.rs +@@ -2,7 +2,7 @@ + // other architectures (including ARM and x86-64) use the prefix `.Lanon.` + //@ only-linux + //@ assembly-output: emit-asm +-//@ compile-flags: --crate-type=lib -Copt-level=3 ++//@ compile-flags: --crate-type=lib -Copt-level=3 -Cllvm-args=-enable-global-merge=0 + //@ edition: 2024 + + use std::ffi::CStr; diff --git a/meta/recipes-devtools/rust/rust-source.inc b/meta/recipes-devtools/rust/rust-source.inc index 1a5d98d9dc..8f341a0e5b 100644 --- a/meta/recipes-devtools/rust/rust-source.inc +++ b/meta/recipes-devtools/rust/rust-source.inc @@ -11,6 +11,7 @@ SRC_URI += "https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;n file://0001-Disable-libunwind-cross-architecture-unwinding.patch;patchdir=${RUSTSRC} \ file://triagebot.patch;patchdir=${RUSTSRC} \ file://0001-riscv32-Define-plain-syscalls-as-their-time64-varian.patch;patchdir=${RUSTSRC} \ + file://backport-fix-test-string-merging.patch;patchdir=${RUSTSRC} \ " SRC_URI[rust.sha256sum] = "0c1dcbb4f762513d021e1a282c0ac58c0a423642b3a6bf581cafb5414df4193e" -- 2.47.3