If you do not want to use semihosting, either:
Remove all calls to semihosting functions.
Re-implement the lower-level functions, for example,
You are not required to re-implement all semihosting functions.
You must, however, re-implement the functions you are using in your
You must re-implement functions that the C library uses to isolate itself from
target dependencies. For example, if you use
you must re-implement
fputc(). If you do not use the
higher-level input/output functions like
do not have to re-implement the lower-level functions like
Implement a handler for all of the semihosting calls
to be handled in your own specific way. One such example is for
the handler to intercept the calls, redirecting them to your own
nonsemihosted, that is, target-specific, functions.
To guarantee that no functions using semihosting are included
in your application, use either:
IMPORT __use_no_semihosting is
only required to be added to a single assembly source file. Similarly,
import(__use_no_semihosting) is only required to be added
to a single C source file. It is unnecessary to add these inserts
to every single source file.
If you include a library function that uses semihosting and
also reference __use_no_semihosting, the
library detects the conflicting symbols and the linker reports an
error. To determine which objects are using semihosting:
- Link with
armlink --verbose --list err.txt
Search err.txt for occurrences
Loading member sys_exit.o from c_4.l.
reference : __I$use$semihosting
This shows that the semihosting-using function
linked-in from the C library. To prevent this, you must provide
your own implementation of this function.
There are no target-dependent functions in the C++ library,
although some C++ functions use underlying C library functions that