pub trait UnwindContextStorage<R: Reader>: Sized {
    type Rules: ArrayLike<Item = (Register, RegisterRule<R>)>;
    type Stack: ArrayLike<Item = UnwindTableRow<R, Self>>;
}
Expand description

Specification of what storage should be used for UnwindContext.

Normally you would only need to use StoreOnHeap, which places the stack on the heap using [Vec]. This is the default storage type parameter for UnwindContext.

If you need to avoid UnwindContext from allocating memory, e.g. for signal safety, you can provide you own storage specification:

struct StoreOnStack;

impl<R: Reader> UnwindContextStorage<R> for StoreOnStack {
    type Rules = [(Register, RegisterRule<R>); 192];
    type Stack = [UnwindTableRow<R, Self>; 4];
}

let mut ctx = UnwindContext::<_, StoreOnStack>::new_in();

// Initialize the context by evaluating the CIE's initial instruction program,
// and generate the unwind table.
let mut table = some_fde.rows(&eh_frame, &bases, &mut ctx)?;
while let Some(row) = table.next_row()? {
    // Do stuff with each row...
}

Required Associated Types§

source

type Rules: ArrayLike<Item = (Register, RegisterRule<R>)>

The storage used for register rules in a unwind table row.

Note that this is nested within the stack.

source

type Stack: ArrayLike<Item = UnwindTableRow<R, Self>>

The storage used for unwind table row stack.

Implementors§