Skip to main content

InterruptStackFrameValue

Struct InterruptStackFrameValue 

#[repr(C)]
pub struct InterruptStackFrameValue { pub instruction_pointer: VirtAddr, pub code_segment: SegmentSelector, _reserved1: [u8; 6], pub cpu_flags: RFlags, pub stack_pointer: VirtAddr, pub stack_segment: SegmentSelector, _reserved2: [u8; 6], }
Expand description

Represents the interrupt stack frame pushed by the CPU on interrupt or exception entry.

Fields§

§instruction_pointer: VirtAddr

This value points to the instruction that should be executed when the interrupt handler returns. For most interrupts, this value points to the instruction immediately following the last executed instruction. However, for some exceptions (e.g., page faults), this value points to the faulting instruction, so that the instruction is restarted on return. See the documentation of the InterruptDescriptorTable fields for more details.

§code_segment: SegmentSelector

The code segment selector at the time of the interrupt.

§_reserved1: [u8; 6]§cpu_flags: RFlags

The flags register before the interrupt handler was invoked.

§stack_pointer: VirtAddr

The stack pointer at the time of the interrupt.

§stack_segment: SegmentSelector

The stack segment descriptor at the time of the interrupt (often zero in 64-bit mode).

§_reserved2: [u8; 6]

Implementations§

§

impl InterruptStackFrameValue

pub fn new( instruction_pointer: VirtAddr, code_segment: SegmentSelector, cpu_flags: RFlags, stack_pointer: VirtAddr, stack_segment: SegmentSelector, ) -> InterruptStackFrameValue

Creates a new interrupt stack frame with the given values.

pub unsafe fn iretq(&self) -> !

Call the iretq (interrupt return) instruction.

This function doesn’t have to be called in an interrupt handler. By manually construction a new InterruptStackFrameValue it’s possible to transition from a higher privilege level to a lower one.

§Safety

Calling iretq is unsafe because setting the instruction pointer, stack pointer, RFlags, CS and SS register can all cause undefined behaviour when done incorrectly.

Trait Implementations§

§

impl Clone for InterruptStackFrameValue

§

fn clone(&self) -> InterruptStackFrameValue

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
§

impl Copy for InterruptStackFrameValue

§

impl Debug for InterruptStackFrameValue

§

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

Formats the value using the given formatter. 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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = 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.