libports: update doc/libc.txt

This commit is contained in:
Norman Feske 2023-05-03 13:59:06 +02:00 committed by Christian Helmuth
parent b1be660c7b
commit e1e26c4439

View File

@ -25,47 +25,16 @@ configuration ('<build-dir>/etc/build.conf').
Limitations
-----------
The current version of the C library is not thread-safe. For most string and
math functions, this is not a problem (as these functions do not modify global
state) but be careful with using more complex functions such as 'malloc' from
multiple threads. Also, 'errno' may become meaningless when calling libc
functions from multiple threads.
The current version of the C library is not entirely thread-safe.
In particular, the 'FILE' stream API ('fopen', 'fread', ...) must not be
used from multiple threads.
We have left out the following files from the Genode port of the FreeBSD libc:
:gdtoa libary: 'strtodnrp.c'
:gen library: 'getosreldate.c'
:string libary: 'strcoll.c', 'strxfrm.c', 'wcscoll.c', 'wcsxfrm.c'
:math library: 's_exp2l.c'
In the ARM version, the following additional files are excluded:
:libm: 'e_acosl.c', 'e_asinl.c', 'e_atan2l.c', 'e_hypotl.c', 's_atanl.c',
's_cosl.c', 's_frexpl.c', 's_nextafterl.c', 's_nexttoward.c',
's_rintl.c', s_scalbnl.c', 's_sinl.c', 's_tanl.c', 's_fmal.c'
Atomic operation on ARM are not supported. Although these operations are
defined in 'machine/atomic.h', their original FreeBSD implementations are not
functional because we do not emulate the required FreeBSD environment (see:
'sysarch.h'). However, these functions are not a regular part of the libc
anyway and are not referenced from any other libc code.
The current back end is quite simplistic and it may help you to revisit the
current state of the implementation in the 'src/lib/libc' directory. If
one of the functions in 'dummies.c' is called, you will see an message in your
debug output:
The back end does not cover all features of FreeBSD. If an unsupported
functions is called (see 'dummies.cc'), you will see an message in your debug
output:
! <function-name> called, not yet implemented!
However, some of the back-end function implemented in the other files have
Some of the back-end functions implemented in the other files have
dummy semantics but have to remain quiet because they are called from low-level
libc code.
Genode-specific additions
-------------------------
The back end of the libc is tailored to Genode via a flexible plugin concept.
This concept enables the combination of a variety of Genode-specific interfaces
with libc-based programs. For example, one program may want to use Genode's LOG
service as standard output whereas interactive programs might prefer the use of
Terminal sessions. Further available (entirely optional) back ends include a
BSD socket implementation based on the lwIP stack and a VFAT file-system back
end based on libffat. The interfaces used between plugins and the libc are
located at 'include/libc-plugin/'.