ACATS 4.1 has tests CXD* which test correct Annex D behaviour. I'm
getting problems with them. See [0] for work in progress.
For instance, CXD2002 reports as below (lines starting '*' are reporting
errors):
,.,. CXD2002 ACATS 4.1 17-05-03 17:31:31
---- CXD2002 Default Task Dispatching - a non-blocking delay puts the
task at the tail of the ready queue for that priority.
* CXD2002 Delay_Task executed before a Sub_Task.
* CXD2002 Low priority task executed out of order.
* CXD2002 Sub_Tasks did not run when expected.
**** CXD2002 FAILED ****************************.
(sometimes the "Low priority task" line doesn't appear).
The binder has correctly set Ceiling priority and FIFO within tasks.
Same on macOS, Debian (both 64-bit). Same with GNAT GPL 2016, GCC
6.1.0. Behaviour not affected by running as root (this used to make a
difference to Linux tasking programs - or was that Solaris?)
Is anyone aware of GNAT limitations in this area? I found [1] ([2] is
prettier), and apparently Ceiling locking isn't supported on Linux. But
it should be OK on macOS???
[0]
https://github.com/simonjwright/ACATS
[1]
https://gcc.gnu.org/onlinedocs/gcc-3.1/gnat_rm/Ensuring-Compliance-with-the-Real-Time-Annex.html
[2]
https://docs.adacore.com/gnat_rm-docs/html/gnat_rm/gnat_rm/implementation_of_specific_ada_features.html