2.4.2. Bare machine integer C
If you are writing a program in C that does not use the library and is to run without any environment initialization, you must:
Re‑implement __rt_raise(), because this error‑handling function can be called from numerous places within the compiled code.
Not define main() to avoid linking in the library initialization code.
Write an assembly language veneer that establishes the register state required to run C. This veneer must branch to the entry function in your application.
Provide your own RW/ZI initialization code.
Ensure that your initialization veneer is executed by, for example, placing it in your reset handler.
Build your application using ‑‑fpu=none and link it normally. The linker uses the appropriate C library variant to find any required compiler helper functions.
Many library facilities require __user_libspace for static data. Even without the initialization code activated by having a main() function, __user_libspace is created automatically and uses 96 bytes in the ZI segment. See The __user_libspace static data area for a description of the __user_libspace area.