diff options
Diffstat (limited to 'meta/recipes-devtools/rust/files/0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch')
-rw-r--r-- | meta/recipes-devtools/rust/files/0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch | 66 |
1 files changed, 66 insertions, 0 deletions
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 @@ | |||
1 | From e4f4094de8ddcbe6d5ff1cdf782d2b89e0563903 Mon Sep 17 00:00:00 2001 | ||
2 | From: Khem Raj <raj.khem@gmail.com> | ||
3 | Date: Wed, 30 Apr 2025 19:51:19 -0700 | ||
4 | Subject: [PATCH] libunwind: Use +gcs instead of gcs target attribute | ||
5 | |||
6 | __attribute__((target("gcs"))) does not work with gcc | ||
7 | |||
8 | GCC-15 has added gcs intrinsics [1] but the syntax for enabling it is | ||
9 | slightly different. This syntax works with clang too. | ||
10 | |||
11 | With gcc15 compiler libunwind's check for this macros is succeeding and it | ||
12 | ends up enabling 'gcs' by using function attribute, this works with clang | ||
13 | but not with gcc but '+gcs' works with both | ||
14 | |||
15 | We can see this in rust compiler bootstrap for aarch64/musl when system | ||
16 | uses gcc15, it ends up with these errors | ||
17 | |||
18 | Building libunwind.a for aarch64-poky-linux-musl | ||
19 | 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 '+' | ||
20 | cargo:warning= 191 | unwind_phase2(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object) { | ||
21 | cargo:warning= | ^~~~~~~~~~~~~ | ||
22 | 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 '+' | ||
23 | cargo:warning= 337 | _Unwind_Stop_Fn stop, void *stop_parameter) { | ||
24 | cargo:warning= | ^~~~~~~~~~~~~~~ | ||
25 | |||
26 | [1] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=5a6af707f0af | ||
27 | |||
28 | Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/138077] | ||
29 | |||
30 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
31 | --- | ||
32 | src/llvm-project/libunwind/src/UnwindLevel1.c | 4 ++-- | ||
33 | 1 file changed, 2 insertions(+), 2 deletions(-) | ||
34 | |||
35 | --- a/src/llvm-project/libunwind/src/UnwindLevel1.c | ||
36 | +++ b/src/llvm-project/libunwind/src/UnwindLevel1.c | ||
37 | @@ -185,7 +185,7 @@ extern int __unw_step_stage2(unw_cursor_ | ||
38 | |||
39 | #if defined(_LIBUNWIND_USE_GCS) | ||
40 | // Enable the GCS target feature to permit gcspop instructions to be used. | ||
41 | -__attribute__((target("gcs"))) | ||
42 | +__attribute__((target("+gcs"))) | ||
43 | #endif | ||
44 | static _Unwind_Reason_Code | ||
45 | unwind_phase2(unw_context_t *uc, unw_cursor_t *cursor, _Unwind_Exception *exception_object) { | ||
46 | @@ -329,7 +329,7 @@ unwind_phase2(unw_context_t *uc, unw_cur | ||
47 | |||
48 | #if defined(_LIBUNWIND_USE_GCS) | ||
49 | // Enable the GCS target feature to permit gcspop instructions to be used. | ||
50 | -__attribute__((target("gcs"))) | ||
51 | +__attribute__((target("+gcs"))) | ||
52 | #endif | ||
53 | static _Unwind_Reason_Code | ||
54 | unwind_phase2_forced(unw_context_t *uc, unw_cursor_t *cursor, | ||
55 | --- a/src/llvm-project/libunwind/src/cet_unwind.h | ||
56 | +++ b/src/llvm-project/libunwind/src/cet_unwind.h | ||
57 | @@ -42,7 +42,8 @@ | ||
58 | #include <arm_acle.h> | ||
59 | |||
60 | // We can only use GCS if arm_acle.h defines the GCS intrinsics. | ||
61 | -#ifdef _CHKFEAT_GCS | ||
62 | +// Enable gcs with clang for now, gcc does not build unwindlevel1.c correctly | ||
63 | +#if defined(_CHKFEAT_GCS) && defined(__clang__) | ||
64 | #define _LIBUNWIND_USE_GCS 1 | ||
65 | #endif | ||
66 | |||