GNU C Library

Screenshot Software:
GNU C Library
Detalii soft:
Versiune: 2.28 Actualizat
Incarca data: 16 Aug 18
Producător: Roland McGrath
Licenţă: Gratuit
Popularitate: 16

Rating: 3.0/5 (Total Votes: 2)

Biblioteca GNU C este un software de bibliotecă deschis și gratuit, disponibil pentru orice distribuție GNU / Linux. Este, de asemenea, cunoscut sub numele de Glibc și solicitat de orice sistem de operare de tip computer UNIX. Biblioteca GNU C este responsabilă pentru definirea apelurilor de sistem, precum și a altor funcții de bază, cum ar fi malloc, open, exit, printf, etc.


Utilizat implicit în toate sistemele de operare bazate pe kernelul Linux

Biblioteca GNU C este instalată și utilizată în mod implicit în toate sistemele de operare bazate pe kernel-ul Linux, concepute de la început pentru a acționa ca principala bibliotecă C în sistemele GNU și orice alt sistem de operare alimentat de kernel-ul Linux.


Proiectat pentru a fi portabil

Glibc este o bibliotecă C de înaltă performanță, scrisă în întregime în limba de programare C. Acesta este conceput pentru a fi portabil, internaționalizat și proiectat pentru a sprijini toate standardele relevante, inclusiv POSIX.1-2008 și ISO C11.


Sprijină caracteristicile unor variante UNIX bine cunoscute

În timp ce biblioteca GNU C are o interfață complet internaționalizată, încearcă să suporte caracteristicile unor variante UNIX bine cunoscute, cum ar fi BSD și System V, datorită modurilor de compatibilitate încorporate.

Începeți cu Biblioteca GNU C

În timp ce Biblioteca GNU C este instalată în mod implicit în aproape toate sistemele de operare GNU / Linux, puteți să o reinstalați și ea, folosind pachetul sursă distribuit pe site-ul său Web sau Softoware gratuit. Pentru a începe, descărcați și salvați arhiva în directorul Home.

Despachetați arhiva cu un utilitar manager de arhive, deschideți o fereastră de terminal, mergeți la locația în care au fost extrase fișierele de arhivă, executați "& configure"; comanda pentru configurarea programului (vezi comanda & lsquo; / configure - help pentru diferite optiuni de optimizare).

Apoi rulați & lsquo; make & rsquo; comanda pentru a compila biblioteca, care poate fi instalată la nivel de sistem prin rularea fiecărei instalări & install; sau "sudo make install & rsquo; comenzi, în funcție de rădăcină sau de un utilizator privilegiat.

Ce este nou în această versiune:

  • https://sourceware.org/ml/libc-announce/2018/msg00000.html

Ce este nou în versiunea 2.27:

  • https://sourceware.org/ml/libc-announce/2018/msg00000.html

