Opublikowano wersję standardowej biblioteki C PicoLibc 1.8.6, rozwijanej przez Keitha Packarda (lidera projektu X.Org) do zastosowań na urządzeniach wbudowanych z ograniczoną wielkością pamięci trwałej i RAM. Przy opracowywaniu część kodu została zaadaptowana z biblioteki newlib projektu Cygwin oraz AVR Libc, rozwijanej dla mikrokontrolerów Atmel AVR. Kod PicoLibc jest udostępniany na licencji BSD. Wspierana jest budowa biblioteki dla architektur ARM (32-bit), Aarch64, i386, RISC-V, x86_64, m68k oraz PowerPC.
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:
- Przeniesiono zmiany z Newlib 4.4.0, takie jak wsparcie dla typu „long double” na architekturach i386, RISC-V, Aarch64 i x86_64, wsparcie dla rozszerzeń RISC-V Zfinx/Zdinx, możliwość używania masek przy dodawaniu katalogów oraz realizację portu dla procesorów Xtensa, wydzielono obsługiwacze printf do oddzielnych plików w celu zmniejszenia rozmiaru podczas linkowania.
- W pliku picolibc.ld dodano symbole „__eh_*” dla biblioteki LLVM libunwind.
- Dodano testowe wsparcie dla 32-bitowych systemów SPARC.
- Zapewniono wsparcie dla platform docelowych z nietypowymi typami zmiennoprzecinkowymi, które teraz są odzwierciedlane w typach 32-, 64-, 80- i 128-bitowych w kodzie picolibc.
- Dodano wsparcie dla architektury RISC SuperH.
- Ulepszono śledzenie stosu podczas debugowania kodu wyjątków w systemach RISC-V.
- Dodano opcję „-Dfast-bufio=true” w celu zwiększenia wydajności przy odczycie i zapisie z użyciem bufio.
- Przeprowadzono oczyszczenie publicznych funkcji inline dla wspólnej semantyki gnu_inline.
- Większość funkcji fenv dla zwiększenia wydajności została przeniesiona na użycie funkcji inline (gnu_inline) zamiast tradycyjnych.
- Stworzono alternatywną implementację ctype, która nie korzysta z tablicy ctype i dokonuje bezpośredniego porównania wartości.
Źródło: opennet.ru
