Skip to content

v1.6 — full-profile tasking deadlock fixed; CI gate; ACATS re-validated

Choose a tag to compare

@github-actions github-actions released this 05 Sep 21:46
· 64 commits to main since this release
2f8c11e

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

  1. HAL sources moved into src/{peripherals,devices,net,text_io}/.
    Unit names are unchanged, so with ESP32S3.SPI; still works — but anything
    using libs/esp32s3_hal/src as a flat search path breaks. Use src/**.
  2. Toolchain resolution changed. tools/sdk-env.sh now 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.
  3. libs/esp32s3_wifi/esp32s3_wifi.gpr now declares Target, Runtime and a
    per-profile object directory.
    It previously only worked when built from
    inside an example.

Highlights

  • CI. .github/workflows/ci.yml runs ./x test on 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/tls build clean under -gnatwa — ~110 real warnings fixed.
  • TLS: a short write no longer truncates a record silently; Socket_Error no
    longer escapes the library as a board reset; and a zero-length
    application_data record (legal per RFC 8446 §5.1) no longer raises
    Constraint_Error out of Recv.
  • 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