Выпуск стандартной Си-библиотеки PicoLibc 1.8.6

Опубликован релиз стандартной Си-библиотеки 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 и производится прямое сравнение значений.
Release. Ссылка here.