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