diff --git a/meta/recipes-devtools/rust/files/0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch b/meta/recipes-devtools/rust/files/0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch new file mode 100644 index 0000000000..a704671fb9 --- /dev/null +++ b/meta/recipes-devtools/rust/files/0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch @@ -0,0 +1,66 @@ +From e4f4094de8ddcbe6d5ff1cdf782d2b89e0563903 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 30 Apr 2025 19:51:19 -0700 +Subject: [PATCH] libunwind: Use +gcs instead of gcs target attribute + +__attribute__((target("gcs"))) does not work with gcc + +GCC-15 has added gcs intrinsics [1] but the syntax for enabling it is +slightly different. This syntax works with clang too. + +With gcc15 compiler libunwind's check for this macros is succeeding and it +ends up enabling 'gcs' by using function attribute, this works with clang +but not with gcc but '+gcs' works with both + +We can see this in rust compiler bootstrap for aarch64/musl when system +uses gcc15, it ends up with these errors + +Building libunwind.a for aarch64-poky-linux-musl +cargo:warning=/mnt/b/yoe/master/sources/poky/build/tmp/work/cortexa57-poky-linux-musl/rust/1.85.1/rustc-1.85.1-src/src/llvm-project/libunwind/src/UnwindLevel1.c:191:1: error: arch extension 'gcs' should be prefixed by '+' +cargo:warning= 191 | unwind_phase2(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object) { +cargo:warning= | ^~~~~~~~~~~~~ +cargo:warning=/mnt/b/yoe/master/sources/poky/build/tmp/work/cortexa57-poky-linux-musl/rust/1.85.1/rustc-1.85.1-src/src/llvm-project/libunwind/src/UnwindLevel1.c:337:22: error: arch extension 'gcs' should be prefixed by '+' +cargo:warning= 337 | _Unwind_Stop_Fn stop, void *stop_parameter) { +cargo:warning= | ^~~~~~~~~~~~~~~ + +[1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=5a6af707f0af + +Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/138077] + +Signed-off-by: Khem Raj +--- + src/llvm-project/libunwind/src/UnwindLevel1.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/src/llvm-project/libunwind/src/UnwindLevel1.c ++++ b/src/llvm-project/libunwind/src/UnwindLevel1.c +@@ -185,7 +185,7 @@ extern int __unw_step_stage2(unw_cursor_ + + #if defined(_LIBUNWIND_USE_GCS) + // Enable the GCS target feature to permit gcspop instructions to be used. +-__attribute__((target("gcs"))) ++__attribute__((target("+gcs"))) + #endif + static _Unwind_Reason_Code + unwind_phase2(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object) { +@@ -329,7 +329,7 @@ unwind_phase2(unw_context_t *uc, unw_cur + + #if defined(_LIBUNWIND_USE_GCS) + // Enable the GCS target feature to permit gcspop instructions to be used. +-__attribute__((target("gcs"))) ++__attribute__((target("+gcs"))) + #endif + static _Unwind_Reason_Code + unwind_phase2_forced(unw_context_t *uc, unw_cursor_t *cursor, +--- a/src/llvm-project/libunwind/src/cet_unwind.h ++++ b/src/llvm-project/libunwind/src/cet_unwind.h +@@ -42,7 +42,8 @@ + #include + + // We can only use GCS if arm_acle.h defines the GCS intrinsics. +-#ifdef _CHKFEAT_GCS ++// Enable gcs with clang for now, gcc does not build unwindlevel1.c correctly ++#if defined(_CHKFEAT_GCS) && defined(__clang__) + #define _LIBUNWIND_USE_GCS 1 + #endif + diff --git a/meta/recipes-devtools/rust/rust-source.inc b/meta/recipes-devtools/rust/rust-source.inc index 25c0a1ce52..82d28cf09f 100644 --- a/meta/recipes-devtools/rust/rust-source.inc +++ b/meta/recipes-devtools/rust/rust-source.inc @@ -8,6 +8,7 @@ SRC_URI += "https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;n file://0001-src-core-build_steps-tool.rs-switch-off-lto-for-rust.patch;patchdir=${RUSTSRC} \ file://revert-link-std-statically-in-rustc_driver-feature.patch;patchdir=${RUSTSRC} \ file://Zdual-proc-macros-additional-check.patch;patchdir=${RUSTSRC} \ + file://0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch;patchdir=${RUSTSRC} \ " SRC_URI[rust.sha256sum] = "b1fbf809efe9f036939401e142631c201a53bcf43ec1696bd9f5290ba236a266"