#[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: PhantomPinnedImplementations§
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(super) unsafe fn store_ptr<const O: usize, T>(v: *const T)
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