Skip to main content

StackMapRegistry

Struct StackMapRegistry 

Source
pub struct StackMapRegistry { /* private fields */ }
Expand description

Maps absolute return addresses to stack map info.

Key = function_base_ptr + code_offset (i.e., the return address, which is what the frame walker sees as caller_pc). Cranelift’s code_offset for user stack maps already points to the instruction AFTER the call (the return point).

Implementations§

Source§

impl StackMapRegistry

Source

pub fn new() -> Self

Source

pub fn register( &mut self, base_ptr: usize, size: u32, raw_entries: &[RawStackMap], )

Register stack map entries from a compiled function.

base_ptr is the start address of the compiled function in memory. size is the total size of the function in bytes. raw_entries come from CompiledCode.buffer.user_stack_maps(): each tuple is (code_offset, frame_size, UserStackMap).

We key by base_ptr + code_offset as the return address. Cranelift’s code_offset for user stack maps points to the instruction AFTER the call (the return point), so base_ptr + code_offset IS the absolute return address.

Source

pub fn lookup(&self, return_addr: usize) -> Option<&StackMapInfo>

Look up stack map info by return address (PC value from frame walker).

Source

pub fn len(&self) -> usize

Number of registered safepoints.

Source

pub fn is_empty(&self) -> bool

Whether the registry is empty.

Source

pub fn contains_address(&self, addr: usize) -> bool

Check if an address falls within the known JIT code region. Used by the frame walker to determine when to stop walking.

Trait Implementations§

Source§

impl Debug for StackMapRegistry

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for StackMapRegistry

Source§

fn default() -> StackMapRegistry

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

Auto Trait Implementations§

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<Choices> CoproductSubsetter<CNil, HNil> for Choices

Source§

type Remainder = Choices

Source§

fn subset( self, ) -> Result<CNil, <Choices as CoproductSubsetter<CNil, HNil>>::Remainder>

Extract a subset of the possible types in a coproduct (or get the remaining possibilities) 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, U, I> LiftInto<U, I> for T
where U: LiftFrom<T, I>,

Source§

fn lift_into(self) -> U

Performs the indexed conversion.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<Source> Sculptor<HNil, HNil> for Source

Source§

type Remainder = Source

Source§

fn sculpt(self) -> (HNil, <Source as Sculptor<HNil, HNil>>::Remainder)

Consumes the current HList and returns an HList with the requested shape. Read more
Source§

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

Source§

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>,

Source§

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.