Use cfg_if in libpanic_abort.
This allows setting a default abort using the core intrinsic.
This commit is contained in:
parent
432b4c14aa
commit
9e58908e27
3 changed files with 20 additions and 16 deletions
|
@ -2056,6 +2056,7 @@ dependencies = [
|
|||
name = "panic_abort"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"compiler_builtins",
|
||||
"core",
|
||||
"libc",
|
||||
|
|
|
@ -11,6 +11,7 @@ bench = false
|
|||
doc = false
|
||||
|
||||
[dependencies]
|
||||
cfg-if = { version = "0.1.8", features = ['rustc-dep-of-std'] }
|
||||
core = { path = "../libcore" }
|
||||
libc = { version = "0.2", default-features = false }
|
||||
compiler_builtins = "0.1.0"
|
||||
|
|
|
@ -40,23 +40,25 @@ pub unsafe extern "C" fn __rust_panic_cleanup(_: *mut u8) -> *mut (dyn Any + Sen
|
|||
pub unsafe extern "C" fn __rust_start_panic(_payload: usize) -> u32 {
|
||||
abort();
|
||||
|
||||
#[cfg(any(unix, target_os = "cloudabi"))]
|
||||
unsafe fn abort() -> ! {
|
||||
libc::abort();
|
||||
}
|
||||
|
||||
#[cfg(any(windows, all(target_arch = "wasm32", not(target_os = "emscripten"))))]
|
||||
unsafe fn abort() -> ! {
|
||||
core::intrinsics::abort();
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "hermit", all(target_vendor = "fortanix", target_env = "sgx")))]
|
||||
unsafe fn abort() -> ! {
|
||||
// call std::sys::abort_internal
|
||||
extern "C" {
|
||||
pub fn __rust_abort() -> !;
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(any(unix, target_os = "cloudabi"))] {
|
||||
unsafe fn abort() -> ! {
|
||||
libc::abort();
|
||||
}
|
||||
} else if #[cfg(any(target_os = "hermit",
|
||||
all(target_vendor = "fortanix", target_env = "sgx")))] {
|
||||
unsafe fn abort() -> ! {
|
||||
// call std::sys::abort_internal
|
||||
extern "C" {
|
||||
pub fn __rust_abort() -> !;
|
||||
}
|
||||
__rust_abort();
|
||||
}
|
||||
} else {
|
||||
unsafe fn abort() -> ! {
|
||||
core::intrinsics::abort();
|
||||
}
|
||||
}
|
||||
__rust_abort();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue