Book v1.4 — Bare-Metal Ada on the ESP32-S3
Capability + correctness release. The whole runtime now builds and runs with assertions enabled (BUILD=Assert, RTS-wide -gnata) on all three profiles — and doing so flushed out three latent kernel bugs — and the full profile can place task stacks in external PSRAM. All fixes hardware-verified on the ESP32-S3-Touch-LCD-7.
Runtime fixes
- Ghost ready-queue invariant + cycle-safe queue walks, plus four more dev-only invariants (alarm queue, systimer, poke, cross-cancel) — the assertion net that caught what follows. (#190, #191)
- Cross-core served-entry self-deadlock — the entry-serving path now masks across its lock hold. (#192)
- Stale kernel base priority — a task activated while its activator held a default-ceiling lock kept kernel base 255 for life;
Set_Prioritynow reconciles it (the creation-time alternative deadlocks the ACATS-mandated activation handshake). (#193) - SMP-unsound
Current_Prioritypostcondition removed — it re-read scheduler state another core mutates concurrently; no sound contract can express it. (#194) - PSRAM task stacks — the vector SP sanity guard now accepts the PSRAM d-bus window, making full-profile task stacks in PSRAM (
__gnat_task_stack_alloc/HEAP_PSRAM) a working, verified configuration: 1.45M checksum-verified deep recursions on a PSRAM stack, 300k protected-entry rendezvous, and a full GUI application running its task set from a PSRAM arena. (#195)
Book
BUILD=Assertdocumented as the runtime's torture test; PSRAM task stacks, the vector sanity net, and the stale-registers-at-a-park decoding trap. (#196)- Stale claims fixed: PSRAM is DMA-reachable (through the DCache, cache-line aligned),
GDMA Waitblocks on an interrupt,Send_Socketis a partial send. (#197) - Per-task CPU accounting (
System.BB.Execution_Time), the real SMP affinity semantics (unpinned = the creator's core, for life), and the watchpoint-redzone constraint on stack-painting monitors. (#198) - References to the private examples collection reworded so the public book stands alone. (#199)
Runtime packs regenerated where RTS source changed.
The attached PDF is the full book (342 pages) built at this tag.
What's Changed
- rts: ghost ready-queue invariant + cycle-safe queue walks by @rowsail in #190
- rts: four more dev-only invariants (alarm queue, systimer, poke, cross-cancel) by @rowsail in #191
- rts: fix cross-core served-entry self-deadlock (mask the lock hold) by @rowsail in #192
- rts: reconcile a task's stale kernel base priority in Set_Priority by @rowsail in #193
- rts: drop the unsound Current_Priority postcondition (SMP race) by @rowsail in #194
- rts: accept PSRAM stacks in the vector SP sanity guard by @rowsail in #195
- book: document PSRAM task stacks, the vector sanity net, and BUILD=Assert by @rowsail in #196
- book: fix stale claims (PSRAM DMA, GDMA Wait, Send_Socket contract) by @rowsail in #197
- book: per-task CPU accounting, real affinity semantics, the redzone trap by @rowsail in #198
- book: stop pointing readers at the private examples collection by @rowsail in #199
Full Changelog: v1.3.2...v1.4