Публикувана е версия на стандартната C библиотека PicoLibc 1.8.6, разработена от Keith Packard (ръководител на проекта X.Org) за използване на вградени устройства с ограничено количество постоянно съхранение и RAM. По време на разработката част от кода е заимстван от библиотеката newlib от проекта Cygwin и AVR Libc, разработен за микроконтролери Atmel AVR. Кодът на PicoLibc се разпространява под лиценз BSD. Сглобяването на библиотека се поддържа за ARM (32-битова), Aarch64, i386, RISC-V, x86_64, m68k и PowerPC архитектури.
Първоначално проектът беше разработен под името „newlib-nano“ и имаше за цел да преработи някои от ресурсоемките функции на Newlib, които бяха проблематични за използване на вградени устройства с малко RAM. Например в PicoLibc функциите stdio са заменени с компактна версия от библиотеката avrlibc. Кодът също се изчиства от компоненти, които не се използват в сглобката на вграденото устройство, които не се доставят под BSD лиценза. Добавена е опростена версия на кода за инициализация (crt0) и изпълнението на повикванията е прехвърлено от „struct _reent“ към механизма TLS (локално съхранение на нишки). За сглобяване се използва инструментариумът Meson.
В новата версия:
- Промените от Newlib 4.4.0 са прехвърлени, като поддръжка за типа „long double“ на i386, RISC-V, Aarch64 и x86_64 архитектури, поддръжка за RISC-V Zfinx/Zdinx разширения, възможност за използване на маски при вмъкване на директории , внедряване на порт за процесори Xtensa, разделяне на манипулаторите на printf в отделни файлове за намаляване на размера при свързване.
- Добавени са символи "__eh_*" към picolibc.ld за LLVM libunwind.
- Включена е тестова поддръжка за 32-битови SPARC системи.
- Осигурена поддръжка за целеви платформи с нетипични типове с плаваща запетая, които сега са отразени в 32-, 64-, 80- и 128-битови типове в кода на picolibc.
- Добавена е поддръжка за SuperH RISC архитектурата.
- Подобрено проследяване на стека при отстраняване на грешки в код на изключение на RISC-V системи.
- Добавена е опция "-Dfast-bufio=true" за подобряване на ефективността на четене и запис при използване на bufio.
- Изчистени публични вградени функции за споделяне на семантиката на gnu_inline.
- Повечето функции на fenv са преместени да използват вградени функции (gnu_inline) вместо обикновените, за да се подобри производителността.
- Създадена е алтернативна реализация на ctype, която не използва масива ctype и извършва директно сравнение на стойности.
Източник: opennet.ru