These functions set errno to EINVAL if
the process or thread would have blocked, and the
abs_timeout parameter specified a nanoseconds field value
less than zero or greater than or equal to 1000 million.

A returned value of NULL from this function is ambiguous;
if you need to
determine if it indicates an error (as opposed to the end of the
directory stream), set errno to EOK
before each call to this function.

These functions have a new flag, SHMCTL_LAZY.
Setting this flag delays allocating memory until it's referenced.
If you create anonymous shared memory objects (by calling
mmap()
with MAP_ANON | MAP_SHARED and a file descriptor of -1),
a MAP_LAZY flag implicitly sets the
SHMCTL_LAZY flag on the object.

The shm_ctl_special() function also has new special flags
for ARM platforms.

The timeout value starts timing out when TimerTimeout()
is called, not when the blocking state is entered.
It might be possible to get preempted after calling
TimerTimeout() but before the blocking kernel call.