Add more from the std
This commit is contained in:
50
library/std/src/sys/personality/mod.rs
Normal file
50
library/std/src/sys/personality/mod.rs
Normal file
@@ -0,0 +1,50 @@
|
||||
//! This module contains the implementation of the `eh_personality` lang item.
|
||||
//!
|
||||
//! The actual implementation is heavily dependent on the target since Rust
|
||||
//! tries to use the native stack unwinding mechanism whenever possible.
|
||||
//!
|
||||
//! This personality function is still required with `-C panic=abort` because
|
||||
//! it is used to catch foreign exceptions from `extern "C-unwind"` and turn
|
||||
//! them into aborts.
|
||||
//!
|
||||
//! Additionally, ARM EHABI uses the personality function when generating
|
||||
//! backtraces.
|
||||
|
||||
mod dwarf;
|
||||
|
||||
#[cfg(not(any(test, doctest)))]
|
||||
cfg_select! {
|
||||
target_os = "emscripten" => {
|
||||
mod emcc;
|
||||
}
|
||||
any(target_env = "msvc", target_family = "wasm", target_os = "motor") => {
|
||||
// This is required by the compiler to exist (e.g., it's a lang item),
|
||||
// but it's never actually called by the compiler because
|
||||
// __CxxFrameHandler3 (msvc) / __gxx_wasm_personality_v0 (wasm) is the
|
||||
// personality function that is always used. Hence this is just an
|
||||
// aborting stub.
|
||||
#[lang = "eh_personality"]
|
||||
fn rust_eh_personality() {
|
||||
core::intrinsics::abort()
|
||||
}
|
||||
}
|
||||
any(
|
||||
all(target_family = "windows", target_env = "gnu"),
|
||||
target_os = "psp",
|
||||
target_os = "xous",
|
||||
target_os = "solid_asp3",
|
||||
all(target_family = "unix", not(target_os = "espidf"), not(target_os = "l4re"), not(target_os = "nuttx")),
|
||||
all(target_vendor = "fortanix", target_env = "sgx"),
|
||||
) => {
|
||||
mod gcc;
|
||||
}
|
||||
_ => {
|
||||
// Targets that don't support unwinding.
|
||||
// - os=none ("bare metal" targets)
|
||||
// - os=uefi
|
||||
// - os=espidf
|
||||
// - os=hermit
|
||||
// - nvptx64-nvidia-cuda
|
||||
// - arch=avr
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user