Migrate panic_unwind to use cfg_select!
This commit is contained in:
@@ -192,7 +192,6 @@ name = "panic_unwind"
|
|||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"alloc",
|
"alloc",
|
||||||
"cfg-if",
|
|
||||||
"libc",
|
"libc",
|
||||||
"rustc-std-workspace-core",
|
"rustc-std-workspace-core",
|
||||||
"unwind",
|
"unwind",
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ doc = false
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
alloc = { path = "../alloc" }
|
alloc = { path = "../alloc" }
|
||||||
cfg-if = { version = "1.0", features = ['rustc-dep-of-std'] }
|
|
||||||
core = { path = "../rustc-std-workspace-core", package = "rustc-std-workspace-core" }
|
core = { path = "../rustc-std-workspace-core", package = "rustc-std-workspace-core" }
|
||||||
unwind = { path = "../unwind" }
|
unwind = { path = "../unwind" }
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#![unstable(feature = "panic_unwind", issue = "32837")]
|
#![unstable(feature = "panic_unwind", issue = "32837")]
|
||||||
#![doc(issue_tracker_base_url = "https://github.com/rust-lang/rust/issues/")]
|
#![doc(issue_tracker_base_url = "https://github.com/rust-lang/rust/issues/")]
|
||||||
#![feature(cfg_emscripten_wasm_eh)]
|
#![feature(cfg_emscripten_wasm_eh)]
|
||||||
|
#![feature(cfg_select)]
|
||||||
#![feature(core_intrinsics)]
|
#![feature(core_intrinsics)]
|
||||||
#![feature(lang_items)]
|
#![feature(lang_items)]
|
||||||
#![feature(panic_unwind)]
|
#![feature(panic_unwind)]
|
||||||
@@ -33,18 +34,21 @@ use alloc::boxed::Box;
|
|||||||
use core::any::Any;
|
use core::any::Any;
|
||||||
use core::panic::PanicPayload;
|
use core::panic::PanicPayload;
|
||||||
|
|
||||||
cfg_if::cfg_if! {
|
cfg_select! {
|
||||||
if #[cfg(all(target_os = "emscripten", not(emscripten_wasm_eh)))] {
|
all(target_os = "emscripten", not(emscripten_wasm_eh)) => {
|
||||||
#[path = "emcc.rs"]
|
#[path = "emcc.rs"]
|
||||||
mod imp;
|
mod imp;
|
||||||
} else if #[cfg(target_os = "hermit")] {
|
}
|
||||||
|
target_os = "hermit" => {
|
||||||
#[path = "hermit.rs"]
|
#[path = "hermit.rs"]
|
||||||
mod imp;
|
mod imp;
|
||||||
} else if #[cfg(target_os = "l4re")] {
|
}
|
||||||
|
target_os = "l4re" => {
|
||||||
// L4Re is unix family but does not yet support unwinding.
|
// L4Re is unix family but does not yet support unwinding.
|
||||||
#[path = "dummy.rs"]
|
#[path = "dummy.rs"]
|
||||||
mod imp;
|
mod imp;
|
||||||
} else if #[cfg(any(
|
}
|
||||||
|
any(
|
||||||
all(target_family = "windows", target_env = "gnu"),
|
all(target_family = "windows", target_env = "gnu"),
|
||||||
target_os = "psp",
|
target_os = "psp",
|
||||||
target_os = "xous",
|
target_os = "xous",
|
||||||
@@ -52,19 +56,22 @@ cfg_if::cfg_if! {
|
|||||||
all(target_family = "unix", not(any(target_os = "espidf", target_os = "nuttx"))),
|
all(target_family = "unix", not(any(target_os = "espidf", target_os = "nuttx"))),
|
||||||
all(target_vendor = "fortanix", target_env = "sgx"),
|
all(target_vendor = "fortanix", target_env = "sgx"),
|
||||||
target_family = "wasm",
|
target_family = "wasm",
|
||||||
))] {
|
) => {
|
||||||
#[path = "gcc.rs"]
|
#[path = "gcc.rs"]
|
||||||
mod imp;
|
mod imp;
|
||||||
} else if #[cfg(miri)] {
|
}
|
||||||
|
miri => {
|
||||||
// Use the Miri runtime on Windows as miri doesn't support funclet based unwinding,
|
// Use the Miri runtime on Windows as miri doesn't support funclet based unwinding,
|
||||||
// only landingpad based unwinding. Also use the Miri runtime on unsupported platforms.
|
// only landingpad based unwinding. Also use the Miri runtime on unsupported platforms.
|
||||||
#[path = "miri.rs"]
|
#[path = "miri.rs"]
|
||||||
mod imp;
|
mod imp;
|
||||||
} else if #[cfg(all(target_env = "msvc", not(target_arch = "arm")))] {
|
}
|
||||||
|
all(target_env = "msvc", not(target_arch = "arm")) => {
|
||||||
// LLVM does not support unwinding on 32 bit ARM msvc (thumbv7a-pc-windows-msvc)
|
// LLVM does not support unwinding on 32 bit ARM msvc (thumbv7a-pc-windows-msvc)
|
||||||
#[path = "seh.rs"]
|
#[path = "seh.rs"]
|
||||||
mod imp;
|
mod imp;
|
||||||
} else {
|
}
|
||||||
|
_ => {
|
||||||
// Targets that don't support unwinding.
|
// Targets that don't support unwinding.
|
||||||
// - os=none ("bare metal" targets)
|
// - os=none ("bare metal" targets)
|
||||||
// - os=uefi
|
// - os=uefi
|
||||||
|
|||||||
@@ -289,10 +289,11 @@ macro_rules! define_cleanup {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cfg_if::cfg_if! {
|
cfg_select! {
|
||||||
if #[cfg(target_arch = "x86")] {
|
target_arch = "x86" => {
|
||||||
define_cleanup!("thiscall" "thiscall-unwind");
|
define_cleanup!("thiscall" "thiscall-unwind");
|
||||||
} else {
|
}
|
||||||
|
_ => {
|
||||||
define_cleanup!("C" "C-unwind");
|
define_cleanup!("C" "C-unwind");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user