1 //! This module contains the implementation of the `eh_personality` lang item.
3 //! The actual implementation is heavily dependent on the target since Rust
4 //! tries to use the native stack unwinding mechanism whenever possible.
6 //! This personality function is still required with `-C panic=abort` because
7 //! it is used to catch foreign exceptions from `extern "C-unwind"` and turn
10 //! Additionally, ARM EHABI uses the personality function when generating
17 if #[cfg(target_os = "emscripten")] {
19 } else if #[cfg(target_env = "msvc")] {
20 // This is required by the compiler to exist (e.g., it's a lang item),
21 // but it's never actually called by the compiler because
22 // _CxxFrameHandler3 is the personality function that is always used.
23 // Hence this is just an aborting stub.
24 #[lang = "eh_personality"]
25 fn rust_eh_personality() {
26 core::intrinsics::abort()
29 all(target_family = "windows", target_env = "gnu"),
31 target_os = "solid_asp3",
32 all(target_family = "unix", not(target_os = "espidf")),
33 all(target_vendor = "fortanix", target_env = "sgx"),
37 // Targets that don't support unwinding.
39 // - os=none ("bare metal" targets)
43 // - nvptx64-nvidia-cuda