mod.rs - source
Description: Source of the Rust file `library/std/src/sys/personality/mod.rs`.

#
std/sys/personality/
mod.rs

    1//! This module contains the implementation of the `eh_personality` lang item.
    2//!
    3//! The actual implementation is heavily dependent on the target since Rust
    4//! tries to use the native stack unwinding mechanism whenever possible.
    5//!
    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
    8//! them into aborts.
    9//!
    10//! Additionally, ARM EHABI uses the personality function when generating
    11//! backtraces.
    12
    13mod dwarf;
    14
    15#[cfg(not(any(test, doctest)))]
    16cfg_select! {
    17    target_os = "emscripten" => {
    18        mod emcc;
    19    }
    20    any(target_env = "msvc", target_family = "wasm", target_os = "motor") => {
    21        // This is required by the compiler to exist (e.g., it's a lang item),
    22        // but it's never actually called by the compiler because
    23        // __CxxFrameHandler3 (msvc) / __gxx_wasm_personality_v0 (wasm) is the
    24        // personality function that is always used.  Hence this is just an
    25        // aborting stub.
    26        #[lang = "eh_personality"]
    27        fn rust_eh_personality() {
    28            core::intrinsics::abort()
    29        }
    30    }
    31    any(
    32        all(target_family = "windows", target_env = "gnu"),
    33        target_os = "psp",
    34        target_os = "xous",
    35        target_os = "solid_asp3",
    36        all(target_family = "unix", not(target_os = "espidf"), not(target_os = "l4re"), not(target_os = "nuttx")),
    37        all(target_vendor = "fortanix", target_env = "sgx"),
    38    ) => {
    39        mod gcc;
    40    }
    41    _ => {
    42        // Targets that don't support unwinding.
    43        // - os=none ("bare metal" targets)
    44        // - os=uefi
    45        // - os=espidf
    46        // - os=hermit
    47        // - nvptx64-nvidia-cuda
    48        // - arch=avr
    49    }
    50}