v0.34.0 — multi-table call_indirect, global initializers, sound mask bounds
Multi-table call_indirect ships (falcon's fused-component blocker, #650); float and i64 global initializers actually reach the image (#649 + GI-FPU-001); the mask bounds mode becomes sound (#651). Six gale filings closed same-day across two waves.
Added
- Multi-table call_indirect (#650, PR #653): contiguous table region at R11, compile-time per-table base offsets (sound: tables provably fixed-size per #646), per-table bounds guard + closed-world type verification. Single-table modules byte-identical BY CONSTRUCTION (whole-ELF cmp proof, three targets). New two-table aliasing-canary CI oracle, 26/26 both ISAs.
Fixed
- Global initializers never reached the self-contained image (#649, PRs #648/#652): the default Cortex-M image never materialized the globals table — R9 uninitialized, reads returned vector-table garbage. Startup now sets R9 and stores every init word (width-aware layout); float globals loud-skip (GI-FPU-001). Reset-path unicorn oracle: 4 divergences → 0.
- --safety-bounds mask offset-escape + size-vs-size-1 remap (#651, PR #654): all 8 mask sites unified: min((operand+offset) & (size-1), size−access_size), u33-soundness documented, 8/8 red → green.
Sibling filed: #655 (RV32 mask-order twin — fix in flight). Platform binaries attach ~10 min after the tag.
🤖 Generated with Claude Code