Skip to main content

strat9_kernel/shell/commands/sys/
frame_meta.rs

1//! Inspect per-frame metadata (issue #38).
2
3use crate::{arch::xshim::PhysAddr, memory, shell::ShellError, shell_println};
4use alloc::string::String;
5
6/// `frame-meta <phys_hex>` : print generation, guard bits, and vtable bits for one physical frame.
7pub fn cmd_frame_meta(args: &[String]) -> Result<(), ShellError> {
8    if args.len() < 2 {
9        shell_println!("Usage: frame-meta <phys_hex>");
10        return Ok(());
11    }
12
13    let raw = args[1].as_str();
14    let hex = raw
15        .strip_prefix("0x")
16        .or_else(|| raw.strip_prefix("0X"))
17        .unwrap_or(raw);
18    let addr = u64::from_str_radix(hex, 16).map_err(|_| ShellError::InvalidArguments)?;
19
20    let (gen, guard, vtab) = memory::frame_meta_debug_snapshot(PhysAddr::new(addr));
21    shell_println!(
22        "frame phys={:#x} generation={} guard={:#x} vtable_bits={:#x}",
23        addr,
24        gen,
25        guard,
26        vtab
27    );
28    Ok(())
29}