Wydanie biblioteki systemowej Glibc 2.36

Po sześciu miesiącach prac wydano bibliotekę systemową GNU C Library (glibc) 2.36, która jest w pełni zgodna z wymaganiami standardów ISO C11 i POSIX.1-2017. Nowa wersja zawiera poprawki od 59 programistów.

Niektóre ulepszenia wprowadzone w Glibc 2.36 obejmują:

  • Dodano obsługę nowego formatu relokacji adresów DT_RELR (relokacja względna), który umożliwia zmniejszenie rozmiaru relokacji względnych we współdzielonych obiektach i plikach wykonywalnych połączonych w trybie PIE (pliki wykonywalne niezależne od pozycji). Używanie pola DT_RELR w plikach ELF wymaga obsługi opcji „-z pack-relative-relocs” w linkerze, wprowadzonej w wersji binutils 2.38.
  • Dla platformy Linux zaimplementowano funkcje pidfd_open, pidfd_getfd i pidfd_send_signal, zapewniając dostęp do funkcjonalności pidfd, która pomaga obsługiwać sytuacje ponownego wykorzystania PID w celu dokładniejszej identyfikacji procesów uzyskujących dostęp do monitorowanych plików (pidfd jest powiązany z konkretnym procesem i nie zmienia się, natomiast PID może zostać przyłączony do innego procesu po zakończeniu bieżącego procesu powiązanego z tym PID).
  • Dla platformy Linux dodano funkcję Process_madvise(), aby umożliwić jednemu procesowi wywołanie systemowe madvise() w imieniu innego procesu, identyfikując proces docelowy za pomocą formatu pidfd. Za pomocą madvise() możesz poinformować jądro o funkcjach pracy z pamięcią, aby zoptymalizować zarządzanie pamięcią procesu, na przykład na podstawie przesłanych informacji jądro może zainicjować zwolnienie dodatkowej wolnej pamięci. Wywołanie madvise() przez inny proces może być wymagane w sytuacji, gdy informacje potrzebne do optymalizacji nie są znane bieżącemu procesowi, ale są koordynowane przez odrębny proces kontroli w tle, który może samodzielnie inicjować usuwanie nieużywanej pamięci z procesów.
  • Dla platformy Linux dodana została funkcja Process_mrelease(), która pozwala przyspieszyć zwalnianie pamięci dla procesu kończącego jego wykonanie. W normalnych okolicznościach zwolnienie zasobów i zakończenie procesu nie są natychmiastowe i mogą zostać opóźnione z różnych powodów, zakłócając systemy wczesnego reagowania pamięci przestrzeni użytkownika, takie jak oomd (dostarczany przez systemd). Wywołując proces_mrelease, takie systemy mogą w bardziej przewidywalny sposób wyzwalać odzyskiwanie pamięci z wymuszonych procesów.
  • Do wbudowanej implementacji resolwera DNS dodano obsługę opcji „no-aaaa”, która umożliwia wyłączenie wysyłania żądań DNS dla rekordów AAAA (ustalanie adresu IPv6 po nazwie hosta), w tym podczas wykonywania NSS funkcje takie jak getaddrinfo(), aby uprościć diagnozę problemu. Ta opcja nie wpływa na przetwarzanie powiązań adresów IPv6 zdefiniowanych w /etc/hosts i wywołań getaddrinfo() z flagą AI_PASSIVE.
  • Dla platformy Linux dodano funkcje fsopen, fsmount, move_mount, fsconfig, fspick, open_tree i mount_setattr, zapewniając dostęp do nowego API jądra do zarządzania montowaniem systemu plików w oparciu o przestrzenie nazw montowania. Proponowane funkcje pozwalają na osobne przetwarzanie różnych etapów montowania (przetwarzanie superbloku, uzyskiwanie informacji o systemie plików, montowanie, dołączanie do punktu montowania), które wcześniej były wykonywane przy użyciu wspólnej funkcji mount(). Oddzielne funkcje zapewniają możliwość wykonywania bardziej złożonych scenariuszy montowania i oddzielnego wykonywania operacji, takich jak rekonfiguracja superbloku, włączanie opcji, zmiana punktu montowania i przenoszenie do innej przestrzeni nazw. Ponadto oddzielne przetwarzanie pozwala dokładnie określić przyczyny generowania kodów błędów i ustawić wiele źródeł dla wielowarstwowych systemów plików, takich jak nakładki.
  • localedef zapewnia obsługę przetwarzania plików definicji ustawień regionalnych dostarczonych w kodowaniu UTF-8 zamiast ASCII.
  • Dodano funkcje umożliwiające konwersję wielobajtowych kodowań mbrtoc8 i c8rtomb na specyfikacje ISO C2X N2653 i C++20 P0482R6.
  • Dodano obsługę typu char8_t zdefiniowanego w projekcie normy ISO C2X N2653.
  • Dodano funkcje arc4random, arc4random_buf i arc4random_uniform, które zapewniają opakowania na wywołanie systemowe getrandom i interfejs /dev/urandom, który zwraca wysokiej jakości liczby pseudolosowe.
  • Działając na platformie Linux, obsługuje architekturę zestawu instrukcji LoongArch stosowaną w procesorach Loongson 3 5000 i implementuje nowy RISC ISA, podobny do MIPS i RISC-V. W obecnej formie dostępna jest tylko obsługa 64-bitowej wersji LoongArch (LA64). Do pracy potrzebne są co najmniej wersje binutils 2.38, GCC 12 i jądro Linuksa 5.19.
  • Mechanizm wstępnego łączenia, jak również powiązane z nim zmienne środowiskowe LD_TRACE_PRELINKING i LD_USE_LOAD_BIAS oraz możliwości konsolidatora są przestarzałe i zostaną usunięte w przyszłej wersji.
  • Usunięto kod sprawdzający wersję jądra Linuksa i obsługujący zmienną środowiskową LD_ASSUME_KERNEL. Minimalna wersja jądra obsługiwana podczas budowania Glibc jest określana poprzez pole ELF NT_GNU_ABI_TAG.
  • Zmienna środowiskowa LD_LIBRARY_VERSION została wycofana na platformie Linux.

Źródło: opennet.ru

Dodaj komentarz