PÄc gada izstrÄdes ir izlaists bezmaksas kompilatoru komplekts GCC 12.1, kas ir pirmais nozÄ«mÄ«gais laidiens jaunajÄ GCC 12.x atzarÄ. AtbilstoÅ”i jaunajai laidienu numerÄcijas shÄmai izstrÄdes procesÄ tika izmantota versija 12.0, un neilgi pirms GCC 12.1 izlaiÅ”anas jau bija atzarojusies GCC 13.0 filiÄle, uz kuras pamata tiks izdots nÄkamais lielÄkais laidiens GCC 13.1. veidojas. 23. maijÄ projektÄ apritÄs 35 gadi kopÅ” GCC pirmÄ izdevuma izveidoÅ”anas.
GalvenÄs izmaiÅas:
- Pievienots CTF (Compact Type Format) atkļūdoÅ”anas formÄta atbalsts, kas nodroÅ”ina kompaktu informÄcijas glabÄÅ”anu par C tipiem, savienojumiem starp funkcijÄm un atkļūdoÅ”anas simboliem. Kad tas ir iegults ELF objektos, formÄts ļauj izmantot EFL rakstzÄ«mju tabulas, lai izvairÄ«tos no datu dublÄÅ”anÄs.
- Atbalsts atkļūdoÅ”anas informÄcijas uzglabÄÅ”anas formÄtam "STABS", kas tika izveidots 1980. gados, ir novecojis.
- TurpinÄs darbs, lai paplaÅ”inÄtu atbalstu nÄkamajiem C2X un C++23 standartiem C un C++ valodÄm. PiemÄram, ir pievienots izteiciena āif constevalā atbalsts; funkciju argumentos atļauts izmantot auto (āf(auto(g()))ā); funkcijÄs, kas deklarÄtas kÄ constexpr, ir atļauta neliterÄlu mainÄ«go, goto un etiÄ·eÅ”u izmantoÅ”ana; pievienots atbalsts daudzdimensiju indeksu operatoru operatoram[]; in if, for un switch, ir paplaÅ”inÄtas inicializÄcijas bloku iespÄjas (āfor (izmantojot T = int; T e : v)ā).
- C++ standarta bibliotÄka ir uzlabojusi atbalstu C++20 un C++23 standartu eksperimentÄlajÄm sadaļÄm. Pievienots atbalsts funkcijÄm std::move_only_function, , std::basic_string::resize_and_overwrite, , un std::invoke_r. Constexpr funkcijÄs atļauts izmantot std::unikÄlo_ptr, std::vector, std::basic_string, std::optional un std::variant.
- Fortran priekÅ”gals nodroÅ”ina pilnÄ«gu atbalstu TS 29113 specifikÄcijai, kas apraksta iespÄjas nodroÅ”inÄt pÄrnesamÄ«bu starp Fortran un C kodu.
- Pievienots atbalsts paplaÅ”inÄjumam __builtin_shufflevector(vec1, vec2, index1, index2, ...), kas iepriekÅ” tika pievienots Clang, kas piedÄvÄ vienu zvanu, lai veiktu parastÄs vektoru jaukÅ”anas un jaukÅ”anas darbÄ«bas.
- Izmantojot optimizÄcijas lÄ«meni "-O2", vektorizÄcija ir iespÄjota pÄc noklusÄjuma (ir iespÄjoti režīmi -ftree-vectorize un -fvect-cost-model=very-cheap). Ä»oti lÄts modelis pieļauj vektorizÄciju tikai tad, ja vektora kods var pilnÄ«bÄ aizstÄt vektorizÄto skalÄro kodu.
- Pievienots režīms "-ftrivial-auto-var-init", lai iespÄjotu steksÄ esoÅ”o mainÄ«go lielumu skaidru inicializÄciju, lai izsekotu problÄmas un bloÄ·Ätu ievainojamÄ«bas, kas saistÄ«tas ar neinicializÄtu mainÄ«go izmantoÅ”anu.
- C un C++ valodÄm ir pievienota iebÅ«vÄta funkcija __builtin_dynamic_object_size, lai noteiktu objekta izmÄru, kas ir saderÄ«ga ar lÄ«dzÄ«gu funkciju no Clang.
- ValodÄm C un C++ ir pievienots atribÅ«ta ānav pieejamsā atbalsts (piemÄram, varat atzÄ«mÄt funkcijas, kas radÄ«s kļūdu, ja mÄÄ£inÄsit tÄs izmantot).
- C un C++ valodÄm ir pievienots atbalsts priekÅ”apstrÄdes direktÄ«vÄm ā#elifdefā un ā#elifndefā.
- Pievienots karodziÅÅ” "-Wbidi-chars", lai parÄdÄ«tu brÄ«dinÄjumu, ja UTF-8 rakstzÄ«mes tiek izmantotas nepareizi, mainot secÄ«bu, kÄdÄ tiek parÄdÄ«ts divvirzienu teksts.
- Pievienots karodziÅÅ” "-Warray-compare", lai parÄdÄ«tu brÄ«dinÄjumu, mÄÄ£inot salÄ«dzinÄt divus operandus, kas attiecas uz masÄ«viem.
- OpenMP 5.0 un 5.1 (Open Multi-Processing) standartu ievieÅ”ana, kas definÄ API un metodes paralÄlÄs programmÄÅ”anas metožu pielietoÅ”anai daudzkodolu un hibrÄ«dsistÄmÄs (CPU+GPU/DSP) ar dalÄ«tu atmiÅu un vektorizÄcijas vienÄ«bÄm (SIMD) , turpinÄjÄs.
- Uzlabota OpenACC 2.6 paralÄlÄs programmÄÅ”anas specifikÄcijas ievieÅ”ana, kas definÄ rÄ«kus GPU un specializÄto procesoru, piemÄram, NVIDIA PTX, operÄciju izkrauÅ”anai.
- Atbalsts paplaÅ”inÄtÄm instrukcijÄm Intel AVX86-FP512 un _Float16 tips ir pievienots koda Ä£enerÄÅ”anas aizmugursistÄmai x16 arhitektÅ«rai.
- X86 arhitektÅ«rai ir pievienota aizsardzÄ«ba pret procesoru ievainojamÄ«bÄm, ko izraisa spekulatÄ«va instrukciju izpilde pÄc beznosacÄ«juma pÄrslÄgÅ”anÄs uz priekÅ”u operÄcijÄm. ProblÄma rodas, apsteidzot instrukcijas, kas tiek apstrÄdÄtas tÅ«lÄ«t pÄc atzarojuma instrukcijas atmiÅÄ (SLS, Straight Line Speculation). Lai iespÄjotu aizsardzÄ«bu, tiek piedÄvÄta opcija ā-mharden-slsā.
- EksperimentÄlajam statiskajam analizatoram pievienota neinicializÄtu mainÄ«go lielumu izmantoÅ”anas noteikÅ”ana. Pievienots sÄkotnÄjais atbalsts montÄžas koda analÄ«zei iekļautajos ieliktÅos. Uzlabota atmiÅas izsekoÅ”ana. SlÄdžu izteiksmju apstrÄdes kods ir pÄrrakstÄ«ts.
- Pievienoti 30 jauni izsaukumi libgccjit ā koplietotai bibliotÄkai koda Ä£eneratora iegulÅ”anai citos procesos un izmantoÅ”anai, lai JIT kompilÄtu baitkodu maŔīnkodÄ.
- BPF baitkoda Ä£enerÄÅ”anas aizmugursistÄmai ir pievienots CO-RE (Compile Once - Run Everywhere) mehÄnisma atbalsts, kas ļauj tikai vienu reizi kompilÄt eBPF programmu kodu Linux kodolam un izmantot Ä«paÅ”u universÄlu ielÄdÄtÄju, kas pielÄgo ielÄdes programma paÅ”reizÄjÄ kodola un BPF tipu formÄtÄ). CO-RE atrisina kompilÄto eBPF programmu pÄrnesamÄ«bas problÄmu, kuras iepriekÅ” varÄja izmantot tikai tajÄ kodola versijÄ, kurai tÄs tika kompilÄtas, jo elementu pozÄ«cija datu struktÅ«rÄs mainÄs atkarÄ«bÄ no versijas uz versiju.
- RISC-V aizmugursistÄma pievieno atbalstu jauniem instrukciju kopas arhitektÅ«ras paplaÅ”inÄjumiem zba, zbb, zbc un zbs, kÄ arÄ« ISA paplaÅ”inÄjumus vektoru un skalÄrÄs kriptogrÄfijas operÄcijÄm. PÄc noklusÄjuma tiek nodroÅ”inÄts atbalsts specifikÄcijai RISC-V ISA 20191213. Ir pievienots karodziÅÅ” -mtune=thead-c906, lai iespÄjotu T-HEAD c906 kodolu optimizÄciju.
- Atbalsts tipam __int128_t/integer(kind=16) ir pievienots AMD GPU koda Ä£enerÄÅ”anas aizmugursistÄmai, kuras pamatÄ ir GCN mikroarhitektÅ«ra. Vienai skaitļoÅ”anas vienÄ«bai (CU) ir iespÄjams izmantot lÄ«dz 40 darba grupÄm un lÄ«dz 16 instrukciju frontÄm (viļÅu fronte, diegu komplekts, ko paralÄli izpilda SIMD Engine) vienai grupai. IepriekÅ” katrai CU bija atļauta tikai viena instrukciju mala.
- NVPTX aizmugursistÄma, kas paredzÄta koda Ä£enerÄÅ”anai, izmantojot NVIDIA PTX (Parallel Thread Execution) instrukciju kopas arhitektÅ«ru, ir pievienojusi iespÄju izmantot karogus ā-marchā, ā-mptxā un ā-march-mapā. Ieviests atbalsts PTX ISA sm_53, sm_70, sm_75 un sm_80. NoklusÄjuma arhitektÅ«ra ir sm_30.
- PowerPC / PowerPC64 / RS6000 procesoru aizmugursistÄmÄ iebÅ«vÄto funkciju ievieÅ”anas ir pÄrrakstÄ«tas. IebÅ«vÄtÄs funkcijas __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_texasru, __builtin_set_set.tfi
- Atbalsts Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) un Arm Cortex-X710 (cortex-x2). Pievienots atbalsts jaunÄm ARMv2 arhitektÅ«ras opcijÄm lietoÅ”anai ar opciju "-march": armv8-a, armv8.7-a, armv8.8-a. Pievienota kompilatorÄ iebÅ«vÄto C funkciju ievieÅ”ana (Intrinsics) datu ielÄdei un saglabÄÅ”anai atmiÅÄ, pamatojoties uz paplaÅ”inÄto ARM instrukciju izmantoÅ”anu (ls9). Pievienots atbalsts memcpy, memmove un memset funkciju paÄtrinÄÅ”anai, izmantojot mopsoption ARM paplaÅ”inÄjumu.
- Pievienots jauns pÄrbaudes režīms ā-fsanitize=shadow-call-stackā (ShadowCallStack), kas paÅ”laik ir pieejams tikai AArch64 arhitektÅ«rai un darbojas, veidojot kodu ar opciju ā-ffixed-r18ā. Režīms nodroÅ”ina aizsardzÄ«bu pret atgrieÅ”anas adreses pÄrrakstÄ«Å”anu no funkcijas bufera pÄrpildes gadÄ«jumÄ stekÄ. AizsardzÄ«bas bÅ«tÄ«ba ir saglabÄt atgrieÅ”anas adresi atseviÅ”Ä·Ä āÄnuā kaudzÄ pÄc vadÄ«bas nodoÅ”anas funkcijai un Ŕīs adreses izgÅ«Å”anas pirms funkcijas izieÅ”anas.
Avots: opennet.ru