GCC 12 kompilatoru komplekta izlaiŔana

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

Pievieno komentāru