wasmtime/runtime/vm/sys/unix/
traphandlers.rs1cfg_if::cfg_if! {
2 if #[cfg(not(has_native_signals))] {
3 pub enum SignalHandler {}
7
8 #[inline]
9 pub fn lazy_per_thread_init() {}
10 } else if #[cfg(target_vendor = "apple")] {
11 static mut USE_MACH_PORTS: bool = false;
16
17 pub use super::signals::SignalHandler;
18
19 pub enum TrapHandler {
20 Signals(super::signals::TrapHandler),
21 #[allow(dead_code)] MachPorts(super::machports::TrapHandler),
23 }
24
25 impl TrapHandler {
26 pub unsafe fn new(macos_use_mach_ports: bool) -> TrapHandler {
27 unsafe {
28 USE_MACH_PORTS = macos_use_mach_ports;
29 if macos_use_mach_ports {
30 TrapHandler::MachPorts(super::machports::TrapHandler::new())
31 } else {
32 TrapHandler::Signals(super::signals::TrapHandler::new(false))
33 }
34 }
35 }
36
37 pub fn validate_config(&self, macos_use_mach_ports: bool) {
38 match self {
39 TrapHandler::Signals(t) => t.validate_config(macos_use_mach_ports),
40 TrapHandler::MachPorts(_) => assert!(macos_use_mach_ports),
41 }
42 }
43 }
44
45 pub fn lazy_per_thread_init() {
46 unsafe {
47 if USE_MACH_PORTS {
48 super::machports::lazy_per_thread_init();
49 } else {
50 super::signals::lazy_per_thread_init();
51 }
52 }
53 }
54 } else {
55 pub use super::signals::{TrapHandler, SignalHandler, lazy_per_thread_init};
58 }
59}