Ce este nou în versiune:

  • Versiunea minimă de kernel Linux pe care această versiune a Bibliotecii GNU C poate fi utilizată este cu 3.2, cu excepția versiunilor i [4567] 86 și x86_64, unde versiunea 2.6.32 sau mai recentă a kernel-ului este suficientă (pe arhitecturile care necesită deja kernel versiuni mai recente decât 3.2, aceste cerințe rămân neschimbate). În toate arhitecturile sunt necesare anteturi de kernel Linux 3.2 sau ulterioare.
  • Locația pap_AN a fost ștearsă. Acest lucru a fost depreciat de mult timp. Acesta a fost înlocuit de pap_AW & amp; pap_CW, ambele fiind incluse de mult în versiunile anterioare.
  • Funcțiile readdir_r și readdir64_r au fost depreciate. Se recomandă utilizarea instead a readdir și a readdir64.
  • Tipul "union wait" a fost eliminat. A fost depreciat la începutul anilor 1990 și niciodată nu face parte din POSIX. Codul aplicației ar trebui să folosească tipul int în loc de "union wait".
  • Se adaugă o nouă acțiune NSS pentru a facilita administrarea sistemelor distribuite mari. Acțiunea, MERGE, permite stocarea de la distanță a magazinelor de utilizatori, cum ar fi LDAP, pentru a fi îmbinate în magazine locale de utilizatori, cum ar fi / etc / groups, pentru a oferi seturi de acreditare îmbinate ușor de utilizat, actualizate și gestionate. Noua acțiune poate fi folosită prin configurarea acesteia în /etc/nsswitch.conf: group: files [SUCCESS = merge] nis Realizat de Stephen Gallagher (Red Hat).
  • Variabila __malloc_initialize_hook depreciată a fost eliminată din API.
  • Opțiunea stildecodică lungă neutilizată a fost eliminată. Nu a făcut nimic în ultimii 16 ani. Scripturile care utilizează această opțiune pot să-l lase în siguranță.
  • următor, următoarea, următoarea, următoarea, următoarea și ulterioară sunt adăugate la libm. Acestea sunt definite de TS 18661 și IEEE754-2008. Următoarele funcții returnează următoarea valoare reprezentabilă în direcția infinitului pozitiv, iar funcțiile următoare afișează următoarea valoare reprezentabilă în direcția infinitului negativ. Acestea sunt activate în prezent ca extensii GNU.
  • Modificări legate de securitate:
  • A fost eliminată o copie de stivă inutilă în _nss_dns_getnetbyname_r. S-ar putea duce la o depășire de stivă atunci când numele de primire a fost apelat cu un nume prea lung. (CVE-2016-3075)
  • Anterior, getaddrinfo a copiat cantități mari de date de adresă în stivă, chiar și după ce a fost aplicată fixul pentru CVE-2013-4458, ceea ce ar putea duce la o depășire a stivei. getaddrinfo folosește acum o alocare heap în schimb. A raportat de Michael Petlan. (CVE-2,016-3,706)
  • Funcția de glob a suferit de la o suprapunere de tampoane bazată pe stivă când a fost apelată cu steagul GLOB_ALTDIRFUNC și a întâmpinat un nume lung de fișier. Raportat de Alexander Cherepanov. (CVE-2016-1234)
  • Clientul Sun RPC UDP ar putea epuiza întregul spațiu disponibil al stivei atunci când a fost inundat cu mesajele ICMP și UDP artizanale. A fost raportat de plugin-ul Aldy Hernandez 'alloca pentru GCC. (CVE-2,016-4,429)
  • Codul de gestionare a serverului de nume IPv6 din libresolv ar putea duce la o scurgere de memorie pentru fiecare fir care este creat, efectuează o cădere de denumire defectuoasă și iese. De-a lungul timpului, acest lucru ar putea duce la negarea serviciului datorită epuizării memoriei. Raportat de Matthias Schiffer. (CVE-2016-5417)
  • Următoarele erori sunt rezolvate cu această versiune:
  • <>[1170] localedata: ne_NP: Actualizare fișier de definire locală nepaleză [3629] manual: descrierea stpcpy în string.texi se referă la MS-DOG în loc de MS-DOS. [6527] malloc: [powerpc] Alinierea Malloc este insuficientă pentru PowerPC [6796] matematică: fdim () nu stabilește errno la depășire [10354] libc: posix_spawn ar trebui să folosească vfork adăugați renunțarea la drepturile de autor la fișiere locale [12143] localedata: chr_US: nou Cherokee locale [12450] localedata: sgs_LT: new locale [12676] localedata: ln_CD: new locale [13237] localedata: LC_ADDRESS.country_name: date [13304] matematică: fma, fmaf, fmal produce rezultate greșite [14259] build: --localedir arg to configure este ignorat [14499] nptl: Are posix_spawn invoca manipulatoarele atfork / [14750] libc: Condiția rasei în posix_spawn utilizarea vfork vs manipulatorii de semnal [14934] localedata: es_CL: greșit întâi săptămâna chilean locale [15262] localedata: LC_MESSAGES.yesexpr / noexpr: inconsistent use of romanisation [15263] localedata: LC_MESSAGES.yesexpr / noexpr: utilizarea inconsistentă a 1/0 și +/- [15264] localedata: LC_MESSAGES.yesstr / nostr: lipsesc în multe locații [15368] nptl: plusare () nu este asin-semnal în condiții de siguranță [15479] matematica: ceil, podea, rotund și TRUNC ridica excepție inexact [15578] localedata: kk_KZ: diverse actualizări [16003] localedata: pap_AN: Punt locale vechi [16137] localedata: iw_IL: Punt vechi locale [16190] localedata: EO: nouă localizare esperanto [16374] localedata: lv_LV: simbol moneda schimbare în LC_MONETARY în euro [16742] malloc: cursă Stare: pthread_atfork (), numit înainte de prima malloc () are ca rezultat comportament de blocare / deadlocks neașteptate [16975] localedata: LC_MESSAGES.yesexpr / noexpr: revizita capitalizare în toate localizări [16983] localedata: postal_fmt nu permite% l și n% modificatori [17565] localedata : pt_PT: greșit (work-) începerea săptămânii [17899] matematica: [PowerPC] floorl întoarce negativ zero, cu FE_DOWNWARD [17950] construi: Build eșuează cu -msse [18205] localedata: be_BY *: first_weekday greșit și first_workday [18433] libc : posix_spawn nu se întoarce corect în cazul în care nu executa [18453] localedata: charmaps / IBM875: coduri incorecte [18712] string: bits / string2.h incompatibile cu -O2 -Werror = ambalate -Wsystem-headers [18896] localedata: he_IL: îmbunătățiri pentru valută [18911] localedata: ro_RO: folosește opcode larl pe simbol misaligned [19056] libc: Deprecate readdir_r [19133] localedata: pt_ *: days & amp; (19257) localedata: nl_NL: imbunatatiri minime pentru localitatile olandeze [19257]: Pierdere de memorie per-thread in __res_vinit cu nume de servere IPv6 (CVE-2016-5417) [19269] build: tst-audit4 tc-audit10 erori cu gcc-6 pe mașină non-avx [19400] locale: Limbă lipsă în "iso-639.def", fixare trivială în descriere [19431] malloc: deadlock între fflush, getdelim, and furk [ Analiza incorectă a descriptorilor descriptorilor de fișiere în posix_spawn_file_actions_add {open, close, dup2} [19509] dinamic-link: dlsym, dlvsym nu raportează erorile prin dlerror atunci când folosesc RTLD_NEXT [19512] locale: Stale `#ifndef HAVE_BUILTIN_EXPECT 'în` intl / {gettextP , loadinfo}.h "[19534] libc: execle, execlp poate folosi malloc [19568] localedata: * _CH: localizarile elvetiene au inceput inconsecvent de saptamana [19573] din tabelele GB18030 [19581] localedata: sr_ * date_fmt șir conține un șir de linii adiționale [19583]: flagul SSSE3_Fast_Copy_Backward trebuie să fie activat pentru corecții nucleare [19592] matematice: [ldbl-128ibm] ] math: [ldbl-128ibm] truncl incorect în moduri de rotunjire fără implicit [19594] matematică: [ldbl-128ibm] rotund incorect în modurile de rotunjire fără implicit [19595] matematică: [ldbl-128ibm] fmodl incorect pentru rezultate subnormale [19603] matematică: [ldbl-128ibm] remainderl, remquol manipularea incorectă a semnelor în testele de egalitate [19610] dynamic-link: ldconfig - X elimină legăturile simbolice vechi [19613] libc: s390x (64 bit) macro expansiune WCOREDUMP și altele [19633] locale: strfmon_l aplică aplicația globală de configurare a numerelor [19642]: Pierderi de memorie în getnameinfo [19648] libc: test-skeleton.c: Nu setați RLIMIT_DATA [19653] libc: Potențial pentru dereferența indicatorului NULL (CWE-476) în glibc-2.22 [19654] math: [x86_64] Necesită testcase pentru BZ # 19590 fix [19671] () în 'tst-fmon.c' & amp; [19677] matematică: [ldbl-128ibm] empirică [19677] matematică: [ldbl-128ibm] matematică: [ldbl-128ibm] , următoarea semnal incorect al rezultatului zero [19679] dinamic-link: gcc-4.9.3 Manipularea excepției C ++ ruptă din cauza stivei nealiniate [19726] locale: Conversia UCS4LE la INTERNAL cu iconv () nu actualizează indicii și lungimile în caz de eroare . [19727] locale: Conversia de la / la UTF-xx cu iconv () nu întotdeauna raportă erori la valorile substitutelor UTF-16.[19755] nscd: nscd eșec al aserțiunii în gc [19758] dinamic-link: Typo în EXTRA_LD_ENVVARS pentru x86-64 [19759] libc: mempcpy nu ar trebui să fie înlăturat [19762] dynamic_link: HAS_CPU_FEATURE / HAS_ARCH_FEATURE [ 19765] libc: s390 are nevoie de un optimizat mempcpy [19779] glob: glob: buffer overflow cu GLOB_ALTDIRFUNC din cauza ipotezei limitate NAME_MAX incorect (CVE-2016-1234) [19783] build: benchtests nu suporta - -in-teste [19787]: Verificări lipsă și incorectă a truncării în getnameinfo [19790] math: [ldbl-128ibm] nearbyintl incorect în moduri de rotunjire fără implicit [19791]: Eroare de afirmare în res_query.c cu nume un-conectabil adresele serverului [19792] libc: MIPS: backtrace produce backtrace infinit cu makecontext [19822] math: libm.așa că instalați versiunea veche a clobbers [19825]: resolv: send_vc poate returna datele neinitializate în răspunsul secund la rețeaua getADdrinfo [19830]: nss_dns: ar trebui să verifice lungimea RDATA față de lungimea tamponului [19831] rețea: nss_dns: getaddrinfo returnează date neinitializate atunci când se confruntă cu Înregistrările A / AAAA ale mărimii invalide [19837] nss: nss_db: Nu există încercări pentru unele linii lungi cu un tampon mai mare [19848] matematică: powl (10, n) pentru n = -4, -5, -6, -7 este mai mult de 1 ULP [19853] stdio: Imprimarea IBM lung dublu în zecimal cu mare precizie este uneori incorectă [19860] build: x86_64: compilați erorile pentru tst-audit10 și tst-auditmod10b [19861] nptl: libpthread IFUNC resolver for fork poate conduce la o rețea de blocare [19862]: resolv, nss_dns: Eliminați răsfoirea rămasă a tipurilor de înregistrări neașteptate [19865]: Eșecul de afirmare sau scurgerea memoriei în rețeaua _nss_dns_getcanonname_r [19868]: nss_dns: codul netent nu trece peste înregistrările non-PTR [ 19879] rețea: nss_dns: Overflow de stivă în implementa getnetbyname (19926) string: Îmbunătățește x86-64 memset [19907] string: Tentativele incorecte ale memcpy [19916] dinamic-link: S390: fprs / vrs nu sunt salvate / restaurate în timp ce rezolvă simbolurile [19925] : termios.h namespace XCASE [19928] string: memmove-vec-unaligned-erms.S este lent cu dimensiune mare de date [19929] libc: limits.h NL_NMAX namespace [19931] stdio: Memorie scurgere în vfprintf [19957] libc: clone (CLONE_VM) acces nevalid mamă memorie [19963] localedata: en_IL: ] stdio: stdio.h cuserid namespace [19994] rețea: getaddrinfo nu restabilește RES_USE_INET6 flag în gethosts [19996] locale: langinfo.h nl_langinfo_l namespace [20005] stdio: fflush pe un fișier deschis cu fmemopen resetează poziția la 0 [ [20014] stdio: spațiu de nume stdio.h pentru pre-fișiere POSIX [20017] rețea: resolv: Utilizați gmtime_r: getaddrinfo: Prelungirea stivei în traducerea hostent (CVE-2016-3706) în loc de gmtime în p_secstodate [20023] libc: fcntl.h timespec namespace [20024] math: [x86_64] sincos vectorizat trashes rețeaua [20031] stivă: nss_hesiod: Overflow heap în get_txt_records [20041] time: sys / time.h timespec namespace [20043] libc: unistd.h lipsă cuserid pentru UNIX98 și înainte de [20044] libc: unistd .h lipsesc pthread_atfork pentru UNIX98 [20051] libc: ttyslot în antet greșit în condiții greșite [20054] libc: gethostname nu a fost declarat pentru XPG4 [20055] libc: termios.h lipsă tcgetsid pentru XPG4 [20072] dinamic-link: x86 init_cpu_features se numește de două ori în executabil static [20073] libc: sys / stat.h namespace fchmod [20074] libc: stdlib.h rand_r namespace [20076] .h lipsesc S_IFSOCK, S_ISSOCK pentru XPG4 [20094] libc: stdlib.h nu ar trebui să declare grantpt, ptsname, unlockpt pentru XPG3 [20111] libc: struct sockaddr_storage nu poate fi agregat [20112] rețea: sunrpc: in Sun RPC clntudp_call (CVE-2016-4429) [20115] string: Extra aliniere în memset-vec-unaligned-erms.S [20119] libc: Mască greșită pentru tipul de procesor de la CPUID [20139] al lui zmm este zero dacă Glibc este construit cu AS care nu suportă AVX512 [20151] math: [ldbl-128 / ldbl-128ibm] j0l, j1l, y0l, y1l returnează sNaN pentru argumentul sNaN [20153] math: [ldbl-128ibm] sqrtl (sNaN) returneaza sNaN [20156] matematica: [ldbl-128ibm] ceill, rintl etc. returneaza sNaN pentru argumentul sNaN [20157] math: [powerpc] fabsl (sNaN) owerpc] tavan, rint etc.returnează sNaN pentru intrarea sNaN [20178] libc: posix_spawn {p} nu trebuie să apeleze ieșirea [20191] stdio: libio: vtables hardening [20195] Obiecte de file C ++ 11. [20202] matematică: [i386 / x86_64] nextafterl eroare de încadrare incorectă subnormale negative [20212] math: acos (sNaN) returnează sNaN [20213] math: asin (sNaN) returnează sNaN [20214] rețea: Linux header sync with linux / in6. h și ipv6.h din nou.[20218] math: [i386] asinhl (sNaN) returneaza sNaN [20219] matematica: [i386] atanhl (sNaN) returneaza sNaN [20222] returneaza sNaN [20225] matematica: ldexp, scalbn, scalburn returna sNaN pentru input sNaN [20226] matematica: [i386 / x86_64] expl, exp10l, expm1l return sNaN pentru intrare sNaN [20227] ) returneaza sNaN [20228] matematica: [i386 / x86_64] log10l (sNaN) returneaza sNaN [20229] math: [i386 / x86_64] log1pl (sNaN) returneaza sNaN [20232] expm1l (sNaN) sNaN [20233] matematică: [ldbl-128ibm] expm1l (sNaN) returnează sNaN [20234] matematică: [ldbl-128ibm] log1pl (sNaN) 20237] nss: nss_db: primi * segfaults fără precedent set * ent [20240] matematică: modf (sNaN) returnează sNaN [20248] libc: debug / tst-longjump_chk2 apeluri printf de la un handler de semnal [20250] ) returnează sNaN [20252] matematică: atan2 (sNaN, qNaN) nu reușește să ridice "invalid" [20255] ma th: [i386] fdim, revenire fdimf cu interval exces și precizie / rotunjire dublă [20256] matematică: [i386 / x86_64] fdiml returnează sNaN pentru intrarea sNaN [20260] string: ../sysdeps/x86/bits/string.

    h: 1092: 3: eroare: indicele matricei este sub limitele array [20262] nis: _nss_nis_initgroups_dyn întoarce întotdeauna NSS_STATUS_NOTFOUND [20263] nptl: robuste mutex deadlocks if other requests timedlock / linux) [20277] libc: $ dp nu este inițializat corect în sysdeps / hppa / start.S [20284] malloc: malloc: Avertizarea arenei corupte provoacă inutilități de memorie mmap [20296] matematică: [i386 / x86_64] [20314] nptl: make [4]: ​​*** [/usr/include/stdlib.h] Eroare 1 [20316] localedata: id_ID: Februari în loc de Pebruari [20327] șir: POWER8 [20349] libc: valoarea misc / tst-preadvwritev64 [20349] libc: valoarea pe 64 de biți este trecută diferit în p {readv, writev} {644} [20350] libc: Nu există test pentru p {citit, scrie} 64 [20357] matematică: Rezultat cos incorect pentru 1.5174239687223976 [20384] achines

