Публикуван е релиз на стандартната C библиотека PicoLibc 1.8.9, развивана от Кийт Паккард (Keith Packard, лидер на проекта X.Org) за приложение на вградени устройства с ограничен размер на постоянното хранилище и оперативната памет. При разработката част от кода е заимстван от библиотеката newlib на проекта Cygwin и AVR Libc, развивана за микроконтролери Atmel AVR. Кодът на PicoLibc се разпространява под лицензия BSD. Поддържа се изграждане на библиотеката за архитектури ARM (32-бит), Aarch64, i386, RISC-V, x86_64, m68k, PowerPC, LatticMico32, LoongArch и OpenRisc.
Първоначално проектът се е развивал под името „newlib-nano“ и е бил насочен към преработка на някои ресурсоемки функции на Newlib, които са били проблематични за използване на вградени устройства с малко RAM. Например, в PicoLibc функциите stdio са заменени с компактна версия от библиотеката avrlibc. Кодът също така е почистен от неизползваеми компоненти в изграждането за вградени устройства, които не се предлагат под лицензия BSD. Добавен е опростен вариант на кода за инициализация (crt0), а реализацията на извикванията е прехвърлена от 'struct _reent' на механизма TLS (thread-local storage). За изграждане е използван инструментарият Meson.
В новото издание:
- Добавена е поддръжка на архитектурите LoongArch, OpenRISC и LatticMico32.
- Предложена е реализация на заглавния файл uchar.h, появил се в стандарта C11.
- Добавена е настройка nano-malloc-clear-freed за почистване на паметта, освободена след извършване на free() или realloc().
- Реализирана е възможността за използване на clang multilib на системи ARM64.
- Извършен е преход на новия инструментарий picolibc-ci-tools за автоматично изграждане в системите за непрекъсната интеграция.
- За архитектурата MIPS е реализирана поддръжка на технологията ‘semihosting’, позволяваща на кода, изпълняван в среда на отладчик или емулятор, да използва механизми за вход/изход на хост системата.
- За процесорите Xtensa е добавена поддръжка на picocrt и semihost.
- Добавени са настройки за използване с CoreBoot.
- Добавена е функция memset_explicit(), появила се в стандарта C23.
- Таблиците за преобразуване на регистра символи са обновени до спецификация Unicode 15.1.0.
- От библиотеката newlib са пренесени функциите asnprintf() и vasnprintf().
- Добавена е поддръжка на емулятора FVP (Fixed Virtual Platforms), развиван от ARM.
- Добавена е поддръжка за стари версии на компилатора GCC (по-стари от 4.4).
- Реализациите на iconv и locale са заменени с по-компактни варианти, в които е използван общ код за работа с кодировки.
Източник: opennet.ru
