A GCC 12 fordítócsomag kiadása

Egy év fejlesztés után megjelent a GCC 12.1 ingyenes fordítócsomag, az első jelentős kiadás az új GCC 12.x ágban. Az új kiadásszámozási sémának megfelelően a 12.0-s verzió került felhasználásra a fejlesztési folyamatban, és nem sokkal a GCC 12.1 megjelenése előtt már elágazott a GCC 13.0-s ága, amely alapján a következő nagyobb kiadás, a GCC 13.1. alakuljon ki. A projekt május 23-án ünnepli a GCC első kiadásának megalakulásának 35. évfordulóját.

Nagy változások:

  • Hozzáadott támogatás a CTF (Compact Type Format) hibakereső formátumhoz, amely kompakt adattárolást biztosít a C típusokról, a funkciók közötti kapcsolatokról és a hibakereső szimbólumokról. Az ELF objektumokba ágyazott formátum lehetővé teszi az EFL karaktertáblák használatát az adatok ismétlődésének elkerülése érdekében.
  • Az 1980-as években létrehozott "STABS" hibakeresési információ tárolási formátum támogatása elavult.
  • Folytatódik a munka a jövőbeni C2X és C++23 szabványok támogatásának bővítésén a C és C++ nyelveken. Például az „if consteval” kifejezés támogatása hozzáadásra került; megengedett az auto használata a függvény argumentumában (“f(auto(g()))”); nem szó szerinti változók, goto és címkék használata megengedett a constexpr-ként deklarált függvényekben; hozzáadott támogatás a többdimenziós index-operátorokhoz []; in if, for és switch, az inicializálási blokkok képességei kibővültek („for (használva T = int; T e : v)”).
  • A C++ Standard Library továbbfejlesztette a C++20 és C++23 szabványok kísérleti szakaszainak támogatását. Az std::move_only_function, , std::basic_string::resize_and_overwrite, , és std::invoke_r támogatása hozzáadva. Az std::unique_ptr, std::vector, std::basic_string, std::opcionális és std::variáns használata megengedett a constexpr függvényekben.
  • A Fortran frontend teljes mértékben támogatja a TS 29113 specifikációt, amely leírja a Fortran és a C kódok közötti hordozhatóság biztosításának képességeit.
  • Támogatás hozzáadva a __builtin_shufflevector(vec1, vec2, index1, index2, ...) bővítményhez, amelyet korábban hozzáadtak a Clanghoz, amely egyetlen hívást kínál a közös vektorkeverési és keverési műveletek végrehajtásához.
  • A "-O2" optimalizálási szint használatakor a vektorizálás alapértelmezés szerint engedélyezve van (az -ftree-vectorize és -fvect-cost-model=very-cheap módok engedélyezve vannak). A nagyon olcsó modell csak akkor teszi lehetővé a vektorizálást, ha a vektorkód teljesen helyettesítheti a vektorizált skalár kódot.
  • Hozzáadott "-ftrivial-auto-var-init" mód, amely lehetővé teszi a változók explicit inicializálását a veremben az inicializálatlan változók használatával kapcsolatos problémák és sebezhetőségek blokkolása érdekében.
  • A C és C++ nyelvek esetében egy beépített __builtin_dynamic_object_size függvény került hozzáadásra az objektum méretének meghatározásához, amely kompatibilis a Clang hasonló funkciójával.
  • A C és C++ nyelvek esetében hozzáadásra került az „unavailable” attribútum támogatása (például megjelölheti azokat a függvényeket, amelyek hibát generálnak, ha megpróbálják használni őket).
  • A C és C++ nyelvek esetében a „#elifdef” és „#elifndef” előfeldolgozási direktívák támogatása hozzáadásra került.
  • Hozzáadott "-Wbidi-chars" jelző, amely figyelmeztetést jelenít meg, ha az UTF-8 karaktereket helytelenül használják, megváltoztatva a kétirányú szöveg megjelenítési sorrendjét.
  • Hozzáadott "-Warray-compare" jelző, amely figyelmeztetést jelenít meg, amikor két, tömbökre hivatkozó operandust próbál összehasonlítani.
  • Az OpenMP 5.0 és 5.1 (Open Multi-Processing) szabvány megvalósítása, amelyek meghatározzák az API-t és a párhuzamos programozási módszerek alkalmazásának módszereit többmagos és hibrid (CPU+GPU/DSP) rendszereken osztott memóriával és vektorizációs egységekkel (SIMD) , folytatódott.
  • Az OpenACC 2.6 párhuzamos programozási specifikáció továbbfejlesztett megvalósítása, amely eszközöket határoz meg a GPU-kon és speciális processzorokon, például az NVIDIA PTX-en végzett műveletek tehermentesítéséhez.
  • A kiterjesztett utasítások támogatása Az Intel AVX86-FP512 és a _Float16 típus hozzáadásra került az x16 architektúra kódgeneráló háttérrendszeréhez.
  • Az x86 architektúra esetében a processzorok sérülékenységei elleni védelem került hozzáadásra, amelyeket az utasítások spekulatív végrehajtása okoz feltétel nélküli előreugrási műveletek után. A probléma az utasítások megelőző feldolgozása miatt jelentkezik, közvetlenül a memóriában lévő elágazási utasítást követően (SLS, egyenes vonalú spekuláció). A védelem engedélyezéséhez a „-mharden-sls” opció javasolt.
  • Az inicializálatlan változók használatának észlelése hozzáadva a kísérleti statikus analizátorhoz. Kezdeti támogatás hozzáadva az összeállítás kódjának elemzéséhez a soron belüli betétekben. Továbbfejlesztett memóriakövetés. A kapcsolókifejezések feldolgozásának kódja át lett írva.
  • 30 új hívást adtunk a libgccjithez, egy megosztott könyvtárhoz, amely kódgenerátort más folyamatokba ágyazhat be, és a JIT segítségével a bájtkódot gépi kódba fordítja.
  • A CO-RE (Compile Once - Run Everywhere) mechanizmus támogatása hozzáadásra került a háttérrendszerhez a BPF bájtkód generálásához, amely lehetővé teszi, hogy csak egyszer fordítsa le az eBPF programok kódját a Linux kernelhez, és egy speciális univerzális betöltőt használjon, amely adaptálja a betöltve a programot az aktuális kernel és BPF típusú formátumba). A CO-RE megoldja a lefordított eBPF programok hordozhatóságának problémáját, amelyeket korábban csak a kernel azon verziójában lehetett használni, amelyre lefordították, mivel az adatstruktúrákban az elemek helyzete verziónként változik.
  • A RISC-V háttérrendszer támogatja az új zba, zbb, zbc és zbs utasításkészlet-architektúra-kiterjesztéseket, valamint ISA-bővítményeket a vektoros és skaláris kriptográfiai műveletekhez. Alapértelmezés szerint a RISC-V ISA 20191213 specifikáció támogatása biztosított Az -mtune=thead-c906 jelzővel, amely lehetővé teszi a T-HEAD c906 magok optimalizálását.
  • A __int128_t/integer(kind=16) típus támogatása hozzáadásra került a GCN mikroarchitektúrán alapuló AMD GPU-k kódgeneráló háttérrendszeréhez. Számítási egységenként (CU) legfeljebb 40 munkacsoport és csoportonként legfeljebb 16 utasításfront (hullámfront, a SIMD Engine által párhuzamosan végrehajtott szálkészlet) használható. Korábban CU-nként csak egy utasítás él volt megengedett.
  • Az NVPTX háttérrendszer, amelyet úgy terveztek, hogy kódot generáljon az NVIDIA PTX (Parallel Thread Execution) utasításkészlet-architektúrával, hozzáadta a „-march”, „-mptx” és „-march-map” jelzők használatának lehetőségét. Megvalósított támogatás a PTX ISA sm_53, sm_70, sm_75 és sm_80 számára. Az alapértelmezett architektúra az sm_30.
  • A PowerPC / PowerPC64 / RS6000 processzorok háttérprogramjában átírták a beépített funkciók implementációit. A __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_texasru, __builtin_set_texasru, __builtin_set_set_builtin_set és document_ar_builtin_set.
  • Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) és Arm Cortex-X710 (cortex-x2) támogatása. Támogatás hozzáadva az új ARMv2 architektúra opciókhoz a "-march" opcióhoz: armv8-a, armv8.7-a, armv8.8-a. A fordítóba épített C függvények (Intrinsics) hozzáadott megvalósítása az adatok atomi betöltéséhez és memóriába mentéséhez, kiterjesztett ARM utasítások (ls9) használata alapján. Támogatás hozzáadva a memcpy, memmove és memset funkciók gyorsításához a mopsoption ARM bővítmény használatával.
  • Új „-fsanitize=shadow-call-stack” (ShadowCallStack) ellenőrzési mód került hozzáadásra, amely jelenleg csak az AArch64 architektúrához érhető el, és akkor működik, ha a kódot a „-fixed-r18” opcióval építi fel. A mód védelmet nyújt a függvény visszatérési címének felülírása ellen a verem puffertúlcsordulása esetén. A védelem lényege, hogy a visszaküldési címet egy külön „árnyék” verembe mentjük, miután a vezérlést átadtuk egy függvénynek, és a függvényből való kilépés előtt lekérjük ezt a címet.

Forrás: opennet.ru

Hozzászólás