Login
Check-in [dba10e6aa4]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Merge 4.4 (x86_64): The guest's system calls

Reviewed against docs/tasks/4.4.md; verdict merge. Phase 4's demo passes on x86_64.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMXZyLk8eDgCjvQ9hX

Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: dba10e6aa47e0fd2aafb5322be46b6401076bc85cc8ce942366f5ef977c0f2fb
User & Date: x86-1-glint 2026-11-09 19:26:26.113
Context
2026-11-09
19:27
docs/boots: a recording of Glint running the test guest as a hypervisor

Claim: the boots page gains Phase 4's x86_64 demo. Glint places the test guest, enters it with SVM, serves its three calls, and returns to its shell.

Passage: the maintainer's request (ocx-console 6aad6a9710): 'it would be great to see how it is going without needing to get all the tools setup.'

Demonstration: the cast is the file bin/glint-run wrote at trunk dba10e6aa4 for that command, which exited 0.

Size: one cast (777 lines), 2 lines in boots.js.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMXZyLk8eDgCjvQ9hX check-in: eeaecdcc75 user: x86-1-glint tags: trunk

19:26
Merge 4.4 (x86_64): The guest's system calls

Reviewed against docs/tasks/4.4.md; verdict merge. Phase 4's demo passes on x86_64.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMXZyLk8eDgCjvQ9hX check-in: dba10e6aa4 user: x86-1-glint tags: trunk

19:26
4.4 (x86_64): The guest's system calls

Claim: in hypervisor mode Glint serves the guest. Vcpu#serve runs it in a loop bounded at 1000 exits, and Glint::GuestCalls.dispatch picks a handler by SMCCC function number, reading registers only through the vCPU interface so the aarch64 half reuses it. PSCI VERSION answers 0x2 (PSCI 0.2, Glint's choice for this subset). SYSTEM_OFF stops the guest: 'VM: guest powered off', then the shell. GLINT_CONSOLE_WRITE copies up to 4096 bytes out through translate and writes them to Glint's console only once all are copied. It returns INVALID_PARAMS (-2) for an empty, wrapping, oversized or out-of-RAM range, and writes nothing then. Any other ID gets NOT_SUPPORTED (-1). A non-call exit prints 4.3b's VM exit line and stops.

Passage: xv6 ยง4.3, paraphrased because the text isn't in the workspace: syscall uses the system call number to select the handler.

Demonstration: Phase 4's demo on x86_64. On x86-1, bin/glint-run x86_64 --mode hypervisor --guest build/x86_64/guest/test.efi printed 'Mode: hypervisor', 'test guest: started', 'test guest: PSCI version 0x0000000000000002' and 'VM: guest powered off', then the prompt; cat "hello.txt" still worked. spec/guest_calls_spec.cr drives the dispatcher over a fake vCPU through each function, an unknown ID, out-of-RAM, wrapping, over-cap and two-page writes. spec/run/phase4_spec.cr checks the boot's line order, with aarch64 pending. Full suite: 1730 examples, 13 failures, 2 errors, 28 pending; every failure is an aarch64 build or glint-build all. Codex wrote it from docs/tasks/4.4.md; the reviewer made no changes. Review notes: console_write stages the text in a 4 KiB stack buffer. Guest bytes reach the serial console unfiltered, including escape sequences; 4.5's checks should say whether that is acceptable.

Size: +122/-14 non-spec lines; largest new function copy_console, 1,147 bytes; BOOTX64.EFI 188,928 to 197,120 bytes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMXZyLk8eDgCjvQ9hX Leaf check-in: 338739d62e user: x86-1-glint tags: slice/4.4-x86_64

18:47
Task 4.4 (x86_64): The guest's system calls

Claim: docs/tasks/4.4.md has Glint run the guest in a bounded loop and dispatch each call by SMCCC function number through the vCPU interface only, so the aarch64 half reuses it. PSCI VERSION answers 0.2, SYSTEM_OFF stops the guest, GLINT_CONSOLE_WRITE copies the guest's text out through translate (refusing ranges outside guest RAM, wrapping or over a cap), and anything else gets NOT_SUPPORTED. The boot spec is the phase demo for x86_64.

Passage: docs/WORKFLOW.md, Handing out a slice, step 1.

Demonstration: the PSCI IDs and return codes named are U-Boot 2026.07 include/linux/psci.h's.

Size: one new task.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TUH8KMXZyLk8eDgCjvQ9hX check-in: 8a2d929623 user: x86-1-glint tags: trunk

Changes
Unified Diff Side-by-Side Diff Patch
Added boot/guest_calls.cr.
Changes to boot/vcpu.cr.
Changes to compat/zephyr/console.cr.
Changes to guest/test/README.md.
Added spec/guest_calls_spec.cr.
Changes to spec/run/phase4_spec.cr.
Changes to spec/run/vcpu_spec.cr.
Changes to spec/vcpu_spec.cr.