Biblioteka GNU C jest otwartym, bezpłatnym i potężnym oprogramowaniem bibliotecznym do dowolnej dystrybucji GNU / Linux. Jest również znany jako Glibc i wymagany przez dowolny system operacyjny typu UNIX. Biblioteka GNU C jest odpowiedzialna za definiowanie wywołań systemowych, a także różnych innych podstawowych funkcji, takich jak malloc, open, exit, printf itd.
Używany domyślnie we wszystkich systemach operacyjnych opartych na jądrze Linux
Biblioteka GNU C jest zainstalowana i używana domyślnie we wszystkich systemach operacyjnych opartych na jądrze systemu Linux, zaprojektowanych od podstaw jako główna biblioteka C w systemach GNU i każdym innym systemie operacyjnym obsługiwanym przez jądro Linux.
Zaprojektowany, aby być przenośnym
Glibc jest biblioteką C o wysokiej wydajności, napisaną w całości w języku programowania C. Został zaprojektowany, aby być przenośnym, zinternacjonalizowanym i zaprojektowanym tak, aby obsługiwał wszystkie odpowiednie standardy, w tym POSIX.1-2008 i ISO C11.
Obsługuje funkcje znanych wariantów systemu UNIX
Biblioteka GNU C ma w pełni umiędzynarodowiony interfejs, ale obsługuje ona dobrze znane warianty UNIX, takie jak BSD i System V, dzięki wbudowanym trybom zgodności.
Pierwsze kroki z biblioteką GNU C
Biblioteka GNU C jest instalowana domyślnie w prawie wszystkich systemach operacyjnych GNU / Linux, ale możesz też zainstalować ją ponownie, korzystając z bezpłatnego pakietu źródłowego udostępnionego na jej stronie internetowej lub w Softoware. Aby rozpocząć, pobierz i zapisz archiwum w swoim katalogu domowym.
Rozpakuj archiwum za pomocą narzędzia do zarządzania archiwami, otwórz okno terminala, przejdź do lokalizacji, w której zostały rozpakowane pliki archiwum, uruchom plik & lsquo; ./ configure & rsquo; polecenie do skonfigurowania programu (patrz komenda & lsquo; ./ configure --help & rsquo; dla różnych opcji optymalizacji).
Następnie uruchom polecenie & rsquo; polecenie, aby skompilować bibliotekę, która może zostać zainstalowana w systemie, uruchamiając jedną z & bsp; & rsquo; lub & sudo make install & rsquo; polecenia, w zależności od uprawnień użytkownika root lub uprzywilejowanego.
Co nowego w tej wersji:
- https://sourceware.org/ml/libc-announce/2018/msg00000.html
Co nowego w wersji 2.27:
- https://sourceware.org/ml/libc-announce/2018/msg00000.html
Co nowego w wersji:
- Minimalna wersja jądra systemu Linux, w której można używać tej wersji biblioteki GNU C, to 3.2, z wyjątkiem i [4567] 86 i x86_64, gdzie wystarcza wersja jądra Linux 2.6.32 lub późniejsza (na architekturach, które już wymagają jądra wersje nowsze niż 3.2, wymagania te pozostają niezmienione). Linux 3.2 lub nowszy nagłówki jądra są wymagane na wszystkich architekturach.
- Ustawienia narodowe pap_AN zostały usunięte. Zostało to wycofane przez długi czas. Zostało zastąpione przez pap_AW & amp; pap_CW, oba od dawna są zawarte w poprzednich wydaniach.
- Funkcje readdir_r i readdir64_r są przestarzałe. Zalecane jest używanie readdir i readdir64.
- Typ "union wait" został usunięty. Został wycofany na początku lat 90. i nigdy nie był częścią POSIX. Kod aplikacji powinien używać typu int zamiast "union wait".
- Dodano nową akcję NSS, aby ułatwić administrowanie dużymi systemami rozproszonymi. Akcja MERGE pozwala na połączenie zdalnych magazynów użytkowników, takich jak LDAP, z lokalnymi magazynami użytkowników, takimi jak / etc / groups, w celu zapewnienia łatwych w użyciu, zaktualizowanych i zarządzanych zestawów scalonych poświadczeń. Nowa operacja może być wykorzystana przez skonfigurowanie jej w /etc/nsswitch.conf: group: files [SUCCESS = merge] nis Implementowany przez Stephena Gallaghera (Red Hat).
- Nieaktualna zmienna __malloc_initialize_hook została usunięta z interfejsu API.
- Usunięto długą nieużywaną opcję localedef --old-style. Od 16 lat nic nie robi. Skrypty używające tej opcji mogą ją bezpiecznie upuścić.
- nextupl, nextup, nextupf, nextdownl, nextdown i nextdownf są dodawane do libm. Są one zdefiniowane przez TS 18661 i IEEE754-2008. Następujące funkcje zwracają następną reprezentowalną wartość w kierunku dodatniej nieskończoności, a funkcje następcze zwracają następną reprezentowalną wartość w kierunku ujemnej nieskończoności. Są one obecnie włączone jako rozszerzenia GNU.
- Zmiany związane z bezpieczeństwem:
- Niepotrzebna kopia stosu w _nss_dns_getnetbyname_r została usunięta. Może to spowodować przepełnienie stosu, gdy zostanie wywołana metoda getnetbyname o zbyt długiej nazwie. (CVE-2016-3075)
- Poprzednio getaddrinfo kopiował duże ilości danych adresowych do stosu, nawet po zastosowaniu poprawki dla CVE-2013-4458, potencjalnie skutkując przepełnieniem stosu. getaddrinfo używa teraz alokacji sterty. Zgłoszone przez Michaela Petlana. (CVE-2016-3706)
- Funkcja globalna cierpiała z powodu przepełnienia bufora opartego na stosach, gdy została wywołana z flagą GLOB_ALTDIRFUNC i napotkała długą nazwę pliku. Zgłoszone przez Aleksandra Czudanowa. (CVE-2016-1234)
- Klient Sun RPC UDP może wyczerpać całą dostępną przestrzeń stosu, gdy zostanie zalany przez spreparowane komunikaty ICMP i UDP. Zgłoszone przez Aldy Hernandez 'alloca plugin dla GCC. (CVE-2016-4429)
- Kod zarządzania serwerem nazw IPv6 w libresolv może spowodować wyciek pamięci dla każdego tworzonego wątku, wykonać wyszukiwanie nazw nieudanych i wyjść. Z czasem może to spowodować odmowę usługi z powodu wyczerpania pamięci. Zgłoszone przez Matthiasa Schiffera. (CVE-2016-5417)
- W tej wersji rozwiązano następujące błędy:
- [1170] localedata: ne_NP: aktualizuj Nepalski plik definicji ustawień narodowych [3629] manual: stpcpy opis w string.texi odnosi się do MS-DOG zamiast MS-DOS. [6527] malloc: [powerpc] Ustawienie Malloc niewystarczające dla PowerPC [6796] matematyka: fdim () nie ustawia errno na przepełnienie [10354] libc: posix_spawn powinno używać vfork () w większej liczbie przypadków niż obecnie [11213] localedata: localedata: Dodaj zastrzeżenie praw autorskich do plików regionalnych [12143] localedata: chr_US: nowy Cherokee locale [12450] localedata: sgs_LT: nowe ustawienia regionalne [12676] localedata: ln_CD: nowe ustawienia narodowe [13237] localedata: LC_ADDRESS.country_name: zaktualizuj wszystkie ustawienia regionalne w / najnowsze CLDR dane [13304] matematyka: fma, fmaf, fmal dają złe wyniki [14259] kompilacja: --localedir arg do skonfigurowania jest ignorowane [14499] nptl: Czy posix_spawn wywołuje procedury obsługi plików atfork / używa vfork? [14750] libc: Stan wyścigu w posix_spawn użycie vfork a procedury obsługi sygnału [14934] localedata: es_CL: zły pierwszy dzień tygodnia w języku chile [15262] localedata: LC_MESSAGES.yesexpr / noexpr: niespójne użycie romanizacji [15263] localedata: LC_MESSAGES.yesexpr / noexpr: niespójne użycie wartości 1/0 i +/- [15264] localedata: LC_MESSAGES.yesstr / nostr: brak w wielu lokalizacjach [15368] nptl: raise () nie jest bezpieczny dla sygnałów asynchronicznych [15479] matematyka: sufit, podłoga, runda i trunc podnoszą niedokładny wyjątek [15578] localedata: kk_KZ: różne aktualizacje [16003] localedata: pap_AN: punt stare locale [16137] localedata: iw_IL: punt stare locale [16190] localedata: eo: nowe esperanto locale [16374] localedata: lv_LV: zmień symbol waluty w LC_MONETARY na euro [16742] malloc: warunek wyścigu: pthread_atfork () wywoływane przed pierwszym malloc () skutkuje nieoczekiwanym zachowaniem blokowania / zakleszczeniami [16975] localedata: LC_MESSAGES.yesexpr / noexpr: ponowne sprawdzenie wielkich liter we wszystkich lokalizacjach lokalnych [16983] localedata: postal_fmt nie zezwala na modyfikatory% i% n [17565] localedata : pt_PT: niepoprawny (work-) początek tygodnia [17899] matematyka: [powerpc] floorl zwraca ujemne zero z FE_DOWNWARD [17950] kompilacja: Kompilacja kończy się niepowodzeniem z -msse [18205] localedata: be_BY *: wrong first_weekday and first_workday [18433] libc : posix_spawn nie zwraca poprawnie po niepowodzeniu wykonania [18453] localedata: charmaps / IBM875: niepoprawne kody [18712] ciąg: bits / string2.h niekompatybilny z -O2 -Werror = packed -Wsystem-headers [18896] localedata: he_IL: poprawki dla waluty [18911] localedata: ro_RO: Poprawiono nazwę dnia tygodnia dla "Tuesday" w rumuńskich danych regionalnych [18960] locale: s390: _nl_locale_subfreeres używa kodu LORL na źle ustawionym symbolu [19056] libc: Wycofaj readdir_r [19133] localedata: pt_ *: days & amp; miesiące powinny być pisane małymi literami w języku portugalskim [19198] localedata: nl_NL: małe usprawnienia dla niderlandzkich ustawień regionalnych [19257] network: przeciek pamięci między wątkami w __res_vinit przy użyciu serwerów nazw IPv6 (CVE-2016-5417) [19269] kompilacja: tst-audit4 i błędy tst-audit10 z gcc-6 na maszynie nie posiadającej avx [19400] ustawienia narodowe: Brak języka w "iso-639.def", prosta poprawka w opisie [19431] malloc: Zakleszczenie między fflush, getdelim i fork [19505] libc: Niepoprawne sprawdzanie poprawności deskryptora pliku w posix_spawn_file_actions_add {otwórz, zamknij, dup2} [19509] dynamic-link: dlsym, dlvsym nie zgłaszaj błędów przez dlerror podczas używania RTLD_NEXT [19512] locale: Stale `#ifndef HAVE_BUILTIN_EXPECT 'w` intl / {gettextP , loadinfo}.h '[19534] libc: execle, execlp może użyć malloc [19568] localedata: * _CH: szwajcarskie lokalizacje mają niespójny początek tygodnia [19573] network: res_nclose i __res_maybe_init nie zgadzają się co do inicjowania serwera nazw, łamania Hesiod [19575] localedata: Status tablic GB18030 [19581] localedata: łańcuch sr_ * date_fmt zawiera dodatkowy ciąg nowej linii [19583]: SSSE3_Fast_Copy_Backward flag musi być włączony dla rdzenia AMD Excavator [19592] matematyka: [ldbl-128ibm] ceill niepoprawny w trybach niedomyślnego zaokrąglania [19593] ] math: [ldbl-128ibm] truncl niepoprawny w trybach niedomyślnego zaokrąglania [19594] math: [ldbl-128ibm] roundl niepoprawny w trybach niedomyślnego zaokrąglania [19595] matematyka: [ldbl-128ibm] fmodl niepoprawny dla wyników w podnormalnych podwójny zasięg [19602] matematyka: [ldbl-128ibm] fmodl obsługa równych argumentów z niepoprawną niską częścią zerową [19603] matematyczna: [ldbl-128ibm] remainderl, remquol nieprawidłowe obsługa znaków w testach równości [19610] dynamic-link: ldconfig - X usuwa nieaktualne dowiązania symboliczne [19613] libc: s390x (64-bitowe) rozszerzenie makro WCOREDUMP i inne [19633] locale: strfmon_l stosuje globalne locale do formatowania liczb [19642] network: wyciek pamięci w getnameinfo [19648] libc: test-szkielet.c: Nie ustawiaj RLIMIT_DATA [19653] libc: Potencjalny zerowy wskaźnik dereferencji (CWE-476) w glibc-2.22 [19654] matematyczny: [x86_64] Potrzebujesz testcase dla BZ # 19590 fix [19671] localedata: Missing Sanity Check for malloc () w 'tst-fmon.c' & amp; 'tst-numeric.c' [19674] matematyka: [ldbl-128ibm] niepoprawne przetwarzanie nieproporcjonalnego błędu [19677] matematyka: [ldbl-128ibm] test równości resztderl niepoprawny dla zerowej niskiej części [19678] matematyka: [ldbl-128ibm] nextafterl , nexttowardl niepoprawny znak zerowy wynik [19679] dynamic-link: gcc-4.9.3 Obsługa wyjątków C ++ złamana z powodu niepodpisanego stosu [19726] locale: Konwersja UCS4LE na WEWNĘTRZNY przy pomocy iconv () nie aktualizuje wskaźników i długości w przypadku błędu . [19727] locale: Konwersja z / do UTF-xx z iconv () nie zawsze raportuje błędy na wartościach surogatów UTF-16.[19755] nscd: błąd asercji nscd w gc [19758] dynamic-link: Typo w EXTRA_LD_ENVVARS dla x86-64 [19759] libc: mempcpy nie powinien być inline [19762] dynamic-link: HAS_CPU_FEATURE / HAS_ARCH_FEATURE są łatwe do niewłaściwego użycia [ 19765] libc: s390 potrzebuje zoptymalizowanego mempcpy [19779] glob: glob: przepełnienie bufora za pomocą GLOB_ALTDIRFUNC z powodu niepoprawnego założenia limitu NAME_MAX (CVE-2016-1234) [19783] kompilacja: benchtesty nie wspierają -enable-hardcoded-path -in-tests [19787] network: Brakujące i niepoprawne sprawdzenia skracania w getnameinfo [19790] matematyce: [ldbl-128ibm] nearbyintl niepoprawny w trybach niedomyślnego zaokrąglania [19791] network: niepowodzenie asercji w res_query.c z niepołączalną nazwą adresy serwerów [19792] libc: MIPS: backtrace daje nieskończony ślad wstecz z makecontext [19822] math: libm.więc zainstaluj clobbers stara wersja [19825] network: resolv: send_vc może zwrócić niezainicjowane dane w drugiej odpowiedzi do getaddrinfo [19830] network: nss_dns: powinien sprawdzić długość RDATA przed długością bufora [19831] network: nss_dns: getaddrinfo zwraca niezainicjowane dane w konfrontacji z Rekordy A / AAAA o nieprawidłowym rozmiarze [19837] nss: nss_db: Brak ponownych prób dla niektórych długich linii z większym buforem [19848] matematyka: powl (10, n) dla n = -4, -5, -6, -7 jest off o więcej niż 1 ULP [19853] stdio: drukowanie IBM long double w systemie dziesiętnym z dużą dokładnością jest czasami niepoprawne [19860] kompilacja: x86_64: błędy kompilacji dla tst-audit10 i tst-auditmod10b [19861] nptl: libpthread IFUNC resolver dla widelca może doprowadzić do awarii [19862] network: resolv, nss_dns: Usuń pozostałe rejestrowanie nieoczekiwanych typów rekordów [19865] network: błąd asercji lub wyciek pamięci w _nss_dns_getcanonname_r [19868] network: nss_dns: kod netent nie pomija rekordów innych niż PTR [ 19879] network: nss_dns: Przepełnienie stosu w getnetbyname implementa cue (CVE-2016-3075) [19881] ciąg: poprawienie zestawu pamięci x86-64 [19907] ciąg: niepoprawne testy memcpy [19916] dynamiczne łącze: S390: fprs / vrs nie są zapisywane / odtwarzane podczas rozwiązywania symboli [19925] libc : termios.h Przestrzeń nazw XCASE [19928] ciąg: memmove-vec-unaligned-erms.S jest powolne przy dużych rozmiarach danych [19929] libc: limits.h Przestrzeń nazw NL_NMAX [19931] stdio: wyciek pamięci w vfprintf [19957] libc: klon (CLONE_VM) dostęp do niepoprawnej pamięci nadrzędnej [19963] localedata: en_IL: nowe locale [19989] ] stdio: stdio.h przestrzeń nazwasserów [19994] network: getaddrinfo nie przywraca flagi RES_USE_INET6 w gethosts [19996] locale: langinfo.h obszar nazw_nl_langinfo_l [20005] stdio: fflush na pliku otwartym z fmemopen resetuje pozycję do 0 [20010] network: getaddrinfo: Przepełnienie stosu w tłumaczeniu hosta (CVE-2016-3706) [20012] stdio: libio: niepowodzenie fmemopen append mode [20014] stdio: stdio.h obszar nazw dla pre-wątków POSIX [20017] network: resolv: Use gmtime_r zamiast gmtime w p_secstodate [20023] libc: fcntl.h przestrzeń nazw timespec [20024] matematyka: [x86_64] wektoryzowane sincos przechowuje stos [20031] network: nss_hesiod: Heap overflow w get_txt_records [20041] time: sys / time.h timespec namespace [20043] libc: unistd.h brakujące cuserid dla UNIX98 i wcześniej [20044] libc: unistd .h brakujące pthread_atfork dla UNIX98 [20051] libc: ttyslot w złym nagłówku w złych warunkach [20054] libc: gethostname nie zadeklarowane dla XPG4 [20055] libc: termios.h brakujące tcgetsid dla XPG4 [20072] dynamic-link: x86 init_cpu_features jest wywoływane dwa razy w statycznym pliku wykonywalnym [20073] libc: sys / stat.h fchmod namespace [20074] libc: stdlib.h rand_r namespace [20076] libc: sys / stat .h brakuje S_IFSOCK, S_ISSOCK dla XPG4 [20094] libc: stdlib.h nie powinien zadeklarować: grantpt, ptsname, unlockpt dla XPG3 [20111] libc: struct sockaddr_storage nie może być kopiowane w trybie agregacji [20112] network: sunrpc: stack (frame) overflow w języku Sun RPC clntudp_call (CVE-2016-4429) [20115] ciąg: Dodatkowe wyrównanie w memset-vec-unaligned-erms.S [20119] libc: Niepoprawna maska dla procesorów typu poziomu z CPUID [20139] dynamic-link: Górna część Zmm jest zerowany, jeśli Glibc jest zbudowany z AS nie obsługującym AVX512 [20151] matematyka: [ldbl-128 / ldbl-128ibm] j0l, j1l, y0l, y1l zwraca sNaN dla argumentu sNaN [20153] matematyka: [ldbl-128ibm] sqrtl (sNaN) zwraca sNaN [20156] matematyka: [ldbl-128ibm] ceill, rintl itd. zwraca sNaN dla argumentu sNaN [20157] matematyka: [powerpc] fabsl (sNaN) niepoprawnie podnosi "nieważny" [20160] matematyka: [p owerpc] ceil, rint itp.return sNaN dla wejścia sNaN [20178] libc: posix_spawn {p} nie powinno wywoływać wyjścia [20191] stdio: libio: vtables hardening [20195] string: detekcja FMA4 wymaga wykonania CPUID z rejestrem eax = 0x80000001 [20198] libc: quick_exit niepoprawnie niszczy C ++ 11 obiektów wątku. [20205] matematyka: [i386 / x86_64] nextafterl niepoprawne inkrementowanie negatywnych podnormałów [20212] matematyka: acos (sNaN) zwraca sNaN [20213] matematyka: asin (sNaN) zwraca sNaN [20214] network: synchronizacja nagłówka Linuksa z linuxem / in6. h i ipv6.h ponownie.[20218] matematyka: [i386] asinhl (sNaN) zwraca sNaN [20219] matematyka: [i386] atanhl (sNaN) zwraca sNaN [20222] stdio: fopencookie: Wskaźniki funkcji Mangle [20224] matematyka: [i386] cbrtl (sNaN) zwraca sNaN [20225] matematyka: ldexp, scalbn, scalbln return sNaN dla wejścia sNaN [20226] matematyka: [i386 / x86_64] expl, exp10l, expm1l zwraca sNaN dla wejścia sNaN [20227] matematyka: [i386 / x86_64] logl (sNaN ) zwraca sNaN [20228] matematyka: [i386 / x86_64] log10l (sNaN) zwraca sNaN [20229] matematyka: [i386 / x86_64] log1pl (sNaN) zwraca sNaN [20232] matematyka: [ldbl-128] expm1l (sNaN) zwraca sNaN [20233] matematyka: [ldbl-128ibm] expm1l (sNaN) zwraca sNaN [20234] matematyka: [ldbl-128ibm] log1pl (sNaN) zwraca sNaN [20235] matematyka: [i386 / x86_64] log2l (sNaN) zwraca sNaN [ 20237] nss: nss_db: get * ent segfaults bez poprzedniego zestawu * ent [20240] matematyka: modf (sNaN) zwraca sNaN [20248] libc: debug / tst-longjump_chk2 wywołuje printf z kontrolera sygnału [20250] matematyka: frexp (sNaN ) zwraca sNaN [20252] matematyka: atan2 (sNaN, qNaN) nie podnosi "nieważnego" [20255] ma th: [i386] powrót fdim, fdimf z nadmiarem zasięgu i precyzji / podwójne zaokrąglenie [20256] matematyka: [i386 / x86_64] fdiml zwraca sNaN dla wejścia sNaN [20260] ciąg: ../sysdeps/x86/bits/string.
h: 1092: 3: error: tablica undercript znajduje się poniżej granic tablic [-Werror = array-bounds] [20262] nis: _nss_nis_initgroups_dyn zawsze zwraca NSS_STATUS_NOTFOUND [20263] nptl: solidne zakleszczenia mutex, jeśli inne żądania nici timedlock (tylko ramię / linux) [20277] libc: $ dp nie jest poprawnie zainicjalizowane w sysdeps / hppa / start.S [20284] malloc: malloc: Skorumpowane unikanie areny powoduje niepotrzebne fallbacks mmap [20296] matematyka: [i386 / x86_64] skalblek zwraca sNaN dla wejście sNaN, brak "nieważnych" wyjątków [20314] nptl: make [4]: *** [/usr/include/stdlib.h] Błąd 1 [20316] localedata: id_ID: Februari zamiast Pebruari [20327] ciąg: POWER8 strcasecmp zwraca nieprawidłowy wynik [20347] matematyka: Błąd: Test: j0_downward (0xap + 0) [20348] libc: FAIL: misc / tst-preadvwritev64 [20349] libc: Wartość 64-bitowa jest przekazywana inaczej w p {readv, writev} {64} [20350] libc: Nie ma testu dla p {czytaj, pisz} 64 [20357] matematyka: Nieprawidłowy wynik cos dla 1.5174239687223976 [20384] kompilacji: Nie uruchamiaj testów libmvec-sincos-avx * na nie avx m achines
Co nowego w wersji 2.23:
- CVE-2015-7547: Glibc getaddrinfo () przepełnienie bufora stosu - Naprawiono w gałęzi rozwojowej dla wydania glibc 2.23.
Co nowego w wersji 2.21:
- W tej wersji rozwiązano następujące błędy: 6652, 10672, 12674, 12847, 12926, 13862, 14132, 14138, 14171, 14498, 15215, 15378, 15884, 16009, 16418, 16191, 16469, 16576, 16617, 16618, 16619, 16657, 16740, 16857, 17192, 17266, 17273, 17344, 17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555, 17570, 17571, 17572, 17573, 17574, 17582, 17583, 17584, 17585, 17589, 17594, 17601, 17608, 17616, 17625, 17630, 17633, 17634, 17635, 17647, 17653, 17657, 17658, 17664, 17665, 17668, 17682, 17702, 17717, 17719, 17722, 17723, 17724, 17725, 17732, 17733, 17744, 17745, 17746, 17747, 17748, 17775, 17777, 17780, 17781, 17782, 17791, 17793, 17796, 17797, 17801, 17803, 17806, 17834, 17844, 17848, 17868, 17869, 17870, 17885, 17892.
- CVE-2015-1472 W pewnych warunkach program wscanf może przydzielić zbyt mało pamięci dla zeskanowanych argumentów i przepełnić przydzielony bufor. Implementacja poprawnie oblicza teraz wymagany rozmiar bufora podczas korzystania z funkcji malloc.
- Nowy algorytm semaforowy został zaimplementowany w ogólnym kodzie C dla wszystkich komputerów. Wcześniejsze niestandardowe implementacje semaforów trudno było uzasadnić lub zapewnić, że są one bezpieczne. Nowa wersja semafora obsługuje maszyny z 64-bitowymi lub 32-bitowymi operacjami atomowymi. Nowy algorytm semafora jest używany przez sem_init, sem_open, sem_post, sem_wait, sem_timedwait, sem_trzuit i sem_getvalue.
- Port do Altera Nios II został wniesiony przez Mentor Graphics.
- Zoptymalizowane implementacje strcpy, stpcpy, strncpy, stpncpy, strcmp i strncmp dla powerpc64 / powerpc64le. Wdrożone przez Adhemerval Zanella (IBM).
- Dodano obsługę elekcji pthread mutexes w TSX na powerpc32, powerpc64 i powerpc64le. Może to poprawić skalowanie blokowania istniejących programów w systemach obsługujących HTM. Kod elizny blokady jest dostępny tylko z opcją --enable-lock-elision = yes. Ponadto implementacja elizacji blokady TSX dla powerpc spowoduje, że transakcja zostanie przerwana na każdej syscall, aby uniknąć efektów ubocznych widocznych poza transakcjami.
- Zoptymalizowane implementacje strcpy, stpcpy, strchrnul i strrchr dla AArch64. Nadesłane przez ARM Ltd.
- i386 funkcje memcpy zoptymalizowane z niezaliczonym ładowaniem / przechowywaniem SSE2.
- CVE-2104-7817 Funkcja wordexp może zignorować flagę WRDE_NOCMD w pewnych warunkach wejściowych, powodując wykonanie powłoki dla podstawienia komendy, gdy aplikacja tego nie zażąda. Implementacja sprawdza teraz WRDE_NOCMD bezpośrednio przed wykonaniem powłoki i zwraca błąd WRDE_CMDSUB zgodnie z oczekiwaniami.
- Funkcje printf w stylu CVE-2012-3406 mogą być uruchamiane w przepełnieniu stosu podczas przetwarzania ciągów formatów z dużą liczbą specyfikatorów formatów.
- CVE-2014-9402 Implementacja nazwy getnetby nss_dns może przebiegać w nieskończoną pętlę, jeśli odpowiedź DNS zawiera rekord PTR o nieoczekiwanym formacie.
- Minimalna wersja GCC, którą można wykorzystać do zbudowania tej wersji biblioteki GNU C, to GCC 4.6. Starsze wersje GCC i kompilatory spoza GNU nadal mogą być używane do kompilowania programów przy użyciu biblioteki GNU C.
- Biblioteka GNU C jest teraz domyślnie wyposażona w -Werror. Można to wyłączyć, konfigurując za pomocą opcji --disable-werror.
- Nowe ustawienia regionalne: tu_IN, bh_IN, raj_IN, ce_RU.
- Przestarzała funkcja sigvec została usunięta. Był to oryginalny interfejs 4.2BSD, który zainspirował interfejs sigiksowy POSIX.1, którego programy używały zamiast tego przez około 25 lat. Oczywiście zgodność ABI dla starych plików binarnych za pomocą sigvec pozostaje nienaruszona.
- Scalony gettext 0.19.3 do podkatalogu intl. To naprawia budynek nowszymi wersjami bison.
- Obsługa rozszerzeń ABI MIPS o32 FPXX, FP64A i FP64. Oryginalna kostka ABI MIPS o32 wymaga FPU, w którym rejestr podwójnej precyzji nakłada dwa kolejne rejestry pojedynczej precyzji. MIPS32R2 wprowadził nowy tryb FPU (FR = 1), w którym rejestry podwójnej precyzji rozszerzają odpowiednie rejestry o pojedynczej precyzji, które są niezgodne z ABI o twardym pływaniu. Architektura MIPS SIMD ASE i MIPSR6 wymagają użycia FR = 1, co powoduje konieczność przejścia. Nowe rozszerzenia ABI o32 umożliwiają użytkownikom migrację z czasem od oryginalnego ABI o32 do zaktualizowanego AB32 AB64 o32. Aby to osiągnąć, dynamiczny linker śledzi teraz ABI dowolnego załadowanego obiektu i sprawdza, czy nowe obiekty są kompatybilne. Przejścia trybów będą również wymagane zgodnie z wymaganiami, a nieobsługiwane obiekty będą odrzucane. Testy ABI obejmują ABI zarówno miękkie, jak i twarde dla o32, n32 i n64.
Komentarze nie znaleziono