#[repr(C)]pub(super) struct Context {
pub base: Base,
pub trap_rsp: *mut u8,
pub user_rsp: usize,
phantom: PhantomPinned,
}
Expand description
Extended Base for x86-64.
Fields§
§base: Base
§trap_rsp: *mut u8
§user_rsp: usize
§phantom: PhantomPinned
Implementations§
Source§impl Context
impl Context
pub fn new(base: Base, arch: &ArchConfig) -> Self
Sourcepub unsafe fn activate(self: Pin<&mut Self>)
pub unsafe fn activate(self: Pin<&mut Self>)
Set kernel GS
segment register to self
.
At a glance this may looks incorrect due to 0xc0000102
is KERNEL_GS_BAS
according to the
docs. The problem is the CPU always use the value from 0xc0000101
regardless the current
privilege level. That means KERNEL_GS_BAS
is the name when the CPU currently on the user
space.
This also set user-mode FS
and GS
to null.
pub unsafe fn load_static_ptr<const O: usize, T>() -> *const T
pub unsafe fn load_ptr<const O: usize, T>() -> *const T
pub unsafe fn load_volatile_usize<const O: usize>() -> usize
Auto Trait Implementations§
impl Freeze for Context
impl !RefUnwindSafe for Context
impl !Send for Context
impl !Sync for Context
impl !Unpin for Context
impl !UnwindSafe for Context
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more