Freestanding C Headers

This subtree defines headers required for a C freestanding implementation, as specified in S4p6 of the C11 standard. Said headers are implemented to the letter as described in respective sections of said standard. These headers must be substitutable for those provided by the system toolchain when building for host-side code, so that includes of these headers do not cause breakage when building on host-side, where these headers are never included.

All of sw/device is compiled using only these headers, and this directory acts as the sole root against which #include <...> directives are resolved. Headers provided by the system or the compiler are totally inaccessible and should not be used. Conversely, these headers must never be included via their full paths, since they can easily clash with the corresponding headers provided by the host-side toolchain, as described above.

These headers are guaranteed to be compatible with processors and compilers implementing the RISC-V ILP32 psABI, though they may be compatible with other architectures and calling conventions on a best-effort basis. However, compilers must be compatible with Clang and GCC’s intrinsics.