diff options
| author | salmonik <salmonik@tuta.io> | 2026-08-03 00:21:52 +0200 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-08-03 00:21:52 +0200 |
| commit | 834b931d068a9a76e2c2a85267f24a22e93276cf (patch) | |
| tree | 55fec8d47398a51a0c40dec8fba4f9664a12233a /rsnix/src/gop.rs | |
| parent | v0.5.7: vt verify also as a boot marker (real hardware has no serial) (diff) | |
| download | rs-dos-834b931d068a9a76e2c2a85267f24a22e93276cf.tar.gz rs-dos-834b931d068a9a76e2c2a85267f24a22e93276cf.zip | |
v0.5.7: guard dumps block-header math + 16-word window; vt content verify; shadow marker
The klog -t 2 crash drops a 126-byte String (the vt verify klog line)
whose data ptr 0x40444970 points into the first-heap-block region whose
content is the firmware 0x00AAAAAA scrub — a stale pointer, not a real
allocation (back-pointer slot never written). Upgrades so the next
real-hardware crash shows the full picture:
- guard: explicit candidate block bases (b=ptr-24 / b16=ptr-32) with
their size/free fields, plus a 16-word window (mem..mem4) from
ptr-0x30 instead of the old 8 words
- vt::debug_verify: content probe of the cells grid (must be all-BLANK
at shell entry) — catches a stale in-heap cells pointer that passes
the range checks
- gop: on-screen marker for shadow carved vs NO-SHADOW fallback
(the scrub content at the crash ptr suggests the shadow was rejected
and its block stayed free + firmware-scrubbed)
Diffstat (limited to 'rsnix/src/gop.rs')
| -rw-r--r-- | rsnix/src/gop.rs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/rsnix/src/gop.rs b/rsnix/src/gop.rs index 7aeb224..8e804e5 100644 --- a/rsnix/src/gop.rs +++ b/rsnix/src/gop.rs | |||
| @@ -293,6 +293,13 @@ pub fn init(gop: &mut GraphicsOutputProtocol) { | |||
| 293 | .map(|c| core::str::from_utf8(c).unwrap_or("?")) | 293 | .map(|c| core::str::from_utf8(c).unwrap_or("?")) |
| 294 | .collect(); | 294 | .collect(); |
| 295 | dump_lines(&lines); | 295 | dump_lines(&lines); |
| 296 | crate::gop::boot_marker("gop: NO-SHADOW (fallback mode)"); | ||
| 297 | } else { | ||
| 298 | crate::gop::boot_marker(&alloc::format!( | ||
| 299 | "gop: shadow {:#x} {:.2} MiB", | ||
| 300 | SHADOW as usize, | ||
| 301 | swords as f64 * 4.0 / 1048576.0 | ||
| 302 | )); | ||
| 296 | } | 303 | } |
| 297 | } | 304 | } |
| 298 | } | 305 | } |
