Skip to main content

Protect

Struct Protect 

Source
pub struct Protect<'a> {
    pub guard: &'a Guard,
    pub branch: &'a BranchInsts,
    pub scratch: [PhysReg; 2],
}
Expand description

What the stack protector’s check needs beyond the frame, in a function that has one.

Three things that come from three places, which is why they arrive together rather than being looked up here. Where the word the canary is copied from lives is a fact about the runtime the code is linked against. What a branch on a register is is a fact about the machine. And the two registers are neither: they are the ones the allocator was told to hold back, which is a decision about the allocator, and they are free at a return for exactly that reason.

Fields§

§guard: &'a Guard

Where the word the canary is a copy of lives, and what to call when the copy has changed.

§branch: &'a BranchInsts

What a branch on a register is, which is what the check ends its block with.

§scratch: [PhysReg; 2]

The two registers the check may use, which are two the allocator never handed out.

Trait Implementations§

Source§

impl<'a> Clone for Protect<'a>

Source§

fn clone(&self) -> Protect<'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 Protect<'a>

Source§

impl<'a> Debug for Protect<'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 Protect<'a>

§

impl<'a> RefUnwindSafe for Protect<'a>

§

impl<'a> Send for Protect<'a>

§

impl<'a> Sync for Protect<'a>

§

impl<'a> Unpin for Protect<'a>

§

impl<'a> UnsafeUnpin for Protect<'a>

§

impl<'a> UnwindSafe for Protect<'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.