Публикуван е релиз на стандартната Си-библиотека PicoLibc 1.8.6, разработвана от Кийт Пакард (Keith Packard, ръководител на проекта X.Org), за използване в вградени устройства с ограничен размер на постоянната памет и оперативна памет. При разработването част от кода е заимстван от библиотеката newlib от проекта Сygwin и 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 в отделни файлове за намаляване на размера при компилиране.
- В picolibc.ld са добавени символите „__eh_*“ за LLVM libunwind.
- Включена е тестова поддръжка за 32-битови системи SPARC.
- Осигурена е поддръжка на целеви платформи с нетипични типове с плаваща запетая, които сега се отразяват в 32-, 64-, 80- и 128-битови типове в кода на picolibc.
- Добавена е поддръжка за RISC архитектурата SuperH.
- Подобрена е трасировката на стека при отстраняване на грешки в кода на изключенията на RISC-V системи.
- Добавена е опцията „-Dfast-bufio=true“ за повишаване на ефективността при четене и запис с bufio.
- Извършено е почистване на публичните inline-функции за споделяне на семантиката gnu_inline.
- Повечето функции fenv за повишаване на производителността са прехвърлени на използването на inline-функции (gnu_inline) вместо на обикновени.
- Създадена е алтернативна реализация на ctype, в която не се използва масив ctype и се извършва директно сравнение на стойностите.
Източник: opennet.ru
