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

Stack

Struct Stack 

Source
pub struct Stack {
    pub base: usize,
    pub size: usize,
    pub sp: AtomicUsize,
    pub phys_frame: AtomicU64,
    pub phys_page_count: AtomicUsize,
}
Expand description

Stack information

Fields§

§base: usize

Base address (lowest address, virtual)

§size: usize

Size in bytes

§sp: AtomicUsize

Current stack pointer

§phys_frame: AtomicU64

Physical frame number of the contiguous allocation from the frame allocator. Stored so cleanup can free the frames without walking page tables. Zero means no physical frames are owned by this Stack (e.g., user stacks whose frames are managed by the VAS).

§phys_page_count: AtomicUsize

Number of physical pages owned by this stack (for free_frames).

Implementations§

Source§

impl Stack

Source

pub fn new(base: usize, size: usize) -> Self

Create a new stack

Source

pub fn top(&self) -> usize

Get stack top (initial SP)

Source

pub fn contains(&self, addr: usize) -> bool

Check if address is within stack

Source

pub fn get_sp(&self) -> usize

Get current stack pointer

Source

pub fn set_sp(&self, sp: usize)

Set stack pointer

Trait Implementations§

Source§

impl Debug for Stack

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !Freeze for Stack

§

impl RefUnwindSafe for Stack

§

impl Send for Stack

§

impl Sync for Stack

§

impl Unpin for Stack

§

impl UnwindSafe for Stack

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