⚠️ VeridianOS Kernel Documentation - This is low-level kernel code. All functions are unsafe unless explicitly marked otherwise. no_std

X86_64Context

Struct X86_64Context 

Source
#[repr(C)]
pub struct X86_64Context {
Show 27 fields pub r15: u64, pub r14: u64, pub r13: u64, pub r12: u64, pub r11: u64, pub r10: u64, pub r9: u64, pub r8: u64, pub rdi: u64, pub rsi: u64, pub rbp: u64, pub rbx: u64, pub rdx: u64, pub rcx: u64, pub rax: u64, pub rsp: u64, pub rip: u64, pub rflags: u64, pub cs: u16, pub ss: u16, pub ds: u16, pub es: u16, pub fs: u16, pub gs: u16, pub cr3: u64, pub fpu_state: *mut FpuState, pub tls_base: u64,
}
Expand description

x86_64 CPU context

Fields§

§r15: u64

General purpose registers

§r14: u64§r13: u64§r12: u64§r11: u64§r10: u64§r9: u64§r8: u64§rdi: u64§rsi: u64§rbp: u64§rbx: u64§rdx: u64§rcx: u64§rax: u64§rsp: u64

Stack pointer

§rip: u64

Instruction pointer

§rflags: u64

CPU flags

§cs: u16

Segment registers

§ss: u16§ds: u16§es: u16§fs: u16§gs: u16§cr3: u64

Control registers

§fpu_state: *mut FpuState

Floating point state pointer

§tls_base: u64

TLS base (FS base for user)

Implementations§

Source§

impl X86_64Context

Source

pub fn new(entry_point: usize, stack_pointer: usize) -> Self

Create new context for a task

Source

pub fn new_user(entry_point: usize, stack_pointer: usize) -> Self

Create a user-mode context for a process.

Uses Ring 3 segment selectors (CS=0x33, SS/DS/ES=0x2B) and enables interrupts (RFLAGS IF bit). The CR3 is set to the current page table so the process initially shares the kernel’s address space (with user-accessible mappings added separately).

Trait Implementations§

Source§

impl Clone for X86_64Context

Source§

fn clone(&self) -> X86_64Context

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for X86_64Context

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for X86_64Context

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl ThreadContext for X86_64Context

Source§

fn new() -> Self

Create a new empty context
Source§

fn init( &mut self, entry_point: usize, stack_pointer: usize, _kernel_stack: usize, )

Initialize context for a new thread
Source§

fn get_instruction_pointer(&self) -> usize

Get instruction pointer
Source§

fn set_instruction_pointer(&mut self, ip: usize)

Set instruction pointer
Source§

fn get_stack_pointer(&self) -> usize

Get stack pointer
Source§

fn set_stack_pointer(&mut self, sp: usize)

Set stack pointer
Source§

fn set_tls_base(&mut self, base: u64)

Set user TLS base for this context (FS/TP).
Source§

fn tls_base(&self) -> u64

Get user TLS base stored in this context.
Source§

fn get_kernel_stack(&self) -> usize

Get kernel stack pointer
Source§

fn set_kernel_stack(&mut self, sp: usize)

Set kernel stack pointer
Source§

fn set_return_value(&mut self, value: usize)

Set return value (for syscalls, fork, etc.)
Source§

fn clone_from(&mut self, other: &Self)

Clone the context
Source§

fn to_task_context(&self) -> TaskContext

Convert to scheduler’s TaskContext
Source§

impl Send for X86_64Context

Source§

impl Sync for X86_64Context

Auto Trait Implementations§

§

impl Freeze for X86_64Context

§

impl RefUnwindSafe for X86_64Context

§

impl Unpin for X86_64Context

§

impl UnwindSafe for X86_64Context

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

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
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.