The release of the standard C library PicoLibc 1.8.9 has been published. It is developed by Keith Packard (leader of the X.Org project) for use on embedded devices with limited storage and RAM. During development, part of the code was borrowed from the newlib library from the Cygwin project and AVR Libc, developed for Atmel AVR microcontrollers. The PicoLibc code is distributed under the BSD license. Library assembly is supported for the following architectures: ARM (32-bit), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch and OpenRisc.
Initially, the project was developed under the name “newlib-nano” and was aimed at reworking some of the resource-intensive functions of Newlib, which were problematic to use on embedded devices with little RAM. For example, in PicoLibc the stdio functions are replaced with a compact version from the avrlibc library. The code is also cleared of components not used in the embedded device assembly that are not supplied under the BSD license. A simplified version of the initialization code (crt0) has been added, and the implementation of calls has been transferred from 'struct _reent' to the TLS (thread-local storage) mechanism. The Meson toolkit is used for assembly.
In the new release:
- Added support for LoongArch, OpenRISC and LatticMico32 architectures.
- An implementation of the uchar.h header file introduced in the C11 standard is proposed.
- Added nano-malloc-clear-freed setting to clear memory freed after free() or realloc().
- Implemented the ability to use clang multilib on ARM64 systems.
- The transition to the new picolibc-ci-tools toolkit for automatic assembly in continuous integration systems has been completed.
- The MIPS architecture supports "semihosting" technology, which allows code running in a debugger or emulator environment to use the host system's I/O mechanisms.
- Added picocrt and semihost support for Xtensa processors.
- Added settings for use with CoreBoot.
- Added the memset_explicit() function, introduced in the C23 standard.
- Case conversion tables have been updated to Unicode specification 15.1.0.
- The functions asnprintf() and vasnprintf() have been moved from the newlib library.
- Added support for the FVP (Fixed Virtual Platforms) emulator developed by ARM.
- Added support for older versions of the GCC compiler (older than 4.4).
- The iconv and locale implementations have been replaced with more compact versions that use common code for working with encodings.
Source: opennet.ru
