Repository navigation
v1.6 — full-profile tasking deadlock fixed; CI gate; ACATS re-validated
Important
If you use the full runtime profile, upgrade from v1.5.
On v1.5 the full profile deadlocks any program whose environment task waits
for dependent tasks — including this repository's own
esp32s3_full_tasking example, which stops after one worker iteration.
The boot CPU's idle ATCB self-linked System.Tasking.All_Tasks_List, so
Vulnerable_Complete_Master walked a list that never terminates while
holding the global RTS lock, freezing every task. The environment task's own
delay kept working (it was the one spinning), so it presented as
"library-level and dynamically-allocated tasks never wake" rather than an
obvious hang. light-tasking and embedded are unaffected.
Compatibility — three changes that can affect an existing setup
- HAL sources moved into
src/{peripherals,devices,net,text_io}/.
Unit names are unchanged, sowith ESP32S3.SPI;still works — but anything
usinglibs/esp32s3_hal/srcas a flat search path breaks. Usesrc/**. - Toolchain resolution changed.
tools/sdk-env.shnow prefers the recorded
known-good version over the newest installed. No effect if you have the
validated set; it changes which compiler builds your firmware if you don't. libs/esp32s3_wifi/esp32s3_wifi.gprnow declaresTarget,Runtimeand a
per-profile object directory. It previously only worked when built from
inside an example.
Highlights
- CI.
.github/workflows/ci.ymlruns./x teston every push — host suites,
every library on every profile it supports (warnings are failures), and a
build of all 96 examples. Nothing built the code before; it immediately caught
an example that had not compiled in six weeks, and a HAL that would not build
under its own default profile. - HAL profile scoping by source directory, replacing a ~130-entry exclusion
list that had drifted. Adding a driver now defaults to safe. - HAL and
libs/tlsbuild clean under-gnatwa— ~110 real warnings fixed. - TLS: a short write no longer truncates a record silently;
Socket_Errorno
longer escapes the library as a board reset; and a zero-length
application_datarecord (legal per RFC 8446 §5.1) no longer raises
Constraint_Errorout ofRecv. - SPARK: GPIO's lock-free pad operations proved; register banks carry explicit
external-state aspects. - Docs: the guide's prose moved out of
build.py(6,047 → 1,253 lines, output
byte-identical), and a README for the 36 examples that had none.
Conformance
ACATS 4.2 re-run on real hardware across all three profiles against this tree:
zero regressions, three improvements, and zero port-specific defects.
| profile | applicable | passed |
|---|---|---|
| light-tasking | 1132 | 674 |
| embedded | 1257 | 884 |
| full | 1559 | 908 |
Full report: Ada_esp32s3_acats/ACATS_RESULTS.md
What's Changed
- Build the code in CI, and fix what that turned up by @rowsail in #206
- rts: fix the full-profile idle-ATCB deadlock (found by ACATS on hardware) by @rowsail in #207
- docs: bring the SDK's own ACATS figures up to date by @rowsail in #208
Full Changelog: v1.5...v1.6