Skip to main content

Layout

Struct Layout 

Source
pub struct Layout<'a> {
    pub conv: &'a CallRegs,
    pub file: RegFile,
    pub locals: &'a [Local],
    pub outgoing: u32,
    pub leaf: bool,
    pub frame_pointer: bool,
    pub red_zone: bool,
    pub protect: bool,
}
Expand description

Everything about a function’s frame that does not come out of its allocation.

Fields§

§conv: &'a CallRegs

Where the convention this function is compiled for puts things.

§file: RegFile

The registers the target has, which is what says how wide a spill slot of a class is.

§locals: &'a [Local]

The memory the function asked for itself, in the order it wants it reported back.

§outgoing: u32

How many bytes the widest call in the function needs for arguments it passes on the stack.

§leaf: bool

Whether the function calls nothing, which is what the alignment and the red zone turn on.

§frame_pointer: bool

Whether the function keeps a frame pointer, which -fno-omit-frame-pointer asks for and which a realigned or a dynamically grown frame requires whatever the flags say.

§red_zone: bool

Whether the red zone may be used at all, which -mno-red-zone and every kernel turns off.

§protect: bool

Whether the frame holds a stack protector’s canary, which -fstack-protector and the function’s own attribute decide between them.

A protected frame is never a leaf, whatever the function called, because the check at the end of it calls when it fails. The caller sets leaf accordingly rather than this working it out, so that there is one place a frame learns whether it owes an aligned stack pointer.

Implementations§

Source§

impl<'a> Layout<'a>

Source

pub fn new(conv: &'a CallRegs, file: RegFile) -> Self

A layout for a function with nothing in it but what its allocation says: a leaf with no locals and no calls, which is what every function is until the pieces that produce those exist.

Trait Implementations§

Source§

impl<'a> Clone for Layout<'a>

Source§

fn clone(&self) -> Layout<'a>

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<'a> Copy for Layout<'a>

Source§

impl<'a> Debug for Layout<'a>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for Layout<'a>

§

impl<'a> RefUnwindSafe for Layout<'a>

§

impl<'a> Send for Layout<'a>

§

impl<'a> Sync for Layout<'a>

§

impl<'a> Unpin for Layout<'a>

§

impl<'a> UnsafeUnpin for Layout<'a>

§

impl<'a> UnwindSafe for Layout<'a>

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.