From 5707323e10f88bf7bd8010f158293bdd98e7826c Mon Sep 17 00:00:00 2001 From: Simon Dick Date: Tue, 28 Jul 2026 04:16:52 +0100 Subject: [PATCH] Add COPPERLINE= override to work around the 68000/68010 hostfs hang [[filesys]] host-directory boot mounts hang forever on a 68000/68010 guest under released Copperline 0.12.0/0.13.0 (a 16-bit-bus move.l split never rings the hostfs MMIO doorbell). Root-caused and fixed upstream in CopperlineHQ/Copperline#312, not yet released, so run.sh/bench.sh keep their configs on real 68000 and gain a COPPERLINE= env var to point at a fixed local build instead of working around it by raising the CPU model (which would invalidate bench.sh's 68000 KDF-throughput numbers). Also fixes an unrelated pre-existing link error in bench.sh's docker build: hmac.c unconditionally defines the SHA-256/512 HMAC variants, so sha256.c/sha512.c need to be linked even though this benchmark only exercises SHA-1. Co-Authored-By: Claude Sonnet 5 --- docs/copperline-bugreport/0.11.0-serial.log | 39 ++++ docs/copperline-bugreport/0.11.0-stderr.log | 19 ++ docs/copperline-bugreport/0.12.0-serial.log | 26 +++ docs/copperline-bugreport/0.12.0-stderr.log | 19 ++ .../0.13.0-boot-stuck.png | Bin 0 -> 42571 bytes docs/copperline-bugreport/0.13.0-serial.log | 26 +++ docs/copperline-bugreport/0.13.0-stderr.log | 19 ++ docs/copperline-bugreport/REPORT.md | 199 ++++++++++++++++++ tests/copperline/README.md | 19 +- tests/copperline/bench.sh | 25 ++- tests/copperline/machine.toml | 15 +- tests/copperline/run.sh | 14 +- 12 files changed, 402 insertions(+), 18 deletions(-) create mode 100644 docs/copperline-bugreport/0.11.0-serial.log create mode 100644 docs/copperline-bugreport/0.11.0-stderr.log create mode 100644 docs/copperline-bugreport/0.12.0-serial.log create mode 100644 docs/copperline-bugreport/0.12.0-stderr.log create mode 100644 docs/copperline-bugreport/0.13.0-boot-stuck.png create mode 100644 docs/copperline-bugreport/0.13.0-serial.log create mode 100644 docs/copperline-bugreport/0.13.0-stderr.log create mode 100644 docs/copperline-bugreport/REPORT.md diff --git a/docs/copperline-bugreport/0.11.0-serial.log b/docs/copperline-bugreport/0.11.0-serial.log new file mode 100644 index 0000000..c7fd0f3 --- /dev/null +++ b/docs/copperline-bugreport/0.11.0-serial.log @@ -0,0 +1,39 @@ +ROMInfo: 1MiB ROM detected +ROMInfo: ROM region(s).. +ROMInfo: 0x00e00000 - 0x00e7ffff +ROMInfo: 0x00f80000 - 0x00ffffff +Found board 00e80000: mfg=5192 prod=2 size=00010000 serial=00000b00 diag=00000000 +Configuring board: cd=00000468 mfg=5192 prod=2 size=00010000 type=c1 +-> configured, 00e90000 - 00e9ffff +Found board 00e80000: mfg=5192 prod=5 size=00010000 serial=00000000 diag=00000048 +Configuring board: cd=000004b0 mfg=5192 prod=5 size=00010000 type=d1 +-> configured, 00ea0000 - 00eaffff +callroms +Read boot ROM base=00e90000 cd=00000468 type=c1 +Board without boot ROM +Read boot ROM base=00ea0000 cd=000004b0 type=d1 +da_Config=90 +Size=0048 DiagPoint=000e BootPoint=0014 Name=003c +Name='Copperline' +Call boot rom @00c1ba66 board 00ea0000 diag 00c1ba58 configdev 000004b0 +->success +callroms done +00c00000: 00c00000 - 00c80000 00001705 -5 'memory' +00000400: 00000400 - 00080000 00001703 -10 'chip memory' +00c01108: 00f80000 - 01000000 00000400 -128 'Kickstart ROM' +00c01128: 00e00000 - 00e80000 00000400 -128 'Kickstart ROM' +romtaginit +romtaginit done +BEGIN +HOTP0=755224 +HOTP1=287082 +HOTP2=359152 +HOTP3=969429 +HOTP4=338314 +HOTP5=254676 +HOTP6=287922 +HOTP7=162583 +HOTP8=399871 +HOTP9=520489 +DRBG=be491355307bb821bf72d7f115d91156 +END diff --git a/docs/copperline-bugreport/0.11.0-stderr.log b/docs/copperline-bugreport/0.11.0-stderr.log new file mode 100644 index 0000000..c925e1d --- /dev/null +++ b/docs/copperline-bugreport/0.11.0-stderr.log @@ -0,0 +1,19 @@ +[2026-07-25T10:29:48Z INFO copperline::config] no ROM specified; booting bundled AROS (/private/tmp/claude-501/-Users-simond-src-amiauth/112d2853-3264-4e03-90b2-abdf1b359ea6/scratchpad/cl011/Copperline.app/Contents/Resources/aros/aros-amiga-m68k-rom.bin) +[2026-07-25T10:29:48Z INFO copperline] config: cpu=M68000 fpu=false cpu_clock=7.09MHz chip_ram=512K fast_ram=0K slow_ram=512K z3_ram=0K zorro_boards=0 chipset=Ecs (agnus=Ecs8372Rev4 denise=Ocs) video=Pal rom=/private/tmp/claude-501/-Users-simond-src-amiauth/112d2853-3264-4e03-90b2-abdf1b359ea6/scratchpad/cl011/Copperline.app/Contents/Resources/aros/aros-amiga-m68k-rom.bin floppy_drives=1 +[2026-07-25T10:29:48Z INFO copperline] audio: disabled (null sink); no sound +[2026-07-25T10:29:48Z INFO copperline] emulation timing: deterministic core, paced=false +[2026-07-25T10:29:48Z INFO copperline::emulator] extended ROM: /private/tmp/claude-501/-Users-simond-src-amiauth/112d2853-3264-4e03-90b2-abdf1b359ea6/scratchpad/cl011/Copperline.app/Contents/Resources/aros/aros-amiga-m68k-ext.bin at 0xE00000 +[2026-07-25T10:29:48Z INFO copperline::emulator] machine profile: A500 (gate array None, rtc false) +[2026-07-25T10:29:48Z INFO copperline::emulator] real pacing budget: returned m68k cycles plus explicit chip-bus waits +[2026-07-25T10:29:52Z INFO copperline::zorro] zorro II board "Copperline" autoconfigured at 0x00E90000 +[2026-07-25T10:29:52Z INFO copperline::zorro] zorro II board "Copperline services" autoconfigured at 0x00EA0000 +[2026-07-25T10:29:52Z INFO copperline::filesys] filesys: expansion init at board 0x00EA0000, 1 mount(s) +[2026-07-25T10:29:53Z INFO copperline::bus::custom_regs] BPLCON3 write 0x0C00 dropped (OCS Denise); further drops not logged +[2026-07-25T10:29:53Z INFO copperline::filesys] filesys: HOSTFS0: handler started (AmiAuthTest: -> sys) +[2026-07-25T10:29:57Z INFO copperline] benchmark: ran 40.007s emulated to 40.000s target in 8.771s wall, 1997 frames (227.7/s) +[2026-07-25T10:29:57Z INFO copperline] benchmark frame times: p50=3.38ms p90=4.10ms p99=4.85ms max=5.21ms +[2026-07-25T10:29:57Z INFO copperline] benchmark frame times: all 2509 frames within the 20ms budget +[2026-07-25T10:29:57Z INFO copperline::emulator] emu stats: 8.8s elapsed, 40.0s emulated (456.1%), 2509 frames (286.0/s), 18195147 slices (2074416.2/s), ~2.06 MIPS +[2026-07-25T10:29:57Z INFO copperline::bus] video pipeline stats (emu stats): bitplane_fetch calls=13455669 slots=13455669 rows_started=168196 rows_completed=0 time=0.000ms, sprite_fetch calls=4553192 pair_slots=4553192 lines=10532 time=187.508ms +[2026-07-25T10:29:57Z INFO copperline::bus] video pipeline stats (emu stats): collisions calls=0 pixels=0 full_line_scans=0 control_segments=0 time=0.000ms avg=0.0ns/pixel +[2026-07-25T10:29:57Z INFO copperline::bus] video pipeline stats (emu stats): render frames=0 events=0 control_segments=0 playfield_pixels=0 manual_bpl_segments=0 sprite_lines=0 total=0.000ms phases(events=0.000, background=0.000, playfield=0.000, manual_bpl=0.000, sprites=0.000) diff --git a/docs/copperline-bugreport/0.12.0-serial.log b/docs/copperline-bugreport/0.12.0-serial.log new file mode 100644 index 0000000..9a5cbf7 --- /dev/null +++ b/docs/copperline-bugreport/0.12.0-serial.log @@ -0,0 +1,26 @@ +ROMInfo: 1MiB ROM detected +ROMInfo: ROM region(s).. +ROMInfo: 0x00e00000 - 0x00e7ffff +ROMInfo: 0x00f80000 - 0x00ffffff +Found board 00e80000: mfg=5192 prod=2 size=00010000 serial=00000c00 diag=00000000 +Configuring board: cd=00000468 mfg=5192 prod=2 size=00010000 type=c1 +-> configured, 00e90000 - 00e9ffff +Found board 00e80000: mfg=5192 prod=5 size=00010000 serial=00000000 diag=00000048 +Configuring board: cd=000004b0 mfg=5192 prod=5 size=00010000 type=d1 +-> configured, 00ea0000 - 00eaffff +callroms +Read boot ROM base=00e90000 cd=00000468 type=c1 +Board without boot ROM +Read boot ROM base=00ea0000 cd=000004b0 type=d1 +da_Config=90 +Size=0048 DiagPoint=000e BootPoint=0014 Name=003c +Name='Copperline' +Call boot rom @00c1ba66 board 00ea0000 diag 00c1ba58 configdev 000004b0 +->success +callroms done +00c00000: 00c00000 - 00c80000 00001705 -5 'memory' +00000400: 00000400 - 00080000 00001703 -10 'chip memory' +00c01108: 00f80000 - 01000000 00000400 -128 'Kickstart ROM' +00c01128: 00e00000 - 00e80000 00000400 -128 'Kickstart ROM' +romtaginit +romtaginit done diff --git a/docs/copperline-bugreport/0.12.0-stderr.log b/docs/copperline-bugreport/0.12.0-stderr.log new file mode 100644 index 0000000..e38512b --- /dev/null +++ b/docs/copperline-bugreport/0.12.0-stderr.log @@ -0,0 +1,19 @@ +[2026-07-25T10:29:57Z INFO copperline::config] no ROM specified; booting bundled AROS (/private/tmp/claude-501/-Users-simond-src-amiauth/112d2853-3264-4e03-90b2-abdf1b359ea6/scratchpad/cl012/Copperline.app/Contents/Resources/aros/aros-amiga-m68k-rom.bin) +[2026-07-25T10:29:57Z INFO copperline] config: cpu=M68000 fpu=false cpu_clock=7.09MHz chip_ram=512K fast_ram=0K slow_ram=512K z3_ram=0K zorro_boards=0 chipset=Ecs (agnus=Ecs8372Rev4 denise=Ocs) video=Pal rom=/private/tmp/claude-501/-Users-simond-src-amiauth/112d2853-3264-4e03-90b2-abdf1b359ea6/scratchpad/cl012/Copperline.app/Contents/Resources/aros/aros-amiga-m68k-rom.bin floppy_drives=1 +[2026-07-25T10:29:57Z INFO copperline] audio: disabled (null sink); no sound +[2026-07-25T10:29:57Z INFO copperline] emulation timing: deterministic core, paced=false +[2026-07-25T10:29:57Z INFO copperline::emulator] filesys: services board on the Zorro chain (slot 0), 1 mount(s) +[2026-07-25T10:29:57Z INFO copperline::emulator] extended ROM: /private/tmp/claude-501/-Users-simond-src-amiauth/112d2853-3264-4e03-90b2-abdf1b359ea6/scratchpad/cl012/Copperline.app/Contents/Resources/aros/aros-amiga-m68k-ext.bin at 0xE00000 +[2026-07-25T10:29:57Z INFO copperline::emulator] input: port 1 = mouse, port 2 = joystick +[2026-07-25T10:29:57Z INFO copperline::emulator] machine profile: A500 (gate array None, rtc false) +[2026-07-25T10:29:57Z INFO copperline::emulator] real pacing budget: returned m68k cycles plus explicit chip-bus waits +[2026-07-25T10:29:57Z INFO copperline::zorro] zorro II board "Copperline" autoconfigured at 0x00E90000 +[2026-07-25T10:29:58Z INFO copperline::zorro] zorro II board "Copperline services" autoconfigured at 0x00EA0000 +[2026-07-25T10:29:58Z INFO copperline::bus::custom_regs] BPLCON3 write 0x0C00 dropped (OCS Denise); further drops not logged +[2026-07-25T10:30:06Z INFO copperline] benchmark: ran 40.013s emulated to 40.000s target in 8.763s wall, 1999 frames (228.1/s) +[2026-07-25T10:30:06Z INFO copperline] benchmark frame times: p50=3.37ms p90=4.30ms p99=4.74ms max=6.21ms +[2026-07-25T10:30:06Z INFO copperline] benchmark frame times: all 2437 frames within the 20ms budget +[2026-07-25T10:30:06Z INFO copperline::emulator] emu stats: 8.8s elapsed, 40.0s emulated (456.6%), 2437 frames (278.1/s), 6562116 slices (748825.3/s), ~0.72 MIPS +[2026-07-25T10:30:06Z INFO copperline::bus] video pipeline stats (emu stats): bitplane_fetch calls=69560285 slots=69560285 rows_started=434752 rows_completed=0 time=0.000ms, sprite_fetch calls=4553496 pair_slots=4553496 lines=2120 time=228.484ms +[2026-07-25T10:30:06Z INFO copperline::bus] video pipeline stats (emu stats): collisions calls=0 pixels=0 full_line_scans=0 control_segments=0 time=0.000ms avg=0.0ns/pixel +[2026-07-25T10:30:06Z INFO copperline::bus] video pipeline stats (emu stats): render frames=0 events=0 control_segments=0 playfield_pixels=0 manual_bpl_segments=0 sprite_lines=0 total=0.000ms phases(events=0.000, background=0.000, playfield=0.000, manual_bpl=0.000, sprites=0.000) diff --git a/docs/copperline-bugreport/0.13.0-boot-stuck.png b/docs/copperline-bugreport/0.13.0-boot-stuck.png new file mode 100644 index 0000000000000000000000000000000000000000..0795d4b5a740343bf2f0d7f0baac70d489f4780e GIT binary patch literal 42571 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 configured, 00e90000 - 00e9ffff +Found board 00e80000: mfg=5192 prod=5 size=00010000 serial=00000000 diag=00000048 +Configuring board: cd=000004b0 mfg=5192 prod=5 size=00010000 type=d1 +-> configured, 00ea0000 - 00eaffff +callroms +Read boot ROM base=00e90000 cd=00000468 type=c1 +Board without boot ROM +Read boot ROM base=00ea0000 cd=000004b0 type=d1 +da_Config=90 +Size=0048 DiagPoint=000e BootPoint=0014 Name=003c +Name='Copperline' +Call boot rom @00c1ba66 board 00ea0000 diag 00c1ba58 configdev 000004b0 +->success +callroms done +00c00000: 00c00000 - 00c80000 00001705 -5 'memory' +00000400: 00000400 - 00080000 00001703 -10 'chip memory' +00c01108: 00f80000 - 01000000 00000400 -128 'Kickstart ROM' +00c01128: 00e00000 - 00e80000 00000400 -128 'Kickstart ROM' +romtaginit +romtaginit done diff --git a/docs/copperline-bugreport/0.13.0-stderr.log b/docs/copperline-bugreport/0.13.0-stderr.log new file mode 100644 index 0000000..3f9c273 --- /dev/null +++ b/docs/copperline-bugreport/0.13.0-stderr.log @@ -0,0 +1,19 @@ +[2026-07-25T10:30:06Z INFO copperline::config] no ROM specified; booting bundled AROS (/opt/homebrew/share/copperline/aros/aros-amiga-m68k-rom.bin) +[2026-07-25T10:30:06Z INFO copperline] config: cpu=M68000 fpu=false cpu_clock=7.09MHz chip_ram=512K fast_ram=0K slow_ram=512K z3_ram=0K zorro_boards=0 chipset=Ecs (agnus=Ecs8372Rev4 denise=Ocs) video=Pal rom=/opt/homebrew/share/copperline/aros/aros-amiga-m68k-rom.bin floppy_drives=1 +[2026-07-25T10:30:06Z INFO copperline] audio: disabled (null sink); no sound +[2026-07-25T10:30:06Z INFO copperline] emulation timing: deterministic core, paced=false +[2026-07-25T10:30:06Z INFO copperline::emulator] filesys: services board on the Zorro chain (slot 0), 1 mount(s) +[2026-07-25T10:30:06Z INFO copperline::emulator] extended ROM: /opt/homebrew/share/copperline/aros/aros-amiga-m68k-ext.bin at 0xE00000 +[2026-07-25T10:30:06Z INFO copperline::emulator] input: port 1 = mouse, port 2 = joystick +[2026-07-25T10:30:06Z INFO copperline::emulator] machine profile: A500 (gate array None, rtc none) +[2026-07-25T10:30:06Z INFO copperline::emulator] real pacing budget: returned m68k cycles plus explicit chip-bus waits +[2026-07-25T10:30:06Z INFO copperline::zorro] zorro II board "Copperline" autoconfigured at 0x00E90000 +[2026-07-25T10:30:06Z INFO copperline::zorro] zorro II board "Copperline services" autoconfigured at 0x00EA0000 +[2026-07-25T10:30:07Z INFO copperline::bus::custom_regs] BPLCON3 write 0x0C00 dropped (OCS Denise); further drops not logged +[2026-07-25T10:30:15Z INFO copperline] benchmark: ran 40.012s emulated to 40.000s target in 8.833s wall, 1999 frames (226.3/s) +[2026-07-25T10:30:15Z INFO copperline] benchmark frame times: p50=3.40ms p90=4.34ms p99=4.90ms max=5.62ms +[2026-07-25T10:30:15Z INFO copperline] benchmark frame times: all 2437 frames within the 20ms budget +[2026-07-25T10:30:15Z INFO copperline::emulator] emu stats: 8.8s elapsed, 40.0s emulated (453.0%), 2437 frames (275.9/s), 6548551 slices (741367.7/s), ~0.72 MIPS +[2026-07-25T10:30:15Z INFO copperline::bus] video pipeline stats (emu stats): bitplane_fetch calls=69599142 slots=69599142 rows_started=434995 rows_completed=0 time=0.000ms, sprite_fetch calls=4553384 pair_slots=4553384 lines=2105 time=254.805ms +[2026-07-25T10:30:15Z INFO copperline::bus] video pipeline stats (emu stats): collisions calls=0 pixels=0 full_line_scans=0 control_segments=0 time=0.000ms avg=0.0ns/pixel +[2026-07-25T10:30:15Z INFO copperline::bus] video pipeline stats (emu stats): render frames=0 events=0 control_segments=0 playfield_pixels=0 manual_bpl_segments=0 sprite_lines=0 total=0.000ms phases(events=0.000, background=0.000, playfield=0.000, manual_bpl=0.000, sprites=0.000) diff --git a/docs/copperline-bugreport/REPORT.md b/docs/copperline-bugreport/REPORT.md new file mode 100644 index 0000000..2fff972 --- /dev/null +++ b/docs/copperline-bugreport/REPORT.md @@ -0,0 +1,199 @@ +# Copperline: `[[filesys]]` host-directory boot hangs on 68000/68010 + bundled AROS (regression 0.11.0 → 0.12.0) + +**Status: root-caused and fixed upstream, not yet released** — see +[Resolution](#resolution) below. + +## Summary + +A machine using a `[[filesys]]` host-directory mount as the boot volume +(A500 profile, plain 68000, no explicit ROM → bundled AROS) boots and runs +correctly on Copperline **0.11.0**, but hangs indefinitely on **0.12.0** and +**0.13.0** — AROS never gets past its own boot splash animation, never +reaches the mounted volume, and the guest program never runs. `--serial +stdout` produces no output beyond `romtaginit done`, even after 40 emulated +seconds (about 5x longer than 0.11.0 needs to boot *and* run the guest +program to completion). + +This was found via [AmiAuth](https://github.com/sidick/amiauth)'s on-target +test suite (`tests/copperline/run.sh`, `make copperline-smoke`), which boots +a minimal AmigaOS environment from a host directory to run a native m68k +test binary. CI still pins Copperline 0.11.0 +(`COPPERLINE_VERSION: "0.11.0"` in `.github/workflows/ci.yml`) for unrelated +reasons, which is why this hadn't been noticed before — 0.12.0/0.13.0 were +only tried locally while checking the 0.13.0 release notes for relevant +changes. + +## Environment + +- macOS (Homebrew `copperline` formula) for the 0.13.0 reproduction; the + `Copperline--macos-universal.dmg` release asset for the 0.11.0/0.12.0 + bisection (both run the bundled `copperline` binary inside `Copperline.app` + directly, not the GUI). +- Versions tested: 0.11.0 (works), 0.12.0 (hangs), 0.13.0 (hangs). + +## Config (`machine.toml`) + +```toml +[machine] +profile = "A500" + +[cpu] +model = "68000" + +[memory] +chip = "512K" +slow = "512K" + +[floppy] +drives = 1 + +[[filesys]] +path = "sys" +volume = "AmiAuthTest" +bootpri = 10 + +[emulation] +power_on = true +warp_speed = "max" +``` + +`sys/` is a small host directory: `sys/C/serialtest` (a native m68k +executable) and `sys/S/Startup-Sequence` containing a single line +(`serialtest`) that runs it. No ROM is passed on the command line, so +Copperline boots its bundled AROS Kickstart replacement. + +## Command + +```sh +copperline --config machine.toml --noaudio --serial stdout --benchmark-until 40 +``` + +## Expected (0.11.0 behaviour) + +AROS boots, mounts the `[[filesys]]` host directory as `AmiAuthTest:` +(`bootpri = 10`, outranking the empty floppy), runs +`Startup-Sequence`, `serialtest` executes and emits its results over serial +via `exec/RawPutChar`, then the emulator exits at the `--benchmark-until` +deadline. Total wall-clock: **~8.8s**. + +Full serial capture (`0.11.0-serial.log`): + +``` +[...ROM/autoconfig boot log...] +romtaginit +romtaginit done +BEGIN +HOTP0=755224 +HOTP1=287082 +HOTP2=359152 +HOTP3=969429 +HOTP4=338314 +HOTP5=254676 +HOTP6=287922 +HOTP7=162583 +HOTP8=399871 +HOTP9=520489 +DRBG=be491355307bb821bf72d7f115d91156 +END +``` + +## Actual (0.12.0 and 0.13.0 behaviour) + +Boot log is **byte-identical** up through `romtaginit done`, then nothing +further is ever emitted. The process runs the full 40 emulated seconds +(wall clock also ~8.8s — `warp_speed = "max"`, so wall time doesn't grow +even though it never finishes booting) and exits without the guest program +ever running. + +Full serial capture (`0.12.0-serial.log` / `0.13.0-serial.log`, identical): + +``` +[...ROM/autoconfig boot log...] +romtaginit +romtaginit done +``` +(nothing else — no BEGIN, no HOTP vectors, no END) + +A `--screenshot-after 39` at the very end of the 40s window +(`0.13.0-boot-stuck.png`, attached) shows AROS still animating its own boot +logo ("AROS" wordmark + eyes) — alive and rendering, not crashed, just stuck +before ever reaching a state where it looks at the mounted volume. + +## Isolation + +- Removing `[floppy] drives = 1` (leaving only `[[filesys]]`) does not + change the outcome — still hangs on 0.12.0. So the floppy section isn't + the trigger. +- Substituting a real, licensed Kickstart 2.04 ROM (512 KiB) for the + bundled AROS still hangs — with the real ROM the guest doesn't even + render its own "Insert disk" boot screen (0 bitplane fetches at 8s + emulated per the `emu stats` log line), vs. a plain `[machine] profile = + "A500"` config with **no** `[[filesys]]` section, which renders the + normal Kickstart 2.0 splash screen correctly and promptly. So the trigger + is `[[filesys]]` itself, independent of ROM choice (bundled AROS vs. real + Kickstart) and independent of the floppy section. +- This lines up with the 0.12.0 release notes' description of `[[filesys]]` + changing from a discard-on-exit RAM snapshot to a live host-directory + pass-through (`.uaem` sidecar files for protection bits/comments/ + datestamps, new `readonly` flag to opt back into the old behaviour) — + that refactor is the most likely place this regressed, though I haven't + bisected inside the 0.12.0 development history itself. + +## Files in this report + +- `0.11.0-serial.log`, `0.12.0-serial.log`, `0.13.0-serial.log` — full + stdout (serial) capture for each version, identical config/command. +- `0.11.0-stderr.log`, `0.12.0-stderr.log`, `0.13.0-stderr.log` — matching + stderr (Copperline's own log output) for each run. +- `0.13.0-boot-stuck.png` — screenshot at 39s emulated time under 0.13.0, + showing AROS still on its own boot animation, never having reached the + mounted filesystem. + +## Suggested next steps (for the Copperline maintainer) + +1. Reproduce with the config above (bundled AROS needs no ROM asset). +2. `git bisect` between the 0.11.0 and 0.12.0 tags, most likely inside + whatever commit(s) reworked `[[filesys]]` from a RAM-snapshot mount to + the live host-directory pass-through (see "Isolation" above). +3. Check whether the new `.uaem`-sidecar / live-write-back machinery is + blocking on something during volume validation/mount (a lock, an fsync, + a synchronous host filesystem call) that never returns during + AmigaDOS's disk-change / DOS-list probing, which would explain "stuck + before ever reaching the mounted volume" rather than a crash. + +## Resolution + +Root cause found and fixed upstream: [CopperlineHQ/Copperline#312](https://github.com/CopperlineHQ/Copperline/pull/312) +(open, not yet in a release as of 0.13.0). + +The hang is **CPU-model-specific to 68000/68010**, not the `[[filesys]]` +machinery itself. `FilesysBoard::write()` only fired the `DIAG_DOORBELL` +(and `REG_DOSPKT`/`REG_MSGPORT`) MMIO doorbell on a single 32-bit access. +A 68020+'s 32-bit data bus satisfies that in one write, but a 68000/68010 +has a 16-bit external bus, so the core's `write_move_dest_68000` correctly +splits every `move.l` destination write into two word bus cycles — real +hardware behaviour. The doorbell guard never saw the `size == 4` case on +those CPUs, so the guest ROM's `move.l a0,DIAG_DOORBELL(a0)` in the +DiagPoint stub never reached `FilesysBoard::diag_entry`, expansion init +never ran, and the guest hung forever waiting on a host filesystem that +never mounted. A regression from commit `497845c`, which switched the +services board from a size-independent A-line HLE trap to plain MMIO +registers. Confirmed independent of ROM choice (bundled AROS or a real +Kickstart, matching the "Isolation" section above) and of `[machine] +profile` — reproduced identically on 0.13.0 with both the A500/68000 +config above and the real-ROM `pbkdf2-bench` config. + +**68020+ is not affected** — its 32-bit bus never splits the write, so +`[[filesys]]` boots normally regardless of Copperline version. Confirmed +locally (2026-07-28): the A500/68000 config above hangs identically on +brew 0.13.0; switching only `[cpu] model` to `"68020"` boots to completion +in the same config. A local build of Copperline off the `#312` branch also +boots the unmodified 68000 config to completion, confirming the fix. + +AmiAuth's own tests (`tests/copperline/run.sh`, `tests/copperline/bench.sh`) +stay on 68000 rather than adopting the 68020 workaround, since the whole +point of those tests is validating real 68000/68010 bus-cycle behaviour +(this bug is a good example of why: it's real hardware-accurate 68000 +behaviour in the CPU core that the filesys board's doorbell logic didn't +handle). They instead support a `COPPERLINE=` env var to point at a fixed +build until a release ships `#312`. diff --git a/tests/copperline/README.md b/tests/copperline/README.md index d0881d6..f698bdc 100644 --- a/tests/copperline/README.md +++ b/tests/copperline/README.md @@ -46,10 +46,21 @@ Kickstart). CI is currently pinned to Copperline **0.11.0** (`COPPERLINE_VERSION` in `ci.yml`); this project's day-to-day local/interactive Copperline use has -since moved to **0.12.0** (Homebrew) for the features noted below. Nothing in -*this* test needs 0.12 — worth bumping the CI pin at some point mainly to stay -current and to pick up 0.12's faster AROS boot, not because anything here is -broken on 0.11. +since moved to **0.12.0/0.13.0** (Homebrew) for the features noted below. +Nothing in *this* test needs 0.12+ — worth bumping the CI pin at some point +mainly to stay current, not because anything here is broken on 0.11. + +Bumping past 0.11.0 is currently blocked by a real bug, though: any +`[[filesys]]` host-directory mount hangs the boot forever on a 68000/68010 +guest under released 0.12.0/0.13.0 — see +[`docs/copperline-bugreport/REPORT.md`](../../docs/copperline-bugreport/REPORT.md). +Root-caused and fixed upstream +([CopperlineHQ/Copperline#312](https://github.com/CopperlineHQ/Copperline/pull/312)), +not yet in a release. `run.sh` and `bench.sh` support a `COPPERLINE=` env var +to point at a build off that branch in the meantime — keep `[cpu] model = +"68000"` rather than working around the bug by raising the CPU model, since +these tests exist specifically to validate real 68000/68010 behaviour (and, +for `bench.sh`, real 68000 KDF-throughput numbers). ## Files diff --git a/tests/copperline/bench.sh b/tests/copperline/bench.sh index 8452b8f..12f1406 100755 --- a/tests/copperline/bench.sh +++ b/tests/copperline/bench.sh @@ -2,23 +2,36 @@ # bench.sh — measure PBKDF2-HMAC-SHA1 throughput on a stock 68000 under # Copperline, to inform the vault KDF iteration policy (see docs/SECURITY.md). # -# Needs copperline, docker (the amiga-gcc image), and a 512 KiB Kickstart ROM -# (timer.device EClock is not available under the bundled AROS, so this one dev -# tool needs a real ROM — override with KICK=). Invoked by `make pbkdf2-bench`. +# Needs copperline (or COPPERLINE= pointing at another build — see run.sh's +# header for why you might need one), docker (the amiga-gcc image), and a +# 512 KiB Kickstart ROM (timer.device EClock is not available under the +# bundled AROS, so this one dev tool needs a real ROM — override with +# KICK=). Invoked by `make pbkdf2-bench`. +# +# NOTE: [[filesys]] hangs after boot on a 68000/68010 guest under released +# Copperline 0.12.0/0.13.0 (split move.l bus writes never ring the hostfs +# doorbell) — see docs/copperline-bugreport/REPORT.md. Fixed upstream in +# CopperlineHQ/Copperline#312, not yet released — until it is, point +# COPPERLINE= at a build off that branch rather than raising the CPU model +# below, which would invalidate these numbers as 68000 KDF calibration data. set -eu HERE=$(cd "$(dirname "$0")" && pwd) ROOT=$(cd "$HERE/../.." && pwd) +COPPERLINE=${COPPERLINE:-copperline} KICK=${KICK:-/Users/simond/Documents/Amiberry/Roms/amiga-os-310-a600.rom} IMG=${AMIGA_GCC_IMAGE:-stefanreinauer/amiga-gcc:latest} [ -e "$KICK" ] || { echo "FAIL: need a Kickstart ROM (set KICK=)" >&2; exit 2; } -command -v copperline >/dev/null || { echo "FAIL: copperline not on PATH" >&2; exit 2; } +command -v "$COPPERLINE" >/dev/null || { echo "FAIL: $COPPERLINE not found" >&2; exit 2; } -# Build the bench binary (m68k, -O2 as production). +# Build the bench binary (m68k, -O2 as production). hmac.c defines the +# SHA-256/512 HMAC variants unconditionally, so sha256.c/sha512.c must link +# even though this benchmark only exercises the SHA-1 path. docker run --rm --platform linux/amd64 -v "$ROOT":/work -w /work "$IMG" sh -lc \ 'PATH=/opt/amiga/bin:$PATH m68k-amigaos-gcc -std=c99 -O2 -Wall -m68000 -noixemul \ -Isrc/core src/core/pbkdf2.c src/core/hmac.c src/core/sha1.c \ + src/core/sha256.c src/core/sha512.c \ tests/copperline/pbkdf2bench.c -o build/pbkdf2bench' T=$(mktemp -d) @@ -45,7 +58,7 @@ bootpri = 10 warp_speed = "max" EOF -copperline --config "$T/m.toml" --noaudio --serial stdout --benchmark-until 200 "$KICK" \ +"$COPPERLINE" --config "$T/m.toml" --noaudio --serial stdout --benchmark-until 200 "$KICK" \ >"$OUT" 2>/dev/null || true line=$(tr -d '\r' <"$OUT" | grep '^PBKDF2 ' | head -1 || true) [ -n "$line" ] || { echo "FAIL: no PBKDF2 result (boot/timer issue)" >&2; exit 1; } diff --git a/tests/copperline/machine.toml b/tests/copperline/machine.toml index 8cb3ce2..b86fd59 100644 --- a/tests/copperline/machine.toml +++ b/tests/copperline/machine.toml @@ -6,10 +6,17 @@ # The Kickstart ROM is passed as a positional CLI arg (which overrides `rom` # here), so this file stays portable across machines. See ../../Makefile # `copperline-smoke` and ./run.sh. - -[machine] -profile = "A500" - +# +# NOTE: any [[filesys]] host-directory mount hangs forever after +# "romtaginit done" on this 68000 CPU under released Copperline +# 0.12.0/0.13.0 (bundled AROS or a real ROM alike) — see +# docs/copperline-bugreport/REPORT.md. Root cause: the services board's +# MMIO doorbells only fired on a single 32-bit write, but a 68000/68010's +# 16-bit bus splits every move.l into two word writes, so the doorbell +# never rang and expansion init never ran. Fixed upstream in +# CopperlineHQ/Copperline#312 (not yet released as of 0.13.0) — until a +# release ships it, point COPPERLINE= (see ./run.sh) at a build off that +# branch instead of downgrading this config's CPU. [cpu] model = "68000" diff --git a/tests/copperline/run.sh b/tests/copperline/run.sh index 4e55bb0..ed51e8a 100755 --- a/tests/copperline/run.sh +++ b/tests/copperline/run.sh @@ -10,7 +10,12 @@ # debug path straight to the Paula serial registers. # # Prereqs: -# - copperline on PATH (brew install copperline) +# - copperline on PATH (brew install copperline), or COPPERLINE= pointing +# at another build (e.g. a local build of CopperlineHQ/Copperline#312, +# which fixes the [[filesys]]-hangs-on-68000 bug described in +# docs/copperline-bugreport/REPORT.md — not yet in a release). Such a +# build won't have the bundled AROS assets installed next to it, so pair +# COPPERLINE= with KICK= (a real ROM) when using one. # - the cross-built harness SERIALTEST_M68K= (default build/serialtest) # - KICK= (optional): a 512 KiB Kickstart ROM. If unset, boots Copperline's # bundled AROS Kickstart replacement — redistributable, so CI needs no ROM. @@ -19,6 +24,7 @@ set -eu HERE=$(cd "$(dirname "$0")" && pwd) ROOT=$(cd "$HERE/../.." && pwd) +COPPERLINE=${COPPERLINE:-copperline} KICK=${KICK:-} # empty => bundled AROS (no licensed ROM needed) BIN=${SERIALTEST_M68K:-$ROOT/build/serialtest} BENCH=${BENCH:-40} # emulated seconds to run; enough for the slower AROS boot @@ -28,7 +34,7 @@ VECTORS="0=755224 1=287082 2=359152 3=969429 4=338314 5=254676 6=287922 7=162583 [ -e "$BIN" ] || { echo "FAIL: missing $BIN" >&2; exit 2; } [ -z "$KICK" ] || [ -e "$KICK" ] || { echo "FAIL: KICK set but missing: $KICK" >&2; exit 2; } -command -v copperline >/dev/null || { echo "FAIL: copperline not on PATH" >&2; exit 2; } +command -v "$COPPERLINE" >/dev/null || { echo "FAIL: $COPPERLINE not found" >&2; exit 2; } [ -n "$KICK" ] && echo "ROM: $KICK" || echo "ROM: bundled AROS" # --- stage the boot volume (just the harness binary) ------------------------- @@ -46,8 +52,8 @@ trap cleanup EXIT INT TERM # config's (absent) rom; with none, Copperline boots its bundled AROS. set -- --config machine.toml --noaudio --serial stdout --benchmark-until "$BENCH" [ -n "$KICK" ] && set -- "$@" "$KICK" -( cd "$HERE" && copperline "$@" ) >"$OUT" 2>/dev/null \ - || { echo "FAIL: copperline exited non-zero" >&2; cat "$OUT" >&2; exit 3; } +( cd "$HERE" && "$COPPERLINE" "$@" ) >"$OUT" 2>/dev/null \ + || { echo "FAIL: $COPPERLINE exited non-zero" >&2; cat "$OUT" >&2; exit 3; } tr -d '\r' <"$OUT" >"$OUT.n" && mv "$OUT.n" "$OUT" # serial sends CRLF; drop CR echo "----- serial capture -----"; cat "$OUT"; echo "--------------------------"