Wydanie biblioteki systemowej Glibc 2.36

Po sześciu miesiącach prac opublikowano wydanie systemowej biblioteki GNU C Library (glibc) 2.36, która w pełni spełnia wymagania standardów ISO C11 i POSIX.1-2017. W skład nowego wydania wchodzą poprawki od 59 programistów.

Wśród ulepszeń wprowadzonych w Glibc 2.36 można wyróżnić:

  • Dodano obsługę nowego formatu względnych przemieszczeń adresów DT_RELR (względne relokacje), co pozwala na zmniejszenie rozmiaru względnych przemieszczeń w obiektach współdzielonych i plikach wykonywalnych skompilowanych w trybie PIE (Wykonywalne niezależne od pozycji). Aby wykorzystać pole DT_RELR w plikach ELF, wymagana jest obsługa opcji „-z pack-relative-relocs” w linkerze, wprowadzona w wydaniu zestawu binutils 2.38.
  • Dla platformy Linux wprowadzono funkcje pidfd_open, pidfd_getfd i pidfd_send_signal, które umożliwiają dostęp do funkcjonalności pidfd, pomagającej w obsłudze sytuacji związanych z ponownym użyciem PID w celu dokładniejszej identyfikacji procesów uzyskujących dostęp do śledzonych plików (pidfd jest powiązany z konkretnym procesem i nie zmienia się, podczas gdy PID może być powiązany z innym procesem po zakończeniu bieżącego procesu związanego z tym PID).
  • Dla platformy Linux dodano funkcję process_madvise(), która pozwala jednemu procesowi wykonać wywołanie systemowe madvise() w imieniu innego procesu, identyfikując celowy proces za pomocą pidfd. Dzięki madvise() można informować jądro o szczególnych wymogach dotyczących pamięci w celu optymalizacji zarządzania pamięcią procesu, na przykład na podstawie przekazanych informacji jądro może zainicjować zwolnienie dodatkowej dostępnej pamięci. Wywołanie madvise() przez inny proces może być wymagane w sytuacji, gdy informacje niezbędne do optymalizacji są nieznane bieżącemu procesowi, a są koordynowane przez oddzielny proces zarządzający w tle, który może samodzielnie zainicjować odebranie nieużywanej pamięci od procesów.
  • Na platformie Linux dodano funkcję process_mrelease(), która umożliwia przyspieszenie zwalniania pamięci przez procesy kończące swoje działanie. W normalnych warunkach zwalnianie zasobów i zakończenie procesu nie odbywa się natychmiast i z różnych powodów może być opóźnione, co zakłóca działanie systemów w przestrzeni użytkownika, które szybko reagują na niedobór pamięci, takich jak oomd (dostarczane w systemd). Dzięki wywołaniu process_mrelease takie systemy mogą przewidywalniej inicjować zwrot pamięci od wymuszonych procesów.
  • Do wbudowanej realizacji resolvera DNS dodano wsparcie dla opcji „no-aaaa”, która umożliwia uproszczenie diagnostyki problemów poprzez wyłączenie wysyłania zapytań DNS o rekordy AAAA (określenie adresu IPv6 na podstawie nazwy hosta), w tym podczas wykonywania funkcji NSS, takich jak getaddrinfo(). Opcja ta nie wpływa na przetwarzanie powiązań adresów IPv6 określonych w /etc/hosts oraz wywołań getaddrinfo() z flagą AI_PASSIVE.
  • Na platformie Linux dodano funkcje fsopen, fsmount, move_mount, fsconfig, fspick, open_tree i mount_setattr, które zapewniają dostęp do nowego API jądra w celu zarządzania montowaniem systemów plików z uwzględnieniem przestrzeni nazw punktów montowania (mount namespaces). Proponowane funkcje pozwalają na osobne przetwarzanie różnych etapów montowania (przetwarzanie superbloku, uzyskiwanie informacji o systemie plików, montowanie, przyłączenie do punktu montowania), które wcześniej były realizowane za pomocą ogólnej funkcji mount(). Osobne funkcje umożliwiają realizację bardziej skomplikowanych scenariuszy montowania oraz osobne wykonywanie operacji takich jak rekonfiguracja superbloku, włączanie opcji, zmiana punktu montowania i przenoszenie do innej przestrzeni nazw. Ponadto osobne przetwarzanie pozwala precyzyjnie określić przyczyny zwracania kodów błędów i wskazywać wiele źródeł dla wielowarstwowych systemów plików, takich jak overlayfs.
  • W localedef dodano wsparcie dla przetwarzania plików z definicjami lokalizacji dostarczanych w kodowaniu UTF-8 zamiast ASCII.
  • Dodano funkcje do konwersji wielobajtowych kodowań mbrtoc8 i c8rtomb, zgodne z specyfikacjami ISO C2X N2653 oraz C++20 P0482R6.
  • Dodano wsparcie dla typu char8_t, zdefiniowanego w roboczym projekcie standardu ISO C2X N2653.
  • Dodane funkcje arc4random, arc4random_buf i arc4random_uniform, które oferują opakowania dla systemowego wywołania getrandom oraz interfejsu /dev/urandom, zwracające pseudolosowe liczby wysokiej jakości.
  • Na platformie Linux wdrożono wsparcie dla architektury zestawu instrukcji LoongArch, używanej w procesorach Loongson 3 5000, która implementuje nowy RISC ISA, podobny do MIPS i RISC-V. Obecnie dostępne jest tylko wsparcie dla 64-bitowej wersji LoongArch (LA64). Wymaga co najmniej wersji binutils 2.38, GCC 12 oraz jądra Linux 5.19.
  • Mechanizm prelink został uznany za przestarzały i zostanie usunięty w następnej wersji, a także związane z nim zmienne środowiskowe LD_TRACE_PRELINKING oraz LD_USE_LOAD_BIAS i możliwości linkera.
  • Usunięto kod odpowiedzialny za sprawdzanie wersji jądra Linux i przetwarzanie zmiennej środowiskowej LD_ASSUME_KERNEL. Minimalna wspierana wersja jądra przy budowie Glibc jest definiowana poprzez pole ELF NT_GNU_ABI_TAG.
  • Na platformie Linux zakończono wsparcie dla zmiennej środowiskowej LD_LIBRARY_VERSION.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster