diff options
author | Khem Raj <raj.khem@gmail.com> | 2025-05-27 20:01:24 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-05-29 15:14:37 +0100 |
commit | d8d8f83bd182ca9c4c5e5857f562b8e43cd6cfe1 (patch) | |
tree | 1a264b76490082682320354183d38babc82796d3 | |
parent | 597c0834f168f30080f9c25487b1af3ff6108b5c (diff) | |
download | poky-d8d8f83bd182ca9c4c5e5857f562b8e43cd6cfe1.tar.gz |
rust: Disable cross-unwinding support in llvm libunwind
This is default in LLVM but rust does not use cmake to build itself
so it needs to replicate the behavior
Fixes rust build with clang/musl for aarch64
(From OE-Core rev: f05d42d11e56cbbda6034bd7f773dc690b68bdbd)
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | meta/recipes-devtools/rust/files/0001-Disable-libunwind-cross-architecture-unwinding.patch | 46 | ||||
-rw-r--r-- | meta/recipes-devtools/rust/rust-source.inc | 1 |
2 files changed, 47 insertions, 0 deletions
diff --git a/meta/recipes-devtools/rust/files/0001-Disable-libunwind-cross-architecture-unwinding.patch b/meta/recipes-devtools/rust/files/0001-Disable-libunwind-cross-architecture-unwinding.patch new file mode 100644 index 0000000000..4a282032eb --- /dev/null +++ b/meta/recipes-devtools/rust/files/0001-Disable-libunwind-cross-architecture-unwinding.patch | |||
@@ -0,0 +1,46 @@ | |||
1 | From 56b669cd7adcc413bb1e64c3d2d7c347a82ae35a Mon Sep 17 00:00:00 2001 | ||
2 | From: Khem Raj <raj.khem@gmail.com> | ||
3 | Date: Wed, 21 May 2025 18:47:09 -0700 | ||
4 | Subject: [PATCH] Disable libunwind cross-architecture unwinding | ||
5 | |||
6 | Building with _LIBUNWIND_IS_NATIVE_ONLY disables code for cross-architecture unwinding | ||
7 | it is disabled by default in LLVM [1], replicate the cmake behavior in bootstrap process | ||
8 | |||
9 | It also enables some additional code that handles PAC-specific unwind info | ||
10 | it helps compiling with the -mbranch-protection=pac or -mbranch-protection=standard flags | ||
11 | |||
12 | This fixes build with clang/musl on aarch64 | ||
13 | |||
14 | [1] https://github.com/llvm/llvm-project/commit/85624c5de3e831ffa01fdc2d159e3d69c30de08d | ||
15 | |||
16 | Upstream-Status: Submitted [https://github.com/rust-lang/rust/pull/141375] | ||
17 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
18 | --- | ||
19 | src/bootstrap/src/core/build_steps/llvm.rs | 3 +-- | ||
20 | 1 file changed, 1 insertion(+), 2 deletions(-) | ||
21 | |||
22 | diff --git a/src/bootstrap/src/core/build_steps/llvm.rs b/src/bootstrap/src/core/build_steps/llvm.rs | ||
23 | index a3788197471..5e4a1c7d9f0 100644 | ||
24 | --- a/src/bootstrap/src/core/build_steps/llvm.rs | ||
25 | +++ b/src/bootstrap/src/core/build_steps/llvm.rs | ||
26 | @@ -1430,6 +1430,7 @@ fn run(self, builder: &Builder<'_>) -> Self::Output { | ||
27 | cfg.flag("-funwind-tables"); | ||
28 | cfg.flag("-fvisibility=hidden"); | ||
29 | cfg.define("_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS", None); | ||
30 | + cfg.define("_LIBUNWIND_IS_NATIVE_ONLY", "1"); | ||
31 | cfg.include(root.join("include")); | ||
32 | cfg.cargo_metadata(false); | ||
33 | cfg.out_dir(&out_dir); | ||
34 | @@ -1447,12 +1448,10 @@ fn run(self, builder: &Builder<'_>) -> Self::Output { | ||
35 | cfg.define("__NO_STRING_INLINES", None); | ||
36 | cfg.define("__NO_MATH_INLINES", None); | ||
37 | cfg.define("_LIBUNWIND_IS_BAREMETAL", None); | ||
38 | - cfg.define("__LIBUNWIND_IS_NATIVE_ONLY", None); | ||
39 | cfg.define("NDEBUG", None); | ||
40 | } | ||
41 | if self.target.is_windows() { | ||
42 | cfg.define("_LIBUNWIND_HIDE_SYMBOLS", "1"); | ||
43 | - cfg.define("_LIBUNWIND_IS_NATIVE_ONLY", "1"); | ||
44 | } | ||
45 | } | ||
46 | |||
diff --git a/meta/recipes-devtools/rust/rust-source.inc b/meta/recipes-devtools/rust/rust-source.inc index 82d28cf09f..6cb08b7c38 100644 --- a/meta/recipes-devtools/rust/rust-source.inc +++ b/meta/recipes-devtools/rust/rust-source.inc | |||
@@ -9,6 +9,7 @@ SRC_URI += "https://static.rust-lang.org/dist/rustc-${RUST_VERSION}-src.tar.xz;n | |||
9 | file://revert-link-std-statically-in-rustc_driver-feature.patch;patchdir=${RUSTSRC} \ | 9 | file://revert-link-std-statically-in-rustc_driver-feature.patch;patchdir=${RUSTSRC} \ |
10 | file://Zdual-proc-macros-additional-check.patch;patchdir=${RUSTSRC} \ | 10 | file://Zdual-proc-macros-additional-check.patch;patchdir=${RUSTSRC} \ |
11 | file://0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch;patchdir=${RUSTSRC} \ | 11 | file://0001-libunwind-Use-gcs-instead-of-gcs-target-attribute.patch;patchdir=${RUSTSRC} \ |
12 | file://0001-Disable-libunwind-cross-architecture-unwinding.patch;patchdir=${RUSTSRC} \ | ||
12 | " | 13 | " |
13 | SRC_URI[rust.sha256sum] = "b1fbf809efe9f036939401e142631c201a53bcf43ec1696bd9f5290ba236a266" | 14 | SRC_URI[rust.sha256sum] = "b1fbf809efe9f036939401e142631c201a53bcf43ec1696bd9f5290ba236a266" |
14 | 15 | ||