use core::fmt;
#[derive(Clone, Copy, Debug)]
pub struct BacktraceRegisters {
pub fp: usize,
pub pc: usize,
pub ra: usize,
}
impl BacktraceRegisters {
pub(crate) const fn new(fp: usize, pc: usize, ra: usize) -> Self {
Self { fp, pc, ra }
}
}
#[trait_ffi::def_extern_trait(mod_path = "trap::diagnostics")]
pub trait TrapDiagnostics {
fn format_backtrace(
registers: BacktraceRegisters,
output: &mut fmt::Formatter<'_>,
) -> fmt::Result;
}
pub(crate) struct BacktraceDisplay(pub BacktraceRegisters);
impl fmt::Display for BacktraceDisplay {
fn fmt(&self, output: &mut fmt::Formatter<'_>) -> fmt::Result {
trap_diagnostics::format_backtrace(self.0, output)
}
}