Опубликован релиз стандартной Си-библиотеки PicoLibc 1.8.6, развиваемой Китом Паккардом (Keith Packard, лидер проекта X.Org) для применения на встраиваемых устройствах с ограниченным размером постоянного хранилища и оперативной памяти. При разработке часть кода заимствована из библиотеки newlib от проекта Сygwin и AVR Libc, развивавшейся для микроконтроллеров Atmel AVR. Код PicoLibc распространяется под лицензией BSD. Поддерживается сборка библиотеки для архитектур ARM (32-bit), Aarch64, i386, RISC-V, x86_64, m68k и PowerPC.
Изначально проект развивался под именем “newlib-nano” и был нацелен на переработку некоторых ресурсоёмких функций Newlib, которые было проблематично использовать на встраиваемых устройствах с небольшим ОЗУ. Например, в PicoLibc функции stdio заменены на компактный вариант из библиотеки avrlibc. Код также вычищен от неиспользуемых в сборке для встраиваемых устройств компонентов, поставляемых не под лицензией BSD. Добавлен упрощённый вариант кода инициализации (crt0), а реализация вызовов переведена с ‘struct _reent‘ на механизм TLS (thread-local storage). Для сборки задействован инструментарий 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 и производится прямое сравнение значений.