Rilis saka GCC 12 compiler suite

Sawise setahun pembangunan, free compiler Suite GCC 12.1 wis dirilis, release pinunjul pisanan ing cabang GCC 12.x anyar. Sesuai karo skema penomoran rilis anyar, versi 12.0 digunakake ing proses pangembangan, lan sakcepete sadurunge rilis GCC 12.1, cabang GCC 13.0 wis cabang, kanthi basis rilis utama sabanjure, GCC 13.1, bakal kawangun. Ing 23 Mei, proyek kasebut bakal ngrayakake 35 taun wiwit pambentukan edisi pertama GCC.

Owah-owahan utama:

  • Dhukungan ditambahake kanggo format debugging CTF (Compact Type Format), sing nyedhiyakake panyimpenan kompak informasi babagan jinis C, sambungan antarane fungsi lan simbol debugging. Nalika ditempelake ing obyek ELF, format ngidini nggunakake tabel karakter EFL supaya data duplikasi.
  • Dhukungan kanggo format panyimpenan informasi debugging "STABS", digawe ing taun 1980-an, wis ora digunakake.
  • Karya terus nggedhekake dhukungan kanggo standar C2X lan C ++ 23 kanggo basa C lan C ++. Contone, dhukungan kanggo ekspresi "yen consteval" wis ditambahake; diijini nggunakake otomatis ing argumen fungsi ("f (otomatis (g ()))"); nggunakake variabel non-literal, goto lan label diijini ing fungsi sing diumumake minangka constexpr; ditambahake dhukungan kanggo operator operator indeks multidimensi []; ing yen, kanggo lan ngalih, Kapabilitas pamblokiran initialization wis ditambahi ("kanggo (nggunakake T = int; T e: v) ").
  • Perpustakaan Standar C ++ wis ningkatake dhukungan kanggo bagean eksperimen standar C ++ 20 lan C ++ 23. Ditambahake dhukungan kanggo std::move_only_function, , std::basic_string::resize_and_overwrite, , lan std::invoke_r. Diijini nggunakake std :: unique_ptr, std :: vector, std :: basic_string, std :: opsional lan std :: varian ing fungsi constexpr.
  • Frontend Fortran nyedhiyakake dhukungan lengkap kanggo spesifikasi TS 29113, sing nggambarake kemampuan kanggo njamin portabilitas antarane Fortran lan kode C.
  • Added support kanggo extension __builtin_shufflevector (vec1, vec2, index1, index2, ...) sadurunge ditambahake kanggo Clang, kang nawakake telpon siji kanggo nindakake shuffle vektor umum lan operasi acak.
  • Nalika nggunakake tingkat optimasi "-O2", vektorisasi diaktifake kanthi gawan (mode -ftree-vectorize lan -fvect-cost-model=very-cheap diaktifake). Model sing murah banget ngidini vektorisasi mung yen kode vektor bisa ngganti kode skalar sing divektorake.
  • Ditambahake mode "-ftrivial-auto-var-init" kanggo ngaktifake initialization eksplisit variabel ing tumpukan kanggo trek masalah lan mblokir kerentanan sing ana gandhengane karo panggunaan variabel sing ora dikawruhi.
  • Kanggo basa C lan C ++ ditambahake fungsi __builtin_dynamic_object_size sing dibangun kanggo nemtokake ukuran obyek, kompatibel karo fungsi sing padha saka Clang.
  • Kanggo basa C lan C ++, dhukungan kanggo atribut "ora kasedhiya" wis ditambahake (contone, sampeyan bisa menehi tandha fungsi sing bakal nggawe kesalahan yen sampeyan nyoba nggunakake).
  • Kanggo basa C lan C ++, dhukungan kanggo arahan preprocessing "#elifdef" lan "#elifndef" wis ditambahake.
  • Bendera "-Wbidi-chars" ditambahake kanggo nampilake bebaya yen karakter UTF-8 digunakake kanthi ora bener, ngganti urutan teks bidirectional ditampilake.
  • Nambahake gendera "-Warray-compare" kanggo ngelingake nalika nyoba mbandhingake rong operand sing nuduhake array.
  • Implementasi standar OpenMP 5.0 lan 5.1 (Open Multi-Processing), sing nemtokake API lan cara kanggo ngetrapake metode pemrograman paralel ing sistem multi-inti lan hibrida (CPU+GPU/DSP) kanthi memori lan unit vektorisasi (SIMD) sing dienggo bareng. , wis terus.
  • Apik implementasine saka OpenACC 2.6 specification program podo, kang nemtokake alat kanggo offloading operasi ing GPU lan pemroses khusus kayata NVIDIA PTX.
  • Dhukungan kanggo instruksi lengkap Intel AVX86-FP512 lan jinis _Float16 wis ditambahake menyang backend generasi kode kanggo arsitektur x16.
  • Kanggo arsitektur x86, proteksi wis ditambahake marang kerentanan ing prosesor sing disebabake dening eksekusi spekulatif instruksi sawise operasi lompat maju tanpa syarat. Masalah dumadi amarga pangolahan pre-emptive instruksi langsung sawise instruksi cabang ing memori (SLS, Straight Line Speculation). Kanggo ngaktifake proteksi, opsi "-mharden-sls" diusulake.
  • Nambahake deteksi panggunaan variabel sing ora dikawruhi menyang analisa statis eksperimental. Ditambahake dhukungan awal kanggo nganalisa kode perakitan ing sisipan inline. Ngapikake nelusuri memori. Kode kanggo ngolah ekspresi switch wis ditulis maneh.
  • Nambahake 30 panggilan anyar menyang libgccjit, perpustakaan sing dienggo bareng kanggo nanem generator kode menyang proses liyane lan digunakake kanggo JIT ngumpulake bytecode menyang kode mesin.
  • Dhukungan kanggo mekanisme CO-RE (Kompilasi Sawise - Run Everywhere) wis ditambahake ing backend kanggo ngasilake bytecode BPF, sing ngidini sampeyan ngumpulake kode program eBPF kanggo kernel Linux mung sapisan lan nggunakake loader universal khusus sing adaptasi program dimuat menyang kernel saiki lan BPF Types Format). CO-RE ngatasi masalah portabilitas program eBPF sing dikompilasi, sing sadurunge mung bisa digunakake ing versi kernel sing dikompilasi, amarga posisi unsur ing struktur data diganti saka versi menyang versi.
  • Backend RISC-V nambahake dhukungan kanggo ekstensi arsitektur set instruksi anyar zba, zbb, zbc lan zbs, uga ekstensi ISA kanggo operasi kriptografi vektor lan skalar. Kanthi gawan, dhukungan kanggo spesifikasi RISC-V ISA 20191213 diwenehake. GendΓ©ra -mtune=thead-c906 wis ditambahake kanggo ngaktifake optimasi kanggo inti T-HEAD c906.
  • Dhukungan kanggo jinis __int128_t/integer(jenis=16) wis ditambahake menyang backend generasi kode kanggo AMD GPU adhedhasar microarchitecture GCN. Sampeyan bisa nggunakake nganti 40 kelompok kerja saben unit komputasi (CU) lan munggah 16 instruksi ngarep (wavefront, pesawat saka Utas kaleksanan ing podo karo dening SIMD Engine) saben grup. Sadurunge, mung siji pinggiran instruksi saben CU sing diidini.
  • NVPTX backend, dirancang kanggo generate kode nggunakake NVIDIA PTX (Parallel Thread Execution) arsitektur pesawat instruction, wis nambah kemampuan kanggo nggunakake "-march", "-mptx" lan "-march-map" flag. Dilaksanakake dhukungan kanggo PTX ISA sm_53, sm_70, sm_75 lan sm_80. Arsitektur standar yaiku sm_30.
  • Implementasi fungsi sing dibangun wis ditulis maneh ing backend kanggo pemroses PowerPC / PowerPC64 / RS6000. Fungsi sing dibangun ing __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar lan __builtin_seted.
  • Dhukungan kanggo Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) lan Arm Cortex-X710 (cortex- x2). Dhukungan ditambahake kanggo opsi arsitektur ARMv2 anyar kanggo nggunakake pilihan "-march": armv8-a, armv8.7-a, armv8.8-a. Added implementasine saka fungsi C dibangun ing compiler (Intrinsik) kanggo loading atom lan nyimpen data menyang memori, adhedhasar nggunakake instruksi ARM lengkap (ls9). Dhukungan ditambahake kanggo nyepetake fungsi memcpy, memmove lan memset nggunakake extension ARM mopsoption.
  • Nambahake mode mriksa anyar "-fsanitize = Shadow-call-stack" (ShadowCallStack), sing saiki mung kasedhiya kanggo arsitektur AArch64 lan bisa digunakake nalika mbangun kode kanthi pilihan "-fixed-r18". Mode menehi pangayoman marang nimpa alamat bali saka fungsi ing acara saka buffer overflow ing tumpukan. Inti saka pangayoman yaiku kanggo nyimpen alamat bali ing tumpukan "bayangan" sing kapisah sawise nransfer kontrol menyang fungsi lan njupuk alamat kasebut sadurunge metu saka fungsi kasebut.

Source: opennet.ru

Add a comment