Пуск на системната библиотека Glibc 2.36

След шестмесечна разработка беше публикувана версия на системната библиотека GNU C Library (glibc) 2.36, която напълно отговаря на изискванията на стандартите ISO C11 и POSIX.1-2017. Новата версия включва корекции от 59 разработчици.

От подобренията, реализирани в Glibc 2.36, може да се отбележи:

  • Добавена е поддръжка на новия формат за относителни премествания на адреси DT_RELR (относително преместване), който позволява да се намали размерът на относителните премествания в споделените обекти и изпълними файлове, компилирани в режим с PIE (програми, независими от позицията). За използването на полето 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). За работа е необходим минимум версия 2.38 на binutils, 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.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster