|
После шести месяцев разработки опубликован релиз системной библиотеки GNU C Library 2.43 (glibc), которая полностью следует требованиям стандартов ISO C23 и POSIX.1-2024. В создании нового выпуска приняли участие 69 разработчиков.
Из реализованных в Glibc 2.43 улучшений можно отметить:
- Добавлена экспериментальная возможность сборки компилятором Clang, которая пока доступна только для платформ aarch64-linux-gnu и x86_64-linux-gnu при использовании runtime, совместимого с libgcc. Для сборки Glibc требуется как минимум версия Clang 18.
- Для систем Linux добавлена функция mseal(), позволяющая процессам выставлять блокировку на изменение определённых частей своего адресного пространства.
- Для систем Linux добавлена функция openat2(), в отличие от функции openat() поддерживающая набор дополнительных флагов для ограничения разрешения файлового пути (запрет пересечения точек монтирования, символических ссылок, magic-ссылок (/proc/PID/fd), компонентов "../").
- Добавлены функции free_sized, free_aligned_sized, memset_explicit и memalignment, появившиеся в стандарте C23.
- В соответствии со стандартом C23 вызов assert определён как макрос с переменным числом аргументов, поддерживающий выражения с запятой внутри инициализатора.
- В соответствии со стандартом C23 функции bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr и wmemchr, возвращающие указатели на входные массивы, переопределены как макросы, возвращающие указатель на тип с квалификатором "const", если входной аргумент является указателем на тип с квалификатором "const".
- В заголовочный файл math.h добавлены определения типов long_double_t, _Float32_t, _Float64_t и _Float128_t, появившихся в стандарте C23.
- Добавлены опциональные режимы исчисления времени TIME_MONOTONIC (постоянно увеличивающееся время, не зависящее от изменения системных часов), TIME_ACTIVE и TIME_THREAD_ACTIVE (время активного выполнения процесса или потока) для использования в функции timespec_get.
- Из проекта CORE-MATH перенесены оптимизированные варианты математических функций acosh, asinh,
atanh, erf, erfc, lgamma и tgamma.
- Добавлены оптимизированные реализации функций fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128) и frexpl (intel96).
- Повышена производительность математических функций acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1 и yn/jn, благодаря удалению кода обработки ошибок SVID (вызов пользовательской функции matherr при ошибке) для новых сборок (для сохранения совместимости с уже собранными программами они оставлены в режиме compat).
- На системах x86 добавлена поддержка процессоров Intel Nova Lake и Wildcat Lake.
- На системах AArch64 в функции malloc по умолчанию включена поддержка больших страниц памяти (transparent huge pages) размером 2MB (параметр ibc.malloc.hugetlb теперь выставлен в 1). В функции clone() реализовано отключение состояния ZA (Z-Array) на CPU с поддержкой расширения SME (Scalable Matrix Extension).
- Для систем AArch64, поддерживающих расширение BTI (Branch Target Identification), добавлена настройка glibc.cpu.aarch64_bti, позволяющая принудительно активировать BTI для всех исполняемых файлов и библиотек. BTI обеспечивает блокирование переходов на произвольные участки кода для противодействия созданию гаджетов в эксплоитах, использующих приёмы возвратно-ориентированного программирования.
- На системах AArch64, поддерживающих одно из расширений для защиты ветвления (Branch Target Identification или Guarded Control Stack), разрешено использование переменной окружения "LD_DEBUG=security" для вывода компоновщиком предупреждений при загрузке исполняемых файлов и библиотек, не поддерживающих данные расширения.
- Для систем AArch64 добавлены векторные варианты функций exp2m1, exp10m1, log10p1, log2p1 и rsqrt.
- Для архитектуры RISC-V добавлена оптимизированная реализация функции memset, использующая расширение RVV (RISC-V Vector).
- В тестовом наборе значительно расширена проверка многопоточности и функций scanf, strerror и strsignal.
- Данные кодировок, информация о типах символов и таблицы транслитерации обновлены для поддержки спецификации Unicode 17.0.0.
- В реализации функциональности LD_PROFILE прекращено использование каталога по умолчанию (/var/tmp) для записи данных профилирования. Для сохранения подобных данных теперь требуется явное определение для них каталога через переменную окружения LD_PROFILE_OUTPUT.
- Устранены уязвимости:
Кроме того, после года разработки проект Cygwin опубликовал выпуск стандартной Си-библиотеки newlib 4.6.0, развиваемой инженерами из компании Red Hat. Библиотека нацелена на предоставление компактной реализации стандартной Си-библиотеки (libc), пригодной для использования на встраиваемых системах c небольшим объёмом постоянного хранилища и оперативной памяти. Код проекта написан на языке Си и распространяется под лицензией LGPLv2.
В новой версии newlib:
- Расширена поддержка спецификации POSIX.1-2024.
- Повышена производительность функций memcpy, mempcpy и memmove.
- Добавлена опция "--enable-newlib-hw-misaligned-access".
- Проведена оптимизация архитектуры RISC-V функций серии mem* и str*.
- Переработан код обработки локалей, который избавлен от глобальной переменной global_locale_string в пользу отдельных переменных locale_string для каждого объекта локали с типом locale_t.
- Добавлена поддержка новой платформы m68k-atari-elf.
- Из FreeBSD-библиотеки gdtoa перенесён код strtorQ.c, который задействован для реализации поддержки 128-разрядного типа "long double" в функции strtold.
- Данные кодировок обновлены до Unicode 17.0.
|