Ce este nou în versiunea 2.23:

  • CVE-2015-7547: glibc getaddrinfo () suprapunere tampon bazat pe stive - Fixat pe ramura de dezvoltare pentru glibc 2.23 release.

Ce este nou în versiunea 2.21:

  • Următoarele erori sunt rezolvate cu această versiune: 6652, 10672, 12674, 12847, 12926, 13862, 14132, 14138, 14171, 14498, 15215, 15378, 15884, 16009, 16418, 16191, 16469, 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, 17589, 17594, 17601, 17608, 17616, 17625, 17630, 17633, 17634, 17635, 17647, 17653, 17657, 17658, 17664, 17665, 17668, 17682, 17702, 17719, 17722, 17723, 17733, 17744, 17745, 17746, 17747, 17748, 17775, 17777, 17780, 17781, 17782, 17791, 17793, 17796, 17797, 17801, 17803, 17806, 17844, 17848, 17868, 17869, 17870, 17885, 17892.
  • CVE-2015-1472 În anumite condiții, wscanf poate aloca prea puțină memorie pentru argumentele care urmează să fie scanate și pentru a depăși buffer-ul alocat. Implementarea acum corectează corect dimensiunea buffer-ului necesar atunci când se utilizează malloc.
  • Un algoritm semafor nou a fost implementat în codul C generic pentru toate mașinile. Anterioarele realizări de asamblare personalizate ale semaforului au fost greu de explicat sau s-au asigurat că acestea sunt sigure. Noua versiune a semaforului acceptă mașini cu operațiuni atomice pe 64 de biți sau pe 32 de biți. Algoritmul nou semafor este utilizat de sem_init, sem_open, sem_post, sem_wait, sem_timedwait, sem_trywait și sem_getvalue.
  • Portul pentru Altera Nios II a fost contribuit de Mentor Graphics.
  • Implementări implementate strcpy, stpcpy, strncpy, stpncpy, strcmp și strncmp optimizate pentru powerpc64 / powerpc64le. Implementat de Adhemerval Zanella (IBM).
  • A fost adăugat suport pentru ELISA de blocare TSX a mutexurilor pthread pe powerpc32, powerpc64 și powerpc64le. Acest lucru poate îmbunătăți scalarea blocării programelor existente pe sistemele cu capacitate HTM. Codul de blocare a blocării este activat numai cu --enable-lock-elision = yes. De asemenea, implementarea TSX lock elision pentru powerpc va emite o întrerupere a tranzacției pe fiecare sistem, pentru a evita ca efectele secundare să fie vizibile în afara tranzacțiilor.
  • Implementările strcpy, stpcpy, strchrnul și strrchr optimizate pentru AArch64. Contribuit de ARM Ltd
  • Funcțiile i386 memcpy optimizate cu sarcină / magazin SSE2 nealiniat.
  • CVE-2104-7817 Funcția wordexp ar putea ignora steagul WRDE_NOCMD în anumite condiții de intrare, rezultând executarea unui shell pentru înlocuirea comenzii atunci când aplicația nu o solicita. Implementarea verifică acum WRDE_NOCMD imediat înainte de a executa shell-ul și returnează eroarea WRDE_CMDSUB conform așteptărilor.
  • CVE-2012-3406 funcțiile printf-stil ar putea rula într-un overflow de stivă atunci când procesează șiruri de formate cu un număr mare de specificatori de format.
  • CVE-2014-9402 Implementarea nss_dns a getnetbyname ar putea rula într-o buclă infinită dacă răspunsul DNS conține o înregistrare PTR a unui format neașteptat.
  • Versiunea minimă GCC care poate fi utilizată pentru a construi această versiune a Bibliotecii GNU C este GCC 4.6. Versiunile GCC mai vechi și compilatoarele non-GNU pot fi utilizate în continuare pentru a compila programe folosind Biblioteca GNU C.
  • Biblioteca GNU C este acum construită cu implicit -Werror. Acest lucru poate fi dezactivat prin configurarea cu --disable-werror.
  • Locații noi: tu_IN, bh_IN, raj_IN, ce_RU.
  • Funcția sigvec depășită a fost eliminată. Aceasta a fost interfața inițială 4.2BSD care a inspirat interfața POSIX.1 sigaction, pe care programele l-au folosit timp de aproximativ 25 de ani. Desigur, compatibilitatea ABI pentru binare vechi folosind sigvec rămâne intactă.
  • S-a îmbinat gettext 0.19.3 în subdirectorul intl. Aceasta stabilește o clădire cu versiuni mai noi de bizon.
  • Suport pentru MIPS o32 FPXX, FP64A și FP64 ABI Extensions. MIB-ul inițial MIPS o32 hard-float ABI necesită un FPU în cazul în care înregistrările cu precizie dublă suprapun două registre consecutive de o singură precizie. MIPS32R2 a introdus un nou mod FPU (FR = 1) în cazul în care registrele cu precizie dublă prelungesc registrele de precizie cu o singură precizie, care sunt incompatibile cu ABI hard-float o32. MIPS SIMD ASE și arhitectura MIPSR6 necesită utilizarea FR = 1 pentru a face o tranziție necesară. Noile extensii O32 ABI permit utilizatorilor să migreze în timp de la originalul O32 ABI până la actualizatul O32 FP64 ABI. Pentru a realiza acest lucru, linkerul dinamic acum urmărește ABI-ul oricărui obiect încărcat și verifică dacă noile obiecte sunt compatibile. Modelele de tranziție vor fi, de asemenea, solicitate în funcție de necesități, iar obiectele nesuportate vor fi respinse. Verificările ABI includ atât ABI-uri de tip float soft, cât și greu pentru o32, n32 și n64.

Comentarii la GNU C Library

Comentariile nu a fost găsit
Adauga comentarii
Porniţi pe imagini!