Выпуск системной библиотеки Glibc 2.36
После шести месяцев разработки опубликован релиз системной библиотеки GNU C Library (glibc) 2.36, которая полностью следует требованиям стандартов ISO C11 и POSIX.1–2017. В состав нового выпуска включены исправления от 59 разработчиков.
Из реализованных в Glibc 2.36 улучшений можно отметить:
Добавлена поддержка нового формата относительных перемещений адресов DT_RELR (relative relocation), позволяющего сократить размер относительных перемещений в разделяемых объектах и исполняемых файлах, скомпонованных в режиме с PIE (Position-independent executables). Для использования поля DT_RELR в ELF-файлах необходима поддержка опции »-z pack-relative-relocs» в компоновщике, появившаяся в выпуске набора binutils 2.38.
Для платформы Linux реализованы функции pidfd_open, pidfd_getfd и pidfd_send_signal, предоставляющие доступ к функциональности pidfd, помогающей обрабатывать ситуации с повторным использованием PID для более точной идентификации процессов, обращающихся к отслеживаемым файлам (pidfd связывается с конкретным процессом и не меняется, в то время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID).
- Для платформы Linux добавлена функция process_madvise (), позволяющая одному процессу выполнить системный вызов madvise () от имени другого процесса, идентифицируя целевой процесс при помощи pidfd. Через madvise () можно информировать ядро об особенностях работы с памятью для оптимизации управления памятью процесса, например, на основе переданной информации ядро может инициировать высвобождение дополнительной свободной памяти. Вызов madvise () другим процессом может потребоваться в ситуации, когда информация, необходимая для оптимизации, неизвестна текущему процессу, а координируется отдельным фоновым управляющим процессом, который самостоятельно может инициировать изъятие у процессов неиспользуемой памяти.
Для платформы Linux добавлена функция process_mrelease (), позволяющая ускорить освобождение памяти процесса, завершающего своё выполнение. В обычных условиях освобождение ресурсов и завершение процесса выполняется не мгновенно и по разным причинам может задерживаться, что мешает работе функционирующих в пространстве пользователя систем раннего реагирования на нехватку памяти, таких как oomd (предоставляется в systemd). При помощи вызова process_mrelease подобные системы могут более предсказуемо инициировать возвращение памяти от принудительно завершаемых процессов.
Во встроенную реализацию DNS-резолвера добавлена поддержка опции «no-aaaa», позволяющей для упрощения диагностики проблем отключить отправку DNS-запросов записей AAAA (определение адреса IPv6 по имени хоста), в том числе при выполнении NSS-функций, подобных getaddrinfo (). Опция не влияет на обработку привязок IPv6-адресов, определённых в /etc/hosts и вызовы getaddrinfo () с флагом AI_PASSIVE.
Для платформы Linux добавлены функции fsopen, fsmount, move_mount, fsconfig, fspick, open_tree и mount_setattr, предоставляющие доступ к новому API ядра для управления монтированием файловых систем с учётом пространств имён точек монтирования (mount namespaces). Предложенные функции позволяют раздельно обработать разные стадии монтирования (обработать суперблок, получить информацию об ФС, примонтировать, прикрепить к точке монтирования), которые ранее выполнялись при помощи общей функции mount (). Раздельные фунеции дают возможность выполнять более сложные сценарии монтирования и отдельно выполнять такие операции, как перенастройка суперблока, включение опций, изменение точки монтирования и перенос в другое пространство имён. Кроме того, раздельная обработка позволяет точно определять причины вывода кодов ошибок и задавать несколько источников для многослойных ФС, таких как overlayfs.
- В localedef реализована поддержка обработки файлов с определениями локалей, поставляемых в кодировке UTF-8 вместо ASCII.
- Добавлены функции для преобразования многобайтовых кодировок mbrtoc8 и c8rtomb, соответствующие спецификациям ISO C2X N2653 и C++20 P0482R6.
Добавлена поддержка типа char8_t, определённого в черновике стандарта ISO C2X N2653.
Добавлены функции arc4random, arc4random_buf и arc4random_uniform, предоставляющие обвязки над системным вызовом getrandom и интерфейсом /dev/urandom, возвращающие псевдослучайные числа высокого качества.
При работе на платформе Linux реализована поддержка архитектуры набора команд LoongArch, применяемой в процессорах Loongson 3 5000 и реализующей новый RISC ISA, похожий на MIPS и RISC-V. В текущем виде доступна только поддержка 64-разрядного варианта LoongArch (LA64). Для работы требуется наличие как минимум версий binutils 2.38, GCC 12 и ядра Linux 5.19.
Объявлен устаревшим и будет удалён в следующем выпуске механизм prelink, а также связанные с ним переменные окружения LD_TRACE_PRELINKING и LD_USE_LOAD_BIAS и возможности компоновщика.
Удалён код для проверки версии ядра Linux и обработки переменной окружения LD_ASSUME_KERNEL. Минимально поддерживаемая при сборке Glibc версия ядра определяется через ELF-поле NT_GNU_ABI_TAG.
- На платформе Linux прекращена поддержка переменной окружения LD_LIBRARY_VERSION.
Источник: http://www.opennet.ru/opennews/art.shtml? num=57585
© OpenNet