The release of the standard C library PicoLibc 1.8.9 has been published, developed by Keith Packard (the leader of the X.Org project) for use on embedded devices with limited persistent storage and RAM. During development, part of the code was taken from the newlib library of the Cygwin project and AVR Libc, which was developed for Atmel AVR microcontrollers. The PicoLibc code is distributed under the BSD license. Support for building the library for ARM (32-bit), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch, and OpenRisc architectures is provided.
Initially, the project was developed under the name 'newlib-nano' and was aimed at reworking some resource-heavy functions of Newlib, which were problematic to use on embedded devices with limited RAM. For instance, in PicoLibc, the stdio functions are replaced with a compact version from the avrlibc library. The code has also been cleaned of unused components not provided under the BSD license for embedded device builds. A simplified initialization code variant (crt0) has been added, and the implementation of calls has been converted from ‘struct _reent’ to the TLS (thread-local storage) mechanism. The Meson build system has been used.
In the new release:
- Support for LoongArch, OpenRISC, and LatticMico32 architectures has been added.
- An implementation of the header file uchar.h, introduced in the C11 standard, has been proposed.
- A nano-malloc-clear-freed setting has been added to clean up memory freed after executing free() or realloc().
- The ability to use clang multilib on ARM64 systems has been implemented.
- Transition to a new toolchain, picolibc-ci-tools, for automatic builds in continuous integration systems has been made.
- For the MIPS architecture, support for the semihosting technology has been implemented, allowing code executed in a debugger or emulator environment to use the host system's input/output mechanisms.
- Support for picocrt and semihost has been added for Xtensa processors.
- Settings have been added for use with CoreBoot.
- The memset_explicit() function, introduced in the C23 standard, has been added.
- Character register conversion tables have been updated to Unicode 15.1.0 specifications.
- The functions asnprintf() and vasnprintf() have been ported from the newlib library.
- Support for the FVP (Fixed Virtual Platforms) emulator, developed by ARM, has been added.
- Support for older versions of the GCC compiler (earlier than 4.4) has been added.
- Implementations of iconv and locale have been replaced with more compact versions that utilize shared code for working with encodings.
Source: opennet.ru
