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() if
you are using the heap.
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.
When you have met these requirements, link your application
normally. The linker uses the appropriate C library variant to find
any required compiler functions that are implicitly called.
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 also