Struct UspaceContext

pub struct UspaceContext(/* private fields */);
Available on crate feature uspace only.
Expand description

Context to enter user space.

Implementations§

§

impl UspaceContext

pub const fn empty() -> UspaceContext

Creates an empty context with all registers set to zero.

pub fn new(entry: usize, ustack_top: VirtAddr, arg0: usize) -> UspaceContext

Creates a new context with the given entry point, user stack pointer, and the argument.

pub const fn from(tf: &TrapFrame) -> UspaceContext

Creates a new context from the given TrapFrame.

It copies almost all registers except CS and SS which need to be set to the user segment selectors.

pub const fn get_ip(&self) -> usize

Gets the instruction pointer.

pub const fn get_sp(&self) -> usize

Gets the stack pointer.

pub const fn set_ip(&mut self, rip: usize)

Sets the instruction pointer.

pub const fn set_sp(&mut self, rsp: usize)

Sets the stack pointer.

pub const fn set_retval(&mut self, rax: usize)

Sets the return value register.

pub unsafe fn enter_uspace(&self, kstack_top: VirtAddr) -> !

Enters user space.

It restores the user registers and jumps to the user entry point (saved in rip). When an exception or syscall occurs, the kernel stack pointer is switched to kstack_top.

§Safety

This function is unsafe because it changes processor mode and the stack.

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