pub struct UnwinderX86_64<D, P = MayAllocateDuringUnwind>(/* private fields */);
Expand description

The unwinder for the x86_64 CPU architecture. Use the Unwinder trait for unwinding.

Type arguments:

Implementations§

source§

impl<D, P> UnwinderX86_64<D, P>

source

pub fn new() -> Self

Create an unwinder for a process.

Trait Implementations§

source§

impl<D, P> Clone for UnwinderX86_64<D, P>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<D, P> Default for UnwinderX86_64<D, P>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<D: Deref<Target = [u8]>, P: AllocationPolicy> Unwinder for UnwinderX86_64<D, P>

§

type UnwindRegs = UnwindRegsX86_64

The unwind registers type for the targeted CPU architecture.
§

type Cache = CacheX86_64<P>

The unwind cache for the targeted CPU architecture. This is an associated type because the cache stores unwind rules, whose concrete type depends on the CPU arch, and because the cache can support different allocation policies.
§

type Module = Module<D>

The module type. This is an associated type because the concrete type varies depending on the type you use to give the module access to the unwind section data.
source§

fn add_module(&mut self, module: Module<D>)

Add a module that’s loaded in the profiled process. This is how you provide unwind information and address ranges. Read more
source§

fn remove_module(&mut self, module_address_range_start: u64)

Remove a module that was added before using add_module, keyed by the start address of that module’s address range. If no match is found, the call is ignored. This should be called whenever a module is unloaded from the process.
source§

fn max_known_code_address(&self) -> u64

Returns the highest code address that is known in this process based on the module address ranges. Returns 0 if no modules have been added. Read more
source§

fn unwind_frame<F>( &self, address: FrameAddress, regs: &mut UnwindRegsX86_64, cache: &mut CacheX86_64<P>, read_stack: &mut F ) -> Result<Option<u64>, Error>
where F: FnMut(u64) -> Result<u64, ()>,

Unwind a single frame, to recover return address and caller register values. This is the main entry point for unwinding.
source§

fn iter_frames<'u, 'c, 'r, F>( &'u self, pc: u64, regs: Self::UnwindRegs, cache: &'c mut Self::Cache, read_stack: &'r mut F ) -> UnwindIterator<'u, 'c, 'r, Self, F>
where F: FnMut(u64) -> Result<u64, ()>,

Return an iterator that unwinds frame by frame until the end of the stack is found.

Auto Trait Implementations§

§

impl<D, P> RefUnwindSafe for UnwinderX86_64<D, P>

§

impl<D, P> Send for UnwinderX86_64<D, P>
where D: Send + Sync, P: Send,

§

impl<D, P> Sync for UnwinderX86_64<D, P>
where D: Send + Sync, P: Sync,

§

impl<D, P> Unpin for UnwinderX86_64<D, P>
where P: Unpin,

§

impl<D, P> UnwindSafe for UnwinderX86_64<D, P>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.