about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2025-05-21 18:47:09 -0700
committerKhem Raj <raj.khem@gmail.com>2025-05-27 18:07:20 -0700
commit56b669cd7adcc413bb1e64c3d2d7c347a82ae35a (patch)
treecded2bbfbe3e95dec6de10cdfd6afd8a11e5c690
parent45f256d9d7cffb66185c0bf1b8a864cba79db90c (diff)
downloadrust-56b669cd7adcc413bb1e64c3d2d7c347a82ae35a.tar.gz
rust-56b669cd7adcc413bb1e64c3d2d7c347a82ae35a.zip
Disable libunwind cross-architecture unwinding
Building with _LIBUNWIND_IS_NATIVE_ONLY disables code for cross-architecture unwinding
it is disabled by default in LLVM [1], replicate the cmake behavior in bootstrap process

It also enables some additional code that handles PAC-specific unwind info
it helps compiling with the -mbranch-protection=pac or -mbranch-protection=standard flags

This fixes build with clang/musl on aarch64

[1] https://github.com/llvm/llvm-project/commit/85624c5de3e831ffa01fdc2d159e3d69c30de08d

Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--src/bootstrap/src/core/build_steps/llvm.rs3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/bootstrap/src/core/build_steps/llvm.rs b/src/bootstrap/src/core/build_steps/llvm.rs
index a3788197471..5e4a1c7d9f0 100644
--- a/src/bootstrap/src/core/build_steps/llvm.rs
+++ b/src/bootstrap/src/core/build_steps/llvm.rs
@@ -1430,6 +1430,7 @@ impl Step for Libunwind {
             cfg.flag("-funwind-tables");
             cfg.flag("-fvisibility=hidden");
             cfg.define("_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS", None);
+            cfg.define("_LIBUNWIND_IS_NATIVE_ONLY", "1");
             cfg.include(root.join("include"));
             cfg.cargo_metadata(false);
             cfg.out_dir(&out_dir);
@@ -1447,12 +1448,10 @@ impl Step for Libunwind {
                 cfg.define("__NO_STRING_INLINES", None);
                 cfg.define("__NO_MATH_INLINES", None);
                 cfg.define("_LIBUNWIND_IS_BAREMETAL", None);
-                cfg.define("__LIBUNWIND_IS_NATIVE_ONLY", None);
                 cfg.define("NDEBUG", None);
             }
             if self.target.is_windows() {
                 cfg.define("_LIBUNWIND_HIDE_SYMBOLS", "1");
-                cfg.define("_LIBUNWIND_IS_NATIVE_ONLY", "1");
             }
         }