Vrystelling van die GCC 12 samesteller suite

Na 'n jaar van ontwikkeling is die gratis samestellersuite GCC 12.1 vrygestel, die eerste betekenisvolle vrystelling in die nuwe GCC 12.x-tak. In ooreenstemming met die nuwe vrystellingnommerskema is weergawe 12.0 in die ontwikkelingsproses gebruik, en kort voor die vrystelling van GCC 12.1 het die GCC 13.0-tak reeds afgetak, op grond waarvan die volgende groot vrystelling, GCC 13.1, sou gevorm word. Op 23 Mei sal die projek 35 jaar vier sedert die totstandkoming van die eerste uitgawe van GCC.

Belangrikste veranderinge:

  • Bygevoeg ondersteuning vir die CTF (Compact Type Format) ontfoutingsformaat, wat kompakte berging van inligting oor C-tipes, verbindings tussen funksies en ontfoutingsimbole bied. Wanneer dit in ELF-voorwerpe ingebed is, laat die formaat die gebruik van EFL-karaktertabelle toe om dataduplisering te vermy.
  • Ondersteuning vir die "STABS" ontfouting inligting stoor formaat, geskep in die 1980's, is opgeskort.
  • Werk gaan voort om ondersteuning vir toekomstige C2X- en C++23-standaarde vir die C en C++-tale uit te brei. Byvoorbeeld, ondersteuning vir die "if consteval" uitdrukking is bygevoeg; toegelaat om outo in funksie-argumente te gebruik ("f(auto(g()))"); die gebruik van nie-letterlike veranderlikes, goto en byskrifte word toegelaat in funksies wat as constexpr verklaar is; bygevoeg ondersteuning vir multidimensionele indeks operateurs operateur[]; in as, vir en skakelaar, die vermoëns van inisialiseringsblokke uitgebrei is ("vir (met T = int; T e : v)").
  • Die C++ Standaardbiblioteek het verbeterde ondersteuning vir die eksperimentele afdelings van die C++20 en C++23 standaarde. Bygevoeg ondersteuning vir std::move_only_function, , std::basic_string::resize_and_overwrite, , en std::invoke_r. Word toegelaat om std::unique_ptr, std::vektor, std::basic_string, std::opsioneel en std::variant in constexpr-funksies te gebruik.
  • Die Fortran-frontend bied volle ondersteuning vir die TS 29113-spesifikasie, wat vermoëns beskryf om oordraagbaarheid tussen Fortran en C-kode te verseker.
  • Bygevoeg ondersteuning vir die __builtin_shufflevector (vec1, vec2, index1, index2, ...) uitbreiding wat voorheen by Clang gevoeg is, wat 'n enkele oproep bied om algemene vektor skuif en skuif bewerkings uit te voer.
  • Wanneer die "-O2" optimeringsvlak gebruik word, word vektorisering by verstek geaktiveer (die -ftree-vectorize en -fvect-cost-model=baie-goedkoop modusse is geaktiveer). Die baie-goedkoop model laat vektorisering slegs toe as die vektorkode die skalêre kode wat gevektoriseer word heeltemal kan vervang.
  • Bygevoeg "-ftrivial-auto-var-init" modus om eksplisiete inisialisering van veranderlikes op die stapel moontlik te maak om kwessies op te spoor en kwesbaarhede wat verband hou met die gebruik van ongeinitialiseerde veranderlikes te blokkeer.
  • Vir C- en C++-tale is 'n ingeboude funksie __builtin_dynamic_object_size bygevoeg om die grootte van 'n voorwerp te bepaal, versoenbaar met 'n soortgelyke funksie van Clang.
  • Vir die C- en C++-tale is ondersteuning vir die "onbeskikbaar"-kenmerk bygevoeg (jy kan byvoorbeeld funksies merk wat 'n fout sal genereer as jy dit probeer gebruik).
  • Vir C- en C++-tale is ondersteuning vir voorafverwerkingsriglyne "#elifdef" en "#elifndef" bygevoeg.
  • Bygevoeg "-Wbidi-chars" vlag om 'n waarskuwing te vertoon as UTF-8 karakters verkeerd gebruik word, wat die volgorde verander waarin tweerigting teks vertoon word.
  • Bygevoeg "-Warray-compare" vlag om 'n waarskuwing te vertoon wanneer probeer word om twee operandes te vergelyk wat na skikkings verwys.
  • Die implementering van die OpenMP 5.0 en 5.1 (Open Multi-Processing) standaarde, wat die API en metodes definieer vir die toepassing van parallelle programmeringsmetodes op multi-kern en hibriede (CPU+GPU/DSP) stelsels met gedeelde geheue en vektoriseringseenhede (SIMD) , het voortgegaan.
  • Verbeterde implementering van die OpenACC 2.6 parallelle programmering spesifikasie, wat gereedskap definieer vir die aflaai van bedrywighede op GPU's en gespesialiseerde verwerkers soos NVIDIA PTX.
  • Ondersteuning vir uitgebreide instruksies Intel AVX86-FP512 en die _Float16-tipe is by die kodegenerering-agtergrond vir die x16-argitektuur gevoeg.
  • Vir die x86-argitektuur is beskerming bygevoeg teen kwesbaarhede in verwerkers wat veroorsaak word deur spekulatiewe uitvoering van instruksies na onvoorwaardelike vorentoe spring-operasies. Die probleem kom voor as gevolg van voorkomende verwerking van instruksies onmiddellik na die takinstruksie in die geheue (SLS, Straight Line Speculation). Om beskerming moontlik te maak, word die "-mharden-sls" opsie voorgestel.
  • Bygevoeg opsporing van die gebruik van ongeïnitialiseerde veranderlikes by die eksperimentele statiese ontleder. Bygevoeg aanvanklike ondersteuning vir die ontleding van samestelling kode in inlyn-insetsels. Verbeterde geheue dop. Die kode vir die verwerking van skakeluitdrukkings is herskryf.
  • Het 30 nuwe oproepe by libgccjit gevoeg, 'n gedeelde biblioteek om 'n kodegenerator in ander prosesse in te sluit en dit te gebruik om greepkode in masjienkode saam te stel.
  • Ondersteuning vir die CO-RE (Compile Once - Run Everywhere)-meganisme is by die agterkant gevoeg vir die generering van BPF-greepkode, wat jou toelaat om die kode van eBPF-programme vir die Linux-kern net een keer saam te stel en 'n spesiale universele laaier te gebruik wat die gelaaide program na die huidige kern- en BPF-tipe-formaat). CO-RE los die probleem van oordraagbaarheid van saamgestelde eBPF-programme op, wat voorheen slegs gebruik kon word in die weergawe van die kern waarvoor dit saamgestel is, aangesien die posisie van elemente in datastrukture van weergawe tot weergawe verander.
  • Die RISC-V-agterkant voeg ondersteuning by vir nuwe instruksiestel-argitektuuruitbreidings zba, zbb, zbc en zbs, sowel as ISA-uitbreidings vir vektor- en skalêre kriptografiese bewerkings. By verstek word ondersteuning verskaf vir die RISC-V ISA 20191213-spesifikasie. Die -mtune=thead-c906-vlag is bygevoeg om optimaliserings vir T-HEAD c906-kerns moontlik te maak.
  • Ondersteuning vir die tipe __int128_t/integer(kind=16) is bygevoeg by die kodegenerering-agtergrond vir AMD GPU's gebaseer op die GCN-mikroargitektuur. Dit is moontlik om tot 40 werkgroepe per rekenaareenheid (CU) en tot 16 instruksiefronte (golffront, 'n stel drade wat parallel uitgevoer word deur die SIMD-enjin) per groep te gebruik. Voorheen is slegs een instruksierand per CU toegelaat.
  • Die NVPTX backend, ontwerp om kode te genereer deur die NVIDIA PTX (Parallel Thread Execution) instruksiestel argitektuur te gebruik, het die vermoë bygevoeg om die "-march", "-mptx" en "-march-map" vlae te gebruik. Geïmplementeerde ondersteuning vir PTX ISA sm_53, sm_70, sm_75 en sm_80. Die verstek argitektuur is sm_30.
  • In die agterkant vir PowerPC / PowerPC64 / RS6000 verwerkers is die implementering van ingeboude funksies herskryf. Die ingeboude funksies __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar_set is document en ___t
  • Ondersteuning vir Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) en Arm Cortex-X710 (cortex-x2). Bygevoeg ondersteuning vir nuwe ARMv2 argitektuur opsies vir gebruik met die "-march" opsie: armv8-a, armv8.7-a, armv8.8-a. Bygevoeg implementering van C-funksies ingebou in die samesteller (Intrinsics) vir atoomlaai en stoor van data in geheue, gebaseer op die gebruik van uitgebreide ARM-instruksies (ls9). Bygevoeg ondersteuning vir die versnelling van die memcpy, memmove en memset funksies met behulp van die mopsoption ARM uitbreiding.
  • Bygevoeg 'n nuwe kontroleermodus "-fsanitize=shadow-call-stack" (ShadowCallStack), wat tans slegs beskikbaar is vir die AArch64-argitektuur en werk wanneer kode gebou word met die "-ffixed-r18" opsie. Die modus bied beskerming teen die oorskryf van die terugkeeradres van 'n funksie in die geval van 'n bufferoorloop op die stapel. Die kern van die beskerming is om die terugstuuradres in 'n aparte "skadu"-stapel te stoor nadat beheer na 'n funksie oorgedra is en hierdie adres herwin is voordat die funksie verlaat word.

Bron: opennet.ru

Voeg 'n opmerking