Skip to content

vms-76c3: wire F$GETSYI("ARCH_NAME") in the DCL lexical + running per-arch battery coverage - #868

Merged
baron-3dl merged 1 commit into
mainfrom
work/vms-76c3-getsyi-archname
Aug 28, 2026
Merged

baron-3dl merged 1 commit into
mainfrom
work/vms-76c3-getsyi-archname

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

Closes out the F$GETSYI coverage — the arch token now has a running per-arch proof on a real boot, not just the host unit test.

The gap

F$GETSYI("ARCH_NAME") was unwired in the DCL lexical (dcl_lexical.c handled only VERSION/HW_NAME/…), so it fell through to "0" — even though vms-10e made ovmx_hw_arch() report VAX/Alpha (was "UNKNOWN") and the $GETSYI service (sys_misc.c SYI$_ARCH_NAME) already returned it. So a user typing WRITE SYS$OUTPUT F$GETSYI("ARCH_NAME") in DCL got 0.

Change

  • dcl_lexical.c: F$GETSYI("ARCH_NAME")ovmx_hw_arch() (the same SSOT the service uses, so the two surfaces never disagree). NOT space-padded — byte-confirmed on the live oracle ("Alpha" exact), a plain copy unlike VERSION's fixed 8-char field.
  • shared battery: a bracketed WRITE F$GETSYI("ARCH_NAME") assertion (all three gates) against caller-provided EXPECTED_ARCH_NAME, plus a [0] bug guard for the old unwired fall-through.
  • gate drivers set their build arch: VAX→"VAX", Alpha→"Alpha", x86_64→"X86_64" / aarch64→"AARCH64".

Cascade

  • API-compat: additive (new item code); no caller breaks; the service path unchanged.
  • Test: the arch token is now proven per-arch on a real boot (was host-unit-test-only). x86 host unit test still covers ovmx_hw_arch()=="X86_64".
  • Doc: none.

Validation

VAX rail run in progress (SHA bd75003, FORCE_SYSVOL_BUILD=1 rebuilds DCL.EXE) — asserts [VAX]. Alpha [Alpha] / x86 [X86_64] ride their gates. Green-by-SHA report to follow.

🤖 Generated with Claude Code

…-arch battery coverage

Closes out the F$GETSYI coverage. F$GETSYI("ARCH_NAME") was UNWIRED in the DCL
lexical (dcl_lexical.c handled only VERSION/HW_NAME/...), so it fell through to
"0" -- while the $GETSYI SERVICE (sys_misc.c SYI$_ARCH_NAME) already returned the
real arch token via ovmx_hw_arch(). vms-10e made ovmx_hw_arch() report VAX/Alpha
(was UNKNOWN), but only the host unit test covered it; the arch token had no
running per-arch proof.

- dcl_lexical.c: F$GETSYI("ARCH_NAME") -> ovmx_hw_arch() (the SAME SSOT the
  service uses, so the two surfaces never disagree). NOT space-padded (byte-
  confirmed on the live oracle: "Alpha" exact) -- a plain copy, unlike VERSION's
  fixed 8-char field.
- shared battery: a bracketed WRITE F$GETSYI("ARCH_NAME") assertion (all three
  gates) against caller-provided EXPECTED_ARCH_NAME, plus a '[0]' bug guard for
  the old unwired fall-through. New EXPECTED_ARCH_NAME contract var.
- gate drivers set their build arch: VAX -> "VAX", Alpha -> "Alpha", x86_64 ->
  "X86_64" / aarch64 -> "AARCH64".

Cascade: API-compat additive (new item code, no caller breaks); test = the new
runtime battery assertion (arch token now proven per-arch on a real boot, not
just the host unit test); no doc.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QSU1Hfy7UzVE6msx3hecWM
@baron-3dl
baron-3dl merged commit 3fbab97 into main Aug 28, 2026
5 checks passed
@baron-3dl
baron-3dl deleted the work/vms-76c3-getsyi-archname branch August 28, 2026 19:52
baron-3dl added a commit that referenced this pull request Aug 28, 2026
…y.sh)

