use crate::vmcontext::{VMFunctionContext, VMTrampoline};
use crate::{VMContext, VMFunctionBody};
#[allow(clippy::module_inception)]
mod trap;
#[cfg(not(feature = "baremetal"))]
mod traphandlers;
#[cfg(feature = "baremetal")]
#[path = "traphandlers_baremetal.rs"]
mod traphandlers;
pub use trap::{Trap, UnwindReason};
#[cfg(feature = "baremetal")]
pub use traphandlers::install_unwinder;
pub use traphandlers::{
MAX_STACK_SIZE, TrapHandlerFn, VMConfig, catch_traps, drain_stack_pool, get_stack_size,
on_host_stack, raise_lib_trap, raise_user_trap, set_stack_size,
};
pub use traphandlers::{init_traps, resume_panic};
pub use wasmer_types::TrapCode;
pub unsafe fn wasmer_call_trampoline(
trap_handler: Option<*const TrapHandlerFn<'static>>,
config: &VMConfig,
vmctx: VMFunctionContext,
trampoline: VMTrampoline,
callee: *const VMFunctionBody,
values_vec: *mut u8,
) -> Result<(), Trap> {
unsafe {
catch_traps(trap_handler, config, move || {
std::mem::transmute::<
unsafe extern "C" fn(
*mut VMContext,
*const VMFunctionBody,
*mut wasmer_types::RawValue,
),
unsafe extern "C" fn(VMFunctionContext, *const VMFunctionBody, *mut u8),
>(trampoline)(vmctx, callee, values_vec);
})
}
}