Utjefte fan 'e GCC 12-kompilersuite

Nei in jier fan ûntwikkeling is de fergese kompilersuite GCC 12.1 frijlitten, de earste wichtige release yn 'e nije GCC 12.x branch. Yn oerienstimming mei it nije nûmeringskema foar frijlitting waard ferzje 12.0 brûkt yn it ûntwikkelingsproses, en koart foar de frijlitting fan GCC 12.1 wie de GCC 13.0-tûke al fertakke, op basis wêrfan de folgjende grutte release, GCC 13.1, soe wurde foarme. Op maaie 23 sil it projekt 35 jier fiere sûnt de formaasje fan 'e earste edysje fan GCC.

Grutte feroaringen:

  • Tafoege stipe foar de CTF (Compact Type Format) debuggen opmaak, dat jout kompakte opslach fan ynformaasje oer C typen, ferbinings tusken funksjes en debuggen symboalen. As ynbêde yn ELF-objekten, lit it formaat it brûken fan EFL-karaktertabellen ta om gegevensduplikaasje te foarkommen.
  • Stipe foar it "STABS"-ynformaasjeopslachformaat foar debuggen, makke yn 'e 1980's, is ôfkard.
  • Wurk bliuwt te wreidzjen stipe foar takomstige C2X en C ++ 23 noarmen foar de C en C ++ talen. Bygelyks, stipe foar de "as consteval" útdrukking is tafoege; tastien om auto te brûken yn funksje-arguminten ("f(auto(g()))"); it brûken fan net-letterlike fariabelen, goto en labels is tastien yn funksjes ferklearre as constexpr; tafoege stipe foar multidimensional yndeks operators operator []; yn as, foar en switch, de mooglikheden fan inisjalisaasje blokken binne útwreide ("foar (mei T = int; T e: v)").
  • De C++ Standertbibleteek hat ferbettere stipe foar de eksperimintele seksjes fan de C++20 en C++23 noarmen. Stipe tafoege foar std::move_only_function, , std::basic_string::resize_and_overwrite, , en std::invoke_r. Tastimming te brûken std :: unyk_ptr, std :: vektor, std :: basis_string, std :: opsjoneel en std :: fariant yn constexpr funksjes.
  • De Fortran-frontend leveret folsleine stipe foar de TS 29113-spesifikaasje, dy't mooglikheden beskriuwt foar it garandearjen fan portabiliteit tusken Fortran en C-koade.
  • Stipe tafoege foar de __builtin_shufflevector (vec1, vec2, index1, index2, ...) tafoeging earder tafoege oan Clang, dy't in inkele oprop biedt om mienskiplike vector-shuffle- en shuffle-operaasjes út te fieren.
  • By it brûken fan it optimalisaasjenivo "-O2" is vectorisaasje standert ynskeakele (de modi -ftree-vectorize en -fvect-cost-model=heul-goedkeap binne ynskeakele). It tige goedkeap model lit fektorisaasje allinich mooglik as de fektorkoade de skalêre koade dy't wurdt vectorisearre folslein ferfange kin.
  • Added "-ftrivial-auto-var-init" modus om eksplisite inisjalisaasje fan fariabelen op 'e stapel yn te skeakeljen om problemen te folgjen en kwetsberens te blokkearjen dy't ferbûn binne mei it brûken fan net-initialisearre fariabelen.
  • Foar C- en C++-talen is in ynboude funksje __builtin_dynamic_object_size tafoege om de grutte fan in foarwerp te bepalen, kompatibel mei in ferlykbere funksje fan Clang.
  • Foar de C en C++ talen is stipe foar it "net beskikber" attribút tafoege (jo kinne bygelyks funksjes markearje dy't in flater generearje as jo besykje se te brûken).
  • Foar C- en C++-talen is stipe foar foarferwurkingsrjochtlinen "#elifdef" en "#elifndef" tafoege.
  • Flagge "-Wbidi-chars" tafoege om in warskôging wer te jaan as UTF-8-tekens ferkeard brûkt wurde, en feroaret de folchoarder wêryn bidireksjoneel tekst wurdt werjûn.
  • Flagge "-Warray-compare" tafoege om te warskôgjen as jo besykje twa operanden te fergelykjen dy't ferwize nei arrays.
  • De ymplemintaasje fan 'e OpenMP 5.0 en 5.1 (Open Multi-Processing) noarmen, dy't de API en metoaden definiearje foar it tapassen fan parallelle programmearmetoaden op multi-core en hybride (CPU + GPU / DSP) systemen mei dielde ûnthâld en vectorization units (SIMD) , is trochgien.
  • Ferbettere ymplemintaasje fan de OpenACC 2.6 parallelle programmearring spesifikaasje, dy't ark definiearret foar it ôfladen fan operaasjes op GPU's en spesjalisearre processors lykas NVIDIA PTX.
  • Stipe foar útwreide ynstruksjes Intel AVX86-FP512 en it _Float16-type is tafoege oan 'e backend foar koadegeneraasje foar de x16-arsjitektuer.
  • Foar de x86-arsjitektuer is beskerming tafoege tsjin kwetsberens yn processors dy't feroarsake binne troch spekulative útfiering fan ynstruksjes nei ûnbedoelde foarútspringoperaasjes. It probleem komt foar troch pre-emptive ferwurking fan ynstruksjes direkt nei de branch ynstruksje yn it ûnthâld (SLS, Straight Line Speculation). Om beskerming yn te skeakeljen, wurdt de opsje "-mharden-sls" foarsteld.
  • Tafoege deteksje fan it brûken fan net-initialisearre fariabelen oan 'e eksperimintele statyske analysator. Inisjele stipe tafoege foar it analysearjen fan gearstallingskoade yn ynline-ynserts. Ferbettere ûnthâld tracking. De koade foar it ferwurkjen fan switch-útdrukkingen is opnij skreaun.
  • 30 nije oproppen tafoege oan libgccjit, in dielde bibleteek foar it ynbêdzjen fan in koadegenerator yn oare prosessen en it te brûken om JIT bytekoade te kompilearjen yn masinekoade.
  • Stipe foar it CO-RE-meganisme (Compile Once - Run Everywhere) is tafoege oan 'e efterkant foar it generearjen fan BPF-bytekoade, wêrtroch jo de koade fan eBPF-programma's foar de Linux-kernel mar ien kear kinne kompilearje en in spesjale universele loader brûke dy't de laden programma nei de hjoeddeiske kernel en BPF Types Format). CO-RE lost it probleem fan portabiliteit fan kompilearre eBPF-programma's op, dy't earder allinich koe wurde brûkt yn 'e ferzje fan' e kernel wêrfoar se waarden kompilearre, om't de posysje fan eleminten yn gegevensstruktueren feroaret fan ferzje nei ferzje.
  • De RISC-V-backend foeget stipe ta foar nije arsjitektuerútwreidingen foar ynstruksjeset zba, zbb, zbc en zbs, lykas ek ISA-útwreidingen foar fektor- en skalêre kryptografyske operaasjes. Standert wurdt stipe foar de spesifikaasje fan RISC-V ISA 20191213. De flagge -mtune=thead-c906 is tafoege om optimalisaasjes foar T-HEAD c906-kearnen mooglik te meitsjen.
  • Stipe foar it type __int128_t/integer (soarte = 16) is tafoege oan it backend foar koadegeneraasje foar AMD GPU's basearre op de GCN-mikroarsjitektuer. It is mooglik om te brûken maksimaal 40 wurkgroepen per kompjûter unit (CU) en oant 16 ynstruksje fronten (wavefront, in set fan triedden útfierd parallel troch de SIMD Engine) per groep. Earder wie mar ien ynstruksje râne per CU tastien.
  • De NVPTX-backend, ûntworpen om koade te generearjen mei de NVIDIA PTX (Parallel Thread Execution) ynstruksjeset-arsjitektuer, hat de mooglikheid tafoege om de flaggen "-march", "-mptx" en "-march-map" te brûken. Implementearre stipe foar PTX ISA sm_53, sm_70, sm_75 en sm_80. De standert arsjitektuer is sm_30.
  • Implementaasjes fan ynboude funksjes binne opnij skreaun yn 'e efterkant foar PowerPC / PowerPC64 / RS6000-processors. De ynboude funksjes __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar_ binne dokumint en ___t.fi
  • Stipe foar Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) en Arm Cortex-X710 (cortex- x2). Stipe tafoege foar nije ARMv2-arsjitektueropsjes foar gebrûk mei de opsje "-march": armv8-a, armv8.7-a, armv8.8-a. Tafoege ymplemintaasje fan C funksjes boud yn de gearstaller (Intrinsics) foar atomic laden en bewarjen fan gegevens yn ûnthâld, basearre op it brûken fan útwreide ARM ynstruksjes (ls9). Stipe tafoege foar it fersnellen fan de memcpy-, memmove- en memset-funksjes mei de mopsoption ARM-útwreiding.
  • In nije kontrôlemodus tafoege "-fsanitize = shadow-call-stack" (ShadowCallStack), dy't op it stuit allinich beskikber is foar de AArch64-arsjitektuer en wurket by it bouwen fan koade mei de opsje "-ffixed-r18". De modus jout beskerming tsjin it oerskriuwen fan it weromadres fan in funksje yn it gefal fan in bufferoerlêst op 'e steapel. De essinsje fan de beskerming is te bewarjen it werom adres yn in aparte "skaad" stack nei it oerdragen fan kontrôle nei in funksje en it opheljen fan dit adres foar it ferlitten fan de funksje.

Boarne: opennet.ru

Add a comment