Выпуст системной библиотеки GNU C Library 2.42 (glibc) и релиз набора утилит GNU Binutils 2.45

28 июля 2025 года состоялся релиз системной библиотеки GNU C Library 2.42 (glibc). Это решение полностью следует требованиям стандартов ISO C23 и POSIX.1–2024. В создании нового выпуска glibc приняли участие 70 разработчиков. Прошлая стабильная версия проекта вышла полгода назад.

По информации OpenNET, основные изменения и доработки в Glibc 2.42:

в функцию pthread_create добавлена поддержка легковесных сторожевых страниц для защиты стека (stack guard page), обращение к которым вызывает исключение и аварийное завершение процесса (SIGSEGV). Реализация основана на появившемся в системном вызове madvise флаге MADV_GUARD_INSTALL, поддерживаемом начиная с ядра Linux 6.13. По сравнению с маппингом в режиме PROT_NONE сторожевые страницы позволяют более эффективно блокировать выполнение кода за пределами выделенной области памяти, так как их создание не требует выделения новой области виртуальной памяти;

добавлены и отражены в заголовочном файле math.h новые функции возведения в степень и вычислений корней compoundn, pown и powr, rootn и rsqrt, определённые в стандарте ISO C23. Варианты функций реализованы для типов float, double, long double, FloatN и FloatNx, а также для обобщённого типа из tgmath.h;

на платформе Linux реализована функция pthread_gettid_np, которая как и функция gettid() возвращает уникальный идентификатор потока, но отличается расширенной проверкой ошибок (при возникновении неопределённого поведения процесс завершается);

добавлены функции для вычисления абсолютных значений, работающие с беззнаковыми типами: uabs, ulabs, ullabs и uimaxabs. Данные функции войдут в состав будущего стандарта C;

на платформе Linux в программном интерфейсе termios.h реализована поддержка произвольных значений скорости передачи. Тип speed_t переопределён и теперь соответствует типу «unsigned int», как в ядре Linux;

в локальный для потоков кэш (tcache), используемый в функции malloc, добавлена поддержка кэширования больших блоков памяти. Максимальный размер блока может быть переопределён через настройку glibc.malloc.tcache_max, которая может принимать значения вплоть до 4 194 304. Ускорена работа кэша для блоков небольшого размера;

в сборочный скрипт configure добавлена опция «‑enable‑sframe», включающая поддержку формата SFrame, применяемого для представления информации о трассировке стека и поддерживаемого функцией backtrace. Для использования SFrame требуется как минимум версия binutils 2.45;

из проекта CORE‑MATH перенесены оптимизированные варианты математических функций acospif, asinpif, atanpif, atan2pif, cospif, sinpif и tanpif;

значительно расширен тестовый набор, который теперь охватывает работу различных вариантов семейств функций printf и scanf;

добавлен код для определения процессоров Intel на базе микроархитектуры Arrow Lake, Panther Lake, Clearwater Forest и Diamond Rapids;

добавлена поддержка платформы z17 (новое поколение мейнфреймов IBM Z/S390);

в настройку glibc.rtld.execstack добавлена поддержка режима совместимости для поддержки программ, требующих исполняемого стека через динамически загружаемые библиотеки;

удалены заголовочный файл termio.h и определение структуры termio из sys/ioctl.h. Программный интерфейс termio.h объявлен устаревшим ещё в POSIX.1 (1988 год) и заменён на termios.h;

для сборки Glibc теперь требуются как минимум выпуски GCC 12.1 и GNU Binutils 2.39.

27 июля 2025 года произошёл релиз набора системных утилит GNU Binutils 2.45. В состав этого решения входят утилиты GNU linker, GNU assembler, nm, objdump, strings, strip.

Основные дополнения и изменения в GNU Binutils 2.45:

в GNU assembler добавлена поддержка последних расширений для архитектур RISC-V, LoongArch и AArch64, а также поддержка большинства расширений Armv9.6. Для x86 добавлена поддержка инструкций XMODX, реализованных в процессорах Zhaoxin PadLock. Для RISC-V добавлена поддержка инструкций ssqosid v1.0, ssnpm v1.0, smnpm v1.0, smmpm v1.0, sspm v1.0, supm v1.0, sha v1.0, zce v1.0, smcdeleg v1.0, ssccfg v1.0, svvptc v1.0, zilsd v1.0, zclsd v1.0, smrnmi v1.0, xtheadvdot v1.0, xmipscbop v1.0, xmipscmov v1.0, xmipsexectl v1.0 и xmipslsp v1.0;

в GNU assembler обеспечена совместимость генерации данных в формате SFrame со спецификацией SFrame V2. Добавлена поддержка генерации информации о трассировке стека (.sframe) из директив CFI на 64-разрядных системах s390 (s390x);

в GNU assembler добавлена поддержка директив.errif и.warnif для вывода диагностических сообщений при срабатывании определённых условий;

в компоновщике GNU LD linker в опции «‑stats» реализована поддержка опционального аргумента, через который можно указать имя файла для сохранения информации о потреблении ресурсов на разных стадиях компоновки. Имя файла также можно указать через переменную окружения LD_STATS. Для систем RISC‑V в компоновщик добавлена поддержка новых форматов PLT (Procedure Linkage Table);

внесены разнообразные улучшения, связанные с поддержкой формата SFrame. Функции для работы с SFrame вынесены в версионированную библиотеку libsframe.so.2;

в дизассемблере и утилите readelf расширена поддержка архитектуры RISC‑V.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии