Skip to main content

strat9_kernel/shell/commands/sys/
frame_meta.rs

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