pub struct UserContext {
pub fs_base: u64,
pub gs_base: u64,
/* private fields */
}uspace only.Expand description
Context to enter user space.
Fields§
§fs_base: u64User-owned FS segment base.
CR4.FSGSBASE stays disabled, so userspace cannot modify this value
without an arch_prctl-style kernel operation updating this image.
gs_base: u64User-owned GS segment base.
Implementations§
Source§impl UserContext
impl UserContext
Sourcepub fn new(entry: usize, ustack_top: VirtAddr, arg0: usize) -> Self
pub fn new(entry: usize, ustack_top: VirtAddr, arg0: usize) -> Self
Creates a new context with the given entry point, user stack pointer, and the argument.
Sourcepub fn prepare_clone_child_return_state(&mut self)
pub fn prepare_clone_child_return_state(&mut self)
Normalizes a cloned user context so it can safely return to ring 3.
Sourcepub fn clear_single_step_after_debug(&mut self) -> bool
pub fn clear_single_step_after_debug(&mut self) -> bool
Clears the single-step trap flag after a debug exception.
Returns whether the flag had been set in the saved user context.
Sourcepub const fn syscall_insn_len(&self) -> usize
pub const fn syscall_insn_len(&self) -> usize
Returns the syscall instruction length in bytes.
Sourcepub fn has_interruptible_user_return_mode(&self) -> bool
pub fn has_interruptible_user_return_mode(&self) -> bool
Returns whether this register image can be restored as an interruptible ring-3 context.
Sourcepub unsafe fn run_unchecked(&mut self) -> ReturnReason
pub unsafe fn run_unchecked(&mut self) -> ReturnReason
Enters user space without validating the runtime transition.
It restores the user registers and jumps to the user entry point
(saved in rip).
This function returns when an exception or syscall occurs.
§Safety
The caller must be the runtime’s prepared user-entry boundary for the
current scheduler task. Its context-switch tail must be complete, no
IRQ/preemption guard or hard interrupt may be active, and local IRQs
must remain disabled after the final scheduler-work check. The active
logical address space, hardware root and CPU footprint must match this
task and keep every user address referenced by self valid. The saved
selectors and RFLAGS must describe an interruptible ring-3 return. No
code may run between those validations and this call.
Safe code cannot invoke this raw boundary:
fn bypass_runtime(context: &mut ax_cpu::uspace::UserContext) {
context.run_unchecked();
}Methods from Deref<Target = TrapFrame>§
Sourcepub fn origin(&self) -> TrapOrigin
pub fn origin(&self) -> TrapOrigin
Returns the privilege domain represented by this register image.
Sourcepub fn set_retval(&mut self, rax: usize)
pub fn set_retval(&mut self, rax: usize)
Sets the return value register.
Trait Implementations§
Source§impl Clone for UserContext
impl Clone for UserContext
Source§fn clone(&self) -> UserContext
fn clone(&self) -> UserContext
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more