1.6.4 Using the libraries in a nonsemihosting environment
Some C library functions use semihosting. If you use the libraries in a nonsemihosting environment, you must ensure that semihosting function calls are dealt with appropriately.
If you do not want to use semihosting, either:
Remove all calls to semihosting functions.
Re-implement the lower-level functions, for example,
fputc(). You are not required to re-implement all
semihosting functions. You must, however, re-implement the functions you are using in
your application.
You must re-implement functions that the C library uses to isolate
itself from target dependencies. For example, if you use printf() you must re-implement fputc(). If
you do not use the higher-level input/output functions like printf(), you do not have to re-implement the lower-level functions like
fputc().
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 from
armasm assembly language.
#pragma
import(__use_no_semihosting) from C.
Note
IMPORT
__use_no_semihosting is only required to be added to a single assembly source
file. Similarly, #pragma 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
of __I$use$semihosting
For example:
...
Loading member sys_exit.o from c_2.l.
reference : __I$use$semihosting
definition: _sys_exit
...
This shows that the semihosting-using function _sys_exit is
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 are target-dependent.
Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers of your data.