Skip to main content

Frame

Struct Frame 

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

What a function’s stack looks like while it runs.

Implementations§

Source§

impl Frame

Source

pub fn of(func: &Func, allocation: &Allocation, layout: &Layout<'_>) -> Self

Works out the frame of a function the allocator has finished with.

§Panics

Panics on a frame of two gigabytes or more, which is a stack no machine here gives a thread, and on a local whose alignment is not a power of two.

Source

pub fn saved_int(&self) -> &[PhysReg]

The general purpose registers the prologue pushes, in the order it pushes them.

The frame pointer is not among them even when the convention calls it a saved register, because a function that keeps one saves it as part of setting it up.

Source

pub fn saved_sse(&self) -> &[PhysReg]

The vector registers the prologue stores into the frame, in the order it stores them.

Source

pub fn slot(&self, slot: u32) -> Option<i32>

Where a spill slot is, from the stack pointer in the body of the function.

Source

pub fn local(&self, local: usize) -> Option<i32>

Where a local is, from the stack pointer in the body of the function.

Source

pub fn size(&self) -> u32

How many bytes the prologue takes off the stack pointer, which is nothing for a function small enough and quiet enough to live in the red zone.

Source

pub fn outgoing(&self) -> u32

How many bytes at the bottom of the frame belong to the arguments of calls this function makes, which is where the shadow space goes on Windows.

Source

pub fn realign(&self) -> Option<u32>

What the prologue has to force the stack pointer to be a multiple of, when a local wants more alignment than a call leaves it with.

Source

pub fn incoming(&self) -> Option<i32>

Where the first argument the caller passed on the stack is, from the stack pointer in the body of the function.

A realigned frame answers that it does not know, because forcing the alignment threw away however far the caller’s stack pointer was from where the prologue wanted it, and the frame pointer is what reaches the caller’s stack afterwards.

Source

pub fn frame_pointer(&self) -> bool

Whether the function keeps a frame pointer.

Trait Implementations§

Source§

impl Clone for Frame

Source§

fn clone(&self) -> Frame

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Frame

Source§

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

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

impl Eq for Frame

Source§

impl PartialEq for Frame

Source§

fn eq(&self, other: &Frame) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Frame

Auto Trait Implementations§

§

impl Freeze for Frame

§

impl RefUnwindSafe for Frame

§

impl Send for Frame

§

impl Sync for Frame

§

impl Unpin for Frame

§

impl UnsafeUnpin for Frame

§

impl UnwindSafe for Frame

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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,

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.