Verëffentlechung vun der GCC 12 Compiler Suite

No engem Joer vun der Entwécklung ass déi gratis Compiler Suite GCC 12.1 verëffentlecht ginn, déi éischt bedeitend Verëffentlechung an der neier GCC 12.x Branche. Am Aklang mat der neier Verëffentlechungsnummeréierungsschema gouf d'Versioun 12.0 am Entwécklungsprozess benotzt, a kuerz virun der Verëffentlechung vum GCC 12.1 war d'GCC 13.0 Filial scho ofgeschnidden, op Basis vun där déi nächst grouss Verëffentlechung, GCC 13.1, géif geformt ginn. Den 23. Mee feiert de Projet 35 Joer zënter der Grënnung vun der éischter Editioun vum GCC.

Main Ännerungen:

  • Zousätzlech Ënnerstëtzung fir de CTF (Compact Type Format) Debugging Format, deen kompakt Späichere vun Informatioun iwwer C Typen, Verbindungen tëscht Funktiounen an Debugging Symboler ubitt. Wann an ELF Objekter agebonne sinn, erlaabt d'Format d'Benotzung vun EFL Charaktertabellen fir Dateduplikatioun ze vermeiden.
  • Ënnerstëtzung fir de "STABS" Debugging Informatiounsspeicherformat, erstallt an den 1980er, gouf ofgeschaaft.
  • D'Aarbecht geet weider fir d'Ënnerstëtzung fir zukünfteg C2X an C ++ 23 Standarde fir d'C an C ++ Sproochen auszebauen. Zum Beispill, Ënnerstëtzung fir den Ausdrock "wann consteval" gouf dobäi; erlaabt Auto an Funktiounsargumenter ze benotzen ("f(auto(g()))"); d'Benotzung vun net-wuertwiertlech Verännerlechen, Goto an Etiketten ass an Funktiounen als constexpr deklaréiert erlaabt; dobäi Ënnerstëtzung fir multidimensional Index Opérateuren Bedreiwer []; an wann, fir a schalt, d'Kapazitéite vun initialization spären erweidert goufen ("fir (benotzen T = int; T e: v)").
  • D'C++ Standardbibliothéik huet verbessert Ënnerstëtzung fir d'experimentell Sektiounen vun den C++20 an C++23 Standards. Zousätzlech Ënnerstëtzung fir std::move_only_function, , std::basic_string::resize_and_overwrite, , an std::invoke_r. Erlaabt std :: eenzegaarteg_ptr, std :: vector, std :: basic_string, std :: fakultativ an std :: Variant an constexpr Funktiounen ze benotzen.
  • De Fortran Frontend bitt voll Ënnerstëtzung fir d'TS 29113 Spezifizéierung, déi Fäegkeeten beschreift fir Portabilitéit tëscht Fortran an C Code ze garantéieren.
  • Ënnerstëtzung bäigefüügt fir den __builtin_shufflevector (vec1, vec2, index1, index2, ...) Extensioun, déi virdru zu Clang bäigefüügt gouf, déi en eenzegen Uruff bitt fir gemeinsame Vecteure Shuffle a Shuffle Operatiounen auszeféieren.
  • Wann Dir den "-O2" Optimiséierungsniveau benotzt, gëtt Vektoriséierung als Standard aktivéiert (de -ftree-vectorize an -fvect-cost-model = ganz bëlleg Modi sinn aktivéiert). De ganz bëllege Modell erlaabt Vektoriséierung nëmme wann de Vektorcode de scalaresche Code komplett ersetzen kann.
  • Zousätzlech "-ftrivial-auto-var-init" Modus fir explizit Initialiséierung vu Variablen um Stack z'erméiglechen fir Themen ze verfolgen a Schwachstelle mat der Notzung vun oninitialiséierte Variablen ze blockéieren.
  • Fir C an C ++ Sproochen, eng gebaut-an Funktioun __builtin_dynamic_object_size gouf der Gréisst vun engem Objet ze bestëmmen, kompatibel mat enger ähnlecher Funktioun aus Clang.
  • Fir d'C an C++ Sproochen ass Ënnerstëtzung fir den Attribut "net verfügbar" bäigefüügt (zum Beispill kënnt Dir Funktiounen markéieren déi e Feeler generéieren wann Dir probéiert se ze benotzen).
  • Fir C an C++ Sproochen, Ënnerstëtzung fir Virveraarbechtung Direktiven "#elifdef" an "#elifndef" gouf dobäi.
  • "-Wbidi-chars" Fändel bäigefüügt fir eng Warnung ze weisen wann UTF-8 Zeeche falsch benotzt ginn, an d'Uerdnung änneren an där bidirektionalen Text ugewise gëtt.
  • "-Warray-compare" Fändel bäigefüügt fir eng Warnung ze weisen wann Dir probéiert zwee Operanden ze vergläichen déi op Arrays bezéien.
  • D'Ëmsetzung vun den OpenMP 5.0 an 5.1 (Open Multi-Processing) Standarden, déi d'API a Methoden definéieren fir parallel Programméierungsmethoden op Multi-Core an Hybrid (CPU + GPU / DSP) Systemer mat gemeinsame Gedächtnis a Vektoriséierungsunitéiten (SIMD) anzesetzen. , ass weider gaang.
  • Verbesserte Implementatioun vun der OpenACC 2.6 Parallel Programméierungsspezifizéierung, déi Tools definéiert fir Operatiounen op GPUs a spezialiséierte Prozessoren wéi NVIDIA PTX ofzelueden.
  • Ënnerstëtzung fir erweidert Instruktiounen Intel AVX86-FP512 an den Typ _Float16 gouf zum Code Generatioun Backend fir d'x16 Architektur bäigefüügt.
  • Fir d'x86 Architektur gouf Schutz géint Schwachstelle bei Prozessoren bäigefüügt, déi duerch spekulativ Ausféierung vun Instruktiounen no bedingungslosen Forward Sprong Operatiounen verursaacht ginn. De Problem geschitt wéinst pre-emptive Veraarbechtung vun Instruktiounen direkt no der Brancheinstruktioun an der Erënnerung (SLS, Straight Line Speculation). Fir de Schutz z'erméiglechen, gëtt d'Optioun "-mharden-sls" proposéiert.
  • D'Erkennung vun der Notzung vun oninitialiséierte Variablen an den experimentellen statesche Analysator bäigefüügt. Éischt Ënnerstëtzung bäigefüügt fir d'Versammlungscode an Inline-Inserts ze analyséieren. Verbessert Erënnerung Tracking. De Code fir d'Veraarbechtung vu Schaltausdréck gouf nei geschriwwe ginn.
  • 30 nei Uriff u libgccjit bäigefüügt, eng gemeinsam Bibliothéik fir e Code Generator an aner Prozesser z'integréieren an et ze benotzen fir JIT Bytecode a Maschinncode ze kompiléieren.
  • Ënnerstëtzung fir de CO-RE (Compile Once - Run Everywhere) Mechanismus gouf zum Backend bäigefüügt fir BPF Bytecode ze generéieren, wat Iech erlaabt de Code vun eBPF Programmer fir de Linux Kernel nëmmen eemol ze kompiléieren an e speziellen Universalloader ze benotzen, deen den Upassung unzepassen. gelueden Programm op den aktuellen Kernel a BPF Types Format). CO-RE léist de Problem vun der Portabilitéit vu kompiléierten eBPF Programmer, déi virdru nëmmen an der Versioun vum Kernel benotzt kënne ginn, fir deen se zesummegestallt goufen, well d'Positioun vun Elementer an Datenstrukturen vu Versioun zu Versioun ännert.
  • De RISC-V Backend füügt Ënnerstëtzung fir nei Instruktiounsset-Architekturverlängerungen zba, zbb, zbc an zbs, souwéi ISA-Extensiounen fir vektor- a scalar kryptografesch Operatiounen. Par défaut gëtt Ënnerstëtzung fir d'RISC-V ISA 20191213 Spezifizéierung zur Verfügung gestallt. Den -mtune=thead-c906 Fändel gouf derbäigesat fir Optimisatiounen fir T-HEAD c906 Cores z'erméiglechen.
  • Ënnerstëtzung fir den Typ __int128_t/integer (kind = 16) gouf zum Code Generatioun Backend fir AMD GPUs op Basis vun der GCN Mikroarchitektur bäigefüügt. Et ass méiglech bis zu 40 Aarbechtsgruppen pro Computereenheet (CU) a bis zu 16 Instruktiounsfronten (Wellefront, eng Rei vun thread parallel ausgefouert vum SIMD Engine) pro Grupp ze benotzen. Virdrun war nëmmen eng Instruktiounsrand pro CU erlaabt.
  • Den NVPTX Backend, entwéckelt fir Code ze generéieren mat der NVIDIA PTX (Parallel Thread Execution) Instruktiounsset Architektur, huet d'Fäegkeet bäigefüügt fir d'"-march", "-mptx" an "-march-map" Fändelen ze benotzen. Ëmgesat Ënnerstëtzung fir PTX ISA sm_53, sm_70, sm_75 an sm_80. D'Standardarchitektur ass sm_30.
  • Am Backend fir PowerPC / PowerPC64 / RS6000 Prozessoren sinn d'Implementatioune vun agebaute Funktiounen nei geschriwwe ginn. Déi agebaute Funktiounen __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar_set sinn Dokument an ___t.fi
  • Ënnerstëtzung fir Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) an Arm Cortex-X710 (cortex- x2). Zousätzlech Ënnerstëtzung fir nei ARMv2 Architekturoptioune fir mat der "-march" Optioun ze benotzen: armv8-a, armv8.7-a, armv8.8-a. Zousätzlech Implementatioun vun C Funktiounen gebaut an de Compiler (Intrinsics) fir atomar Luede an Daten an Erënnerung ze späicheren, baséiert op der Benotzung vun erweiderten ARM Instruktiounen (ls9). Zousätzlech Ënnerstëtzung fir d'Beschleunigung vun der memcpy, memmove a memset Funktiounen mat der Mopsoption ARM Extensioun.
  • En neie Kontrollmodus "-fsanitize = Shadow-Call-Stack" (ShadowCallStack) bäigefüügt, deen de Moment nëmme fir d'AARch64 Architektur verfügbar ass a funktionnéiert beim Baucode mat der "-ffixed-r18" Optioun. De Modus gëtt Schutz géint iwwerschreiwe der Retour Adress vun enger Funktioun am Fall vun engem Prellbock iwwerdribblen op de Stack. D'Essenz vum Schutz ass d'Retouradress an engem getrennten "Schatten" Stack ze späicheren nodeems Dir d'Kontroll op eng Funktioun transferéiert an dës Adress zréckkuckt ier Dir d'Funktioun erausgeet.

Source: opennet.ru

Setzt e Commentaire