vms-76c3/#868 added tests/qemu/lib/dcl_acceptance_battery.sh (used by the DCL
ACCEPTANCE harness, not run_tests.sh), but tests/qemu/Dockerfile's guard still
demanded lib/ hold exactly ONE file -- so the kernel-executive image build
(kernel-executive-shard, ci.yml) failed FATAL before booting a single suite.
Replace the bare count with an allow-list: harness_verdict.sh (copied in) and
dcl_acceptance_battery.sh (intentionally not in this image); any OTHER file still
trips the guard. Not a weakening -- a new unaccounted helper still fails the build.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
baron-3dl added a commit that referenced this pull request Aug 28, 2026
…ST + $DEQ) (#873)

* vms-904c: DLM rung 3 — cross-node contention (block-then-grant + BLKAST + $DEQ)

Lift the H4 ENQ scope-fence for real on the mastering node. An incompatible
cross-node $ENQ now QUEUES on the master's real waiting queue (VMS_DLM_STS_QUEUED
— not SS$_NORMAL, not SS$_NOTQUEUED), the master fires the blocking-AST decision
naming the remote holder (blocking_csid), and a real cross-node $DEQ
(vms_lock_dlm_xnode_deq, authorized by CSID) releases and grants the blocked
request. Higher rungs (directory/remaster/LVB/deadlock) stay honestly
SS$_UNSUPPORTED or omitted (INV-6 — no fake grant OR block).

- kernel-core/vms_lock.c: vms_enq_core -> vms_enq_core_ex(xn); cross-node mode
  skips proc-keyed deadlock detection (distributed = rung 7) and queues instead
  of declining; new vms_lock_dlm_xnode_deq; dispatch ENQ/DEQ rewritten.
- vms_ioctl.h: vms_dlm_xnode_args gains queued/blocking_csid/blocking_master_lkid
  outputs; VMS_DLM_STS_QUEUED sentinel.
- vms_kif dlm_xnode: return the contention outputs.
- test_syssvc_dlm_xnode.c: assert grant -> block (granted NL, BLKAST directive
  = holder) -> $DEQ -> grant (NL->EX flip) on real /dev/vms (x86_64 + Alpha LP64).
- cluster-dlm.yaml: cross-node-lock -> partial (contention landed); split out the
  still-absent remaster/LVB/deadlock rungs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* vms-904c: mirror the extended vms_dlm_xnode_args into the NetBSD kernel-core header

src/kernel-netbsd/vms_lock_nb.h carries its own copy of struct
vms_dlm_xnode_args (kernel-core is shared Linux vms.ko + NetBSD vms.kmod) with a
size static-assert. Add queued/blocking_csid/blocking_master_lkid + the
VMS_DLM_STS_QUEUED sentinel and bump the assert 84 -> 92 to match src/kernel/
vms_ioctl.h, else the NetBSD/VAX module leg reds on the ABI-freeze assert.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* tests/qemu: fix lib_check guard broken by #868 (dcl_acceptance_battery.sh)

vms-76c3/#868 added tests/qemu/lib/dcl_acceptance_battery.sh (used by the DCL
ACCEPTANCE harness, not run_tests.sh), but tests/qemu/Dockerfile's guard still
demanded lib/ hold exactly ONE file -- so the kernel-executive image build
(kernel-executive-shard, ci.yml) failed FATAL before booting a single suite.
Replace the bare count with an allow-list: harness_verdict.sh (copied in) and
dcl_acceptance_battery.sh (intentionally not in this image); any OTHER file still
trips the guard. Not a weakening -- a new unaccounted helper still fails the build.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* vms-904c: regenerate compatibility-surface.md from cluster-dlm.yaml (INV-LEDGER)

Derived surface regen after the cluster-dlm rung-3 yaml edit (partial +1, real +1,
406 items). tools/compat/render_compat.py; md is generated, yaml is source.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant