GCC 12 -kääntäjäpaketin julkaisu

Vuoden kehitystyön jälkeen ilmainen kääntäjäpaketti GCC 12.1 on julkaistu, ensimmäinen merkittävä julkaisu uudessa GCC 12.x -haarassa. Uuden julkaisunumerointimallin mukaisesti kehitysprosessissa käytettiin versiota 12.0 ja vähän ennen GCC 12.1:n julkaisua oli jo haarautunut GCC 13.0 -haara, jonka perusteella seuraava iso julkaisu, GCC 13.1 muodostua. Toukokuun 23. päivänä projekti viettää 35 vuotta GCC:n ensimmäisen painoksen perustamisesta.

Suurimmat muutokset:

  • Lisätty tuki CTF (Compact Type Format) -virheenkorjausmuodolle, joka tarjoaa kompaktin tallennuksen C-tyypeistä, funktioiden välisistä yhteyksistä ja virheenkorjaussymboleista. Kun se on upotettu ELF-objekteihin, muoto sallii EFL-merkkitaulukoiden käytön tietojen päällekkäisyyden välttämiseksi.
  • 1980-luvulla luodun virheenkorjaustietojen tallennusmuodon "STABS" tuki on vanhentunut.
  • Työ jatkuu tulevien C2X- ja C++23-standardien tuen laajentamiseksi C- ja C++-kielille. Esimerkiksi "if consteval" -lausekkeen tuki on lisätty; saa käyttää autoa funktion argumenteissa ("f(auto(g()))"); ei-kirjaimellisten muuttujien, goton ja nimikkeiden käyttö on sallittu funktioissa, jotka on ilmoitettu constexpr; lisätty tuki moniulotteisille indeksioperaattoreille []; in if, for ja switch, alustuslohkojen ominaisuuksia on laajennettu ("for (käyttäen T = int; T e : v)").
  • C++ Standard Library on parantanut C++20- ja C++23-standardien kokeellisten osien tukea. Lisätty tuki funktioille std::move_only_function, , std::basic_string::resize_and_overwrite, , ja std::invoke_r. Saa käyttää std::unique_ptr, std::vector, std::perusmerkkijono, std::valinnainen ja std::variant constexpr-funktioissa.
  • Fortran-käyttöliittymä tarjoaa täyden tuen TS 29113 -spesifikaatiolle, joka kuvaa ominaisuudet siirrettävyyden varmistamiseksi Fortran- ja C-koodin välillä.
  • Lisätty tuki Clangiin aiemmin lisätylle __builtin_shufflevector(vec1, vec2, index1, index2, ...) -laajennukselle, joka tarjoaa yhden kutsun yleisten vektorien sekoitus- ja sekoitustoimintojen suorittamiseen.
  • Käytettäessä "-O2"-optimointitasoa vektorointi on oletuksena käytössä (-ftree-vectorize- ja -fvect-cost-model=very-cheap-tilat ovat käytössä). Erittäin halpa malli sallii vektoroinnin vain, jos vektorikoodi voi korvata kokonaan vektorisoitavan skalaarikoodin.
  • Lisätty "-ftrivial-auto-var-init" -tila, joka mahdollistaa pinon muuttujien nimenomaisen alustuksen, jotta voidaan seurata alustamattomien muuttujien käyttöön liittyviä ongelmia ja estää haavoittuvuuksia.
  • C- ja C++-kielille on lisätty sisäänrakennettu funktio __builtin_dynamic_object_size, joka määrittää objektin koon, ja se on yhteensopiva samanlaisen Clangin toiminnon kanssa.
  • C- ja C++-kielille on lisätty tuki “unavailable”-attribuutille (voit esimerkiksi merkitä funktioita, jotka aiheuttavat virheen, jos yrität käyttää niitä).
  • C- ja C++-kielille on lisätty tuki esikäsittelyohjeille "#elifdef" ja "#elifndef".
  • Lisätty "-Wbidi-chars" -merkki, joka näyttää varoituksen, jos UTF-8-merkkejä käytetään väärin, mikä muuttaa kaksisuuntaisen tekstin näyttöjärjestystä.
  • Lisätty "-Warray-compare" -lippu näyttämään varoituksen, kun yritetään verrata kahta taulukoihin viittaavaa operandia.
  • OpenMP 5.0 ja 5.1 (Open Multi-Processing) -standardien käyttöönotto, jotka määrittelevät API:n ja menetelmät rinnakkaisten ohjelmointimenetelmien soveltamiseen moniytimisissä ja hybridijärjestelmissä (CPU+GPU/DSP) jaetulla muistilla ja vektorointiyksiköillä (SIMD) , on jatkunut.
  • OpenACC 2.6 rinnakkaisohjelmointimäärittelyn parannettu toteutus, joka määrittelee työkalut toimintojen purkamiseen GPU:ille ja erikoisprosessoreille, kuten NVIDIA PTX.
  • Tuki laajennetuille ohjeille Intel AVX86-FP512 ja _Float16-tyyppi on lisätty x16-arkkitehtuurin koodin luomisen taustaohjelmaan.
  • X86-arkkitehtuuriin on lisätty suoja prosessorien haavoittuvuuksia vastaan, jotka johtuvat käskyjen spekulatiivisesta suorittamisesta ehdottomien eteenpäin hyppytoimintojen jälkeen. Ongelma johtuu käskyjen ennakoivasta käsittelystä välittömästi muistissa olevan haarakäskyn jälkeen (SLS, Straight Line Speculation). Suojauksen käyttöön ottamiseksi ehdotetaan vaihtoehtoa "-mharden-sls".
  • Lisätty alustamattomien muuttujien käytön havaitseminen kokeelliseen staattiseen analysaattoriin. Lisätty alustava tuki kokoonpanokoodin analysointiin sisäisissä lisäyksissä. Parannettu muistin seuranta. Koodi kytkinlausekkeiden käsittelyä varten on kirjoitettu uudelleen.
  • Lisätty 30 uutta kutsua libgccjit-kirjastoon, jaettuun kirjastoon koodigeneraattorin upottamiseksi muihin prosesseihin ja sen käyttämiseen tavukoodin JIT-kääntämiseen konekoodiksi.
  • Tuki CO-RE (Compile Once - Run Everywhere) -mekanismille on lisätty taustajärjestelmään BPF-tavukoodin luomiseksi, jonka avulla voit kääntää eBPF-ohjelmien koodin Linux-ytimelle vain kerran ja käyttää erityistä yleistä latausohjelmaa, joka mukauttaa ladattu ohjelma nykyiseen ytimeen ja BPF Types -muotoon). CO-RE ratkaisee käännettyjen eBPF-ohjelmien siirrettävyysongelman, jota aiemmin voitiin käyttää vain siinä ytimen versiossa, jota varten ne on käännetty, koska elementtien sijainti tietorakenteissa vaihtelee versiosta toiseen.
  • RISC-V-taustajärjestelmä lisää tuen uusille käskysarjan arkkitehtuurilaajennuksille zba, zbb, zbc ja zbs sekä ISA-laajennuksille vektori- ja skalaarisalaustoimintoihin. Oletusarvoisesti tuetaan RISC-V ISA 20191213 -spesifikaatiota. Lippu -mtune=thead-c906 on lisätty mahdollistamaan T-HEAD c906 -ytimien optimointi.
  • Tuki tyypille __int128_t/integer(kind=16) on lisätty GCN-mikroarkkitehtuuriin perustuvien AMD GPU:iden koodinluontitaustajärjestelmään. On mahdollista käyttää jopa 40 työryhmää laskentayksikköä (CU) kohden ja enintään 16 käskyrintamaa (aaltorintama, SIMD Enginen rinnakkain suorittama säikeet) ryhmää kohden. Aikaisemmin vain yksi käskyreuna per CU oli sallittu.
  • NVPTX-taustajärjestelmä, joka on suunniteltu luomaan koodia käyttämällä NVIDIA PTX (Parallel Thread Execution) -käskysarjaarkkitehtuuria, on lisännyt mahdollisuuden käyttää "-march", "-mptx" ja "-march-map" -lippuja. Toteutettu tuki PTX ISA sm_53, sm_70, sm_75 ja sm_80. Oletusarkkitehtuuri on sm_30.
  • PowerPC / PowerPC64 / RS6000-suorittimien taustajärjestelmässä sisäänrakennettujen toimintojen toteutukset on kirjoitettu uudelleen. Sisäänrakennetut funktiot __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_texasru, __builtin_set_set.ttfiar_set ja __builtin_set.
  • Tuki Arm Ampere-64:lle (-mcpu/-mtune ampeeri1), Arm Cortex-A1:lle (cortex-a510), Arm Cortex-A510:lle (cortex-a710) ja Arm Cortex-X710:lle (cortex-x2). Lisätty tuki uusille ARMv2-arkkitehtuurivaihtoehdoille käytettäväksi "-march"-vaihtoehdon kanssa: armv8-a, armv8.7-a, armv8.8-a. Lisätty kääntäjään (Intrinsics) sisäänrakennettujen C-toimintojen toteutus atomilataukseen ja tietojen tallentamiseen muistiin, perustuen laajennettujen ARM-käskyjen käyttöön (ls9). Lisätty tuki memcpy-, memmove- ja memset-toimintojen nopeuttamiseen mopsoption ARM -laajennuksella.
  • Lisätty uusi tarkistustila "-fsanitize=shadow-call-stack" (ShadowCallStack), joka on tällä hetkellä saatavilla vain AArch64-arkkitehtuurille ja toimii kun rakennuskoodi on "-fixed-r18"-vaihtoehdolla. Tila tarjoaa suojan funktion paluuosoitteen ylikirjoitukselta, jos pinossa on puskurin ylivuoto. Suojauksen ydin on tallentaa paluuosoite erilliseen "varjo"-pinoon sen jälkeen, kun ohjaus on siirretty funktiolle ja tämä osoite on haettu ennen funktiosta poistumista.

Lähde: opennet.ru

Lisää kommentti