Skip to content

vms-2655: joint-e2e port link opts into the CRTL->RMS veneer + LIBVMSRMS$SHR (rung 3) - #1061

Merged
baron-3dl merged 1 commit into
mainfrom
work/vms-2655-alpha-port-link
Sep 7, 2026
Merged

vms-2655: joint-e2e port link opts into the CRTL->RMS veneer + LIBVMSRMS$SHR (rung 3)#1061
baron-3dl merged 1 commit into
mainfrom
work/vms-2655-alpha-port-link

Conversation

@baron-3dl

Copy link
Copy Markdown
Contributor

Summary

  • Rung 3 of vms-b4f (rd vms-2655): build-joint-image.sh gains an opt-in JOINT_CRTL_RMS_VENEER=1 (default 0, byte-identical otherwise) that composes rung 2's two-pass DECC$SHR veneer bootstrap (decc-veneer/build-decc-veneer.sh) into the port-link recipe — pass 1 raises the OVMX producer graph through LIBVMSRMS$SHR, pass 2 rebuilds DECC$SHR with ALPHA_CRTL_RMS_USE so decc$fopen/fwrite/fread/fclose alias to the crtl_rms_stdio.c veneer instead of musl-POSIX.
  • The final link adds --use LIBVMSRMS$SHR and stages LIBVMSRMS$SHR.EXE in OUTDIR alongside DECC$SHR/LIBOTS (the SYS$SHARE search-path set).
  • Adds a toolchain-only CI leg (inside joint-e2e-alpha-crt0) that builds crtl_rms_test.c with the veneer opted in and asserts: veneer-wired log line, sys$create/open/connect/put/get/close bound to LIBVMSRMS$SHR inside DECC$SHR's own pass-2 build, zero deferred/undef/muldef on the final port-image link, EM_ALPHA/ET_DYN, and the port image's own decc$fopen import binding to that same veneer-wired DECC$SHR producer.
  • Default (var unset) path is unchanged — the real-executive activation gates (run-module-gp-activation-alpha.sh's gate/crtl-rms-gate/mf-gate) never set the new var, so they stay on the plain DECC$SHR path. The runtime write-to-ODS-2 proof needs the LLP64 width fix (vms-1fc) and is rung 4 (vms-f49) — out of scope here.

Verification (local, docker + host LINK.EXE, ovmx-cross-alpha-vms:latest)

  • Default build: byte-identical to before — zero UNDEF/MULDEF/DEFERRED, same staged files.
  • JOINT_CRTL_RMS_VENEER=1 JOINT_MAIN=crtl_rms_test.c: DECC$SHR pass 2 logs mk_decc_shr: CRTL->RMS stdio veneer wired: decc$fopen/fwrite/fread/fclose -> ovmx_crtl_* (--use .../LIBVMSRMS$SHR.EXE) and binds sys$create/open/connect/put/get/close to LIBVMSRMS$SHR.EXE; the final joint_e2e.exe link (post-crt0) is zero deferred/undef/muldef, %LINK-S-CREATED, .../joint_e2e.exe: EVAX/Alpha ET_DYN, readelf shows Machine: Alpha / Type: DYN; the image's own decc$fopen import binds to the veneer-wired DECC$SHR.EXE producer.

Test plan

  • bash -n syntax check on the modified script
  • Local default build reproduces the pre-existing zero-deferred link byte-for-byte
  • Local JOINT_CRTL_RMS_VENEER=1 build produces the veneer-wiring + sys$* binding + zero-deferred/EM_ALPHA/ET_DYN evidence
  • Extracted new CI gate script run standalone against the local build output — passes
  • CI green-by-SHA (pending — will report once checks complete)

🤖 Generated with Claude Code

https://claude.ai/code/session_01FJZf62TMXxvy6fXzFQYfLQ

…RMS$SHR (rung 3)

build-joint-image.sh gains JOINT_CRTL_RMS_VENEER=1 (default 0, byte-identical
otherwise), which composes rung 2's two-pass DECC$SHR veneer bootstrap
(build-decc-veneer.sh) into the port-link recipe: pass 1 builds a bootstrap
DECC$SHR to raise the OVMX producer graph through LIBVMSRMS$SHR, pass 2
rebuilds DECC$SHR with ALPHA_CRTL_RMS_USE so decc$fopen/fwrite/fread/fclose
alias to the crtl_rms_stdio.c veneer instead of musl-POSIX. The final link
adds --use LIBVMSRMS$SHR and stages LIBVMSRMS$SHR.EXE in OUTDIR alongside
DECC$SHR/LIBOTS.

Verified locally (docker + host LINK.EXE, ovmx-cross-alpha-vms:latest):
- default (unset) build is byte-identical to before (zero UNDEF/MULDEF/
  DEFERRED, same staged files).
- JOINT_CRTL_RMS_VENEER=1 JOINT_MAIN=crtl_rms_test.c: DECC$SHR pass 2 logs the
  veneer wiring + sys$create/open/connect/put/get/close bound to
  LIBVMSRMS$SHR; the final joint_e2e.exe link is zero deferred/undef/muldef,
  EM_ALPHA/ET_DYN, and its own decc$fopen import binds to that same
  veneer-wired DECC$SHR producer -- the import-map chain proving the port
  image's fopen resolves to RMS, not musl-POSIX.

Adds a toolchain-only CI leg (joint-e2e-alpha-crt0) exercising the veneer
link with the same assertions; no qemu boot. The existing real-executive
activation gates (run-module-gp-activation-alpha.sh's gate/crtl-rms-gate/
mf-gate) never set the new var, so they stay on the plain DECC$SHR path
until the LLP64 width fix (vms-1fc) makes an RMS-routed fopen
activation-safe on real /dev/vms -- that runtime proof is rung 4 (vms-f49).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJZf62TMXxvy6fXzFQYfLQ
@baron-3dl
baron-3dl merged commit 815d4c0 into main Sep 7, 2026
113 checks passed
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