Files
StarForth/src/starkernel/vm
Robert Allan JamesandClaude Sonnet 5 57ac3fc304 Stage 1: per-VM native stacks, allocated but not yet executed on (FABRIC-3.md §XXVIII)
Second stage of the preemptive context-switching plan. Every VM (Hera,
every capsule_birth_baby()-born VM including WIREBIND identities) now
gets its own dedicated 2 MiB native C stack at birth -- but nothing runs
on it yet, that's Stage 2. Pure allocation-machinery proof.

Design correction made before writing code: the plan called for cloning
sk_vm_arena_alloc()'s guard-page pattern, but that pattern turns out to
be Mama-only -- host_services.c's kernel_alloc() gives every baby VM a
plain kmalloc() block for its dictionary arena, not a real guarded PMM
allocation. Stacks get the real treatment instead (new
sk_vm_native_stack_alloc()/_free() in arena.c): independent
pmm_alloc_contiguous() + guard pages for every VM without exception, no
singleton, no kmalloc fallback -- a stack overflow is exactly the
failure mode guard pages exist for, and a corrupted stack could corrupt
whatever saved context Stage 2 trusts.

2 MiB size matches this project's own established kernel-stack
convention (g_kernel_stack/g_rpi5_native_stack), not a guess -- that one
shared 2 MiB stack today already carries all VMs' combined nested
VM-EXEC recursion.

Three new VM struct fields, freed in vm_cleanup() alongside the existing
call_stack free. Allocation failure is non-fatal to birth.

All 3 architectures re-verified clean boot to ok>, no native-stack
allocation failures for any Tripod-fleet VM.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016UNhH1mhi52i6Qihh7ZV5S
2026-09-13 14:30:46 -04:00
..

src/starkernel/vm/

Kernel-side StarForth VM subsystem.

  • vm_core.c — kernel port of the core interpreter loop.
  • vm_runtime.c — kernel VM runtime support.
  • vm_bootstrap.c — kernel VM bootstrap (distinct from bootstrap/sk_vm_bootstrap.c, which owns the higher-level subsystem wiring called from kernel_main.c).
  • arena.c — capsule arena allocator (fixed-region allocation for capsule payload data).
  • parity.c — birth/execution parity logging (VM ID + capsule hash + dictionary hash), enabling offline determinism verification.
  • alloc_kernel.c — the kernel-side implementation of the VM's allocator interface actually referenced by Makefile.starkernel's build (see src/platform/README.md for a note on a second, unwired copy).
  • q48_stubs.c — deliberate no-op stubs for q48_from_double()/ q48_to_double() in the freestanding kernel build, where floating point is unavailable; always returns zero, safe because shared VM code only uses these results for logging/diagnostic paths that are inactive in the kernel build.
  • vm_internal.h — internal-only declarations shared across this directory's files.

Subdirectories:

  • bootstrap/sk_vm_bootstrap.c — owns VM init + capsule loading wiring, called from kernel_main.c; kernel_main.c itself only owns hardware milestones.
  • host/shim.c — host-service shim bridging the kernel VM to src/starkernel/hal/host_services.c.