Opublikowano wersję standardowej biblioteki C PicoLibc 1.8.9, rozwijanej przez Keitha Packarda (lidera projektu X.Org) do użycia w urządzeniach wbudowanych z ograniczonym rozmiarem pamięci trwałej i RAM. W trakcie rozwoju część kodu została zaadaptowana z biblioteki newlib z projektu Cygwin oraz AVR Libc, rozwijanej dla mikrokontrolerów Atmel AVR. Kod PicoLibc jest udostępniany na licencji BSD. Obsługiwane są kompilacje biblioteki dla architektur ARM (32-bit), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch i OpenRisc.
Początkowo projekt rozwijał się pod nazwą „newlib-nano” i był skierowany na przetworzenie niektórych zasobochłonnych funkcji Newlib, które były problematyczne do użycia na urządzeniach wbudowanych z niewielką pamięcią RAM. Na przykład w PicoLibc funkcje stdio zostały zastąpione kompaktową wersją z biblioteki avrlibc. Kod został również oczyszczony z nieużywanych komponentów związanych z buildem dla urządzeń wbudowanych, które nie były dostarczane na licencji BSD. Dodano uproszczoną wersję kodu inicjalizacji (crt0), a implementacja wywołań została przekształcona z „struct _reent” na mechanizm TLS (thread-local storage). Do budowy użyto narzędzi Meson.
W nowym wydaniu:
- Dodano wsparcie dla architektur LoongArch, OpenRISC i LatticMico32.
- Zaproponowano implementację pliku nagłówkowego uchar.h, wprowadzonego w standardzie C11.
- Dodano opcję nano-malloc-clear-freed do czyszczenia pamięci zwolnionej po wywołaniu free() lub realloc().
- Zrealizowano możliwość korzystania z clang multilib na systemach ARM64.
- Zrealizowano przejście na nowe narzędzie picolibc-ci-tools do automatycznej kompilacji w systemach ciągłej integracji.
- Dla architektury MIPS wprowadzono wsparcie technologii «semihosting», pozwalającej kodowi działającemu w środowisku debuggera lub emulatora korzystać z mechanizmów wejścia/wyjścia systemu gospodarza.
- Dla procesorów Xtensa dodano wsparcie picocrt i semihost.
- Dodano ustawienia do użycia z CoreBoot.
- Dodano funkcję memset_explicit(), wprowadzonej w standardzie C23.
- Tabele konwersji rejestru znaków zaktualizowano do specyfikacji Unicode 15.1.0.
- Z biblioteki newlib przeniesiono funkcje asnprintf() i vasnprintf().
- Dodano wsparcie dla emulatora FVP (Fixed Virtual Platforms), rozwijanego przez ARM.
- Dodano wsparcie dla starszych wersji kompilatora GCC (starszych niż 4.4).
- Implementacje iconv i locale zostały zastąpione bardziej kompaktowymi wersjami, wykorzystującymi wspólny kod do obsługi kodowań.
Źródło: opennet.ru
