Struct framehop::x86_64::UnwinderX86_64
source · 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:
D
: The type for unwind section data in the modules. SeeModule
.P
: TheAllocationPolicy
.
Implementations§
source§impl<D, P> UnwinderX86_64<D, P>
impl<D, P> UnwinderX86_64<D, P>
Trait Implementations§
source§impl<D, P> Clone for UnwinderX86_64<D, P>
impl<D, P> Clone for UnwinderX86_64<D, P>
source§impl<D, P> Default for UnwinderX86_64<D, P>
impl<D, P> Default for UnwinderX86_64<D, P>
source§impl<D: Deref<Target = [u8]>, P: AllocationPolicy> Unwinder for UnwinderX86_64<D, P>
impl<D: Deref<Target = [u8]>, P: AllocationPolicy> Unwinder for UnwinderX86_64<D, P>
§type UnwindRegs = UnwindRegsX86_64
type UnwindRegs = UnwindRegsX86_64
The unwind registers type for the targeted CPU architecture.
§type Cache = CacheX86_64<P>
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>
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>)
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)
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
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>
fn unwind_frame<F>( &self, address: FrameAddress, regs: &mut UnwindRegsX86_64, cache: &mut CacheX86_64<P>, read_stack: &mut F ) -> Result<Option<u64>, Error>
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>
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>
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>where
D: RefUnwindSafe,
P: RefUnwindSafe,
impl<D, P> Send for UnwinderX86_64<D, P>
impl<D, P> Sync for UnwinderX86_64<D, P>
impl<D, P> Unpin for UnwinderX86_64<D, P>where
P: Unpin,
impl<D, P> UnwindSafe for UnwinderX86_64<D, P>where
D: RefUnwindSafe,
P: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more