Pagpagawas sa GCC 12 compiler suite

Pagkahuman sa usa ka tuig nga pag-uswag, ang libre nga compiler suite nga GCC 12.1 gipagawas, ang una nga hinungdanon nga pagpagawas sa bag-ong sanga sa GCC 12.x. Nahiuyon sa bag-ong laraw sa pag-numero sa pagpagawas, ang bersyon 12.0 gigamit sa proseso sa pag-uswag, ug wala madugay sa wala pa ang pagpagawas sa GCC 12.1, ang sanga sa GCC 13.0 nagsanga na, base sa kung diin ang sunod nga mayor nga pagpagawas, GCC 13.1, mahimo maporma. Sa Mayo 23, ang proyekto magsaulog sa 35 ka tuig sukad sa pagkatukod sa unang edisyon sa GCC.

Panguna nga mga pagbag-o:

  • Gidugang nga suporta alang sa CTF (Compact Type Format) debugging format, nga naghatag ug compact storage sa impormasyon bahin sa C type, koneksyon tali sa mga function ug debugging nga mga simbolo. Kung na-embed sa mga butang nga ELF, gitugotan sa format ang paggamit sa mga lamesa sa karakter sa EFL aron malikayan ang pagdoble sa datos.
  • Ang suporta alang sa "STABS" debugging nga format sa pagtipig sa impormasyon, nga gihimo sa 1980s, wala na gigamit.
  • Ang trabaho nagpadayon sa pagpalapad sa suporta alang sa umaabot nga C2X ug C++23 nga mga sumbanan alang sa C ug C++ nga mga pinulongan. Pananglitan, ang suporta alang sa "kon consteval" nga ekspresyon gidugang; gitugotan sa paggamit sa auto sa mga argumento sa function ("f(auto(g()))"); ang paggamit sa dili literal nga mga variable, goto ug mga label gitugotan sa mga gimbuhaton nga gideklarar nga constexpr; dugang nga suporta alang sa multidimensional index operators operator []; sa kung, alang ug switch, ang mga kapabilidad sa mga bloke sa pagsugod gipalapdan (β€œalang sa (gamit ang T = int; T e : v)”).
  • Ang C++ Standard Library mipauswag sa suporta alang sa mga eksperimento nga seksyon sa C++20 ug C++23 nga mga sumbanan. Gidugang nga suporta alang sa std::move_only_function, , std::basic_string::resize_and_overwrite, , ug std::invoke_r. Gitugotan sa paggamit sa std::unique_ptr, std::vector, std::basic_string, std::opsyonal ug std::variant sa constexpr functions.
  • Ang Fortran frontend naghatag og bug-os nga suporta para sa TS 29113 specification, nga naghulagway sa mga kapabilidad sa pagsiguro sa portability tali sa Fortran ug C code.
  • Gidugang nga suporta alang sa __builtin_shufflevector(vec1, vec2, index1, index2, ...) nga extension nga gidugang kaniadto sa Clang, nga nagtanyag og usa ka tawag sa paghimo sa komon nga vector shuffle ug shuffle nga mga operasyon.
  • Kung gamiton ang "-O2" nga lebel sa pag-optimize, ang vectorization gipalihok pinaagi sa default (ang -ftree-vectorize ug -fvect-cost-model=very-cheap nga mga mode gipalihok). Ang labing barato nga modelo nagtugot lamang sa vectorization kung ang vector code hingpit nga makapuli sa scalar code nga gi-vector.
  • Gidugang ang "-ftrivial-auto-var-init" mode aron mahimo ang tin-aw nga pagsugod sa mga variable sa stack aron masubay ang mga isyu ug babagan ang mga kahuyangan nga adunay kalabotan sa paggamit sa mga wala’y una nga variable.
  • Para sa C ug C++ nga mga lengguwahe, usa ka built-in nga function __builtin_dynamic_object_size ang gidugang aron matino ang gidak-on sa usa ka butang, nga compatible sa susamang function gikan sa Clang.
  • Alang sa C ug C++ nga mga pinulongan, suporta alang sa "dili magamit" nga hiyas ang gidugang (pananglitan, mahimo nimong markahan ang mga gimbuhaton nga makamugna og sayup kung imong sulayan nga gamiton kini).
  • Para sa C ug C++ nga mga pinulongan, suporta para sa preprocessing nga mga direktiba nga "#elifdef" ug "#elifndef" gidugang.
  • Gidugang ang "-Wbidi-chars" nga bandera aron ipakita ang usa ka pasidaan kung ang UTF-8 nga mga karakter gigamit nga dili husto, nagbag-o sa han-ay kung diin gipakita ang bidirectional nga teksto.
  • Gidugang ang bandila nga "-Warray-compare" aron mapasidaan kung mosulay sa pagtandi sa duha ka operand nga nagtumong sa mga arrays.
  • Ang pagpatuman sa OpenMP 5.0 ug 5.1 (Open Multi-Processing) nga mga sumbanan, nga naghubit sa API ug mga pamaagi sa pagpadapat sa parallel nga mga pamaagi sa programming sa multi-core ug hybrid (CPU+GPU/DSP) nga mga sistema nga adunay shared memory ug vectorization units (SIMD) , nagpadayon.
  • Gipauswag nga pagpatuman sa OpenACC 2.6 parallel programming specification, nga naghubit sa mga himan alang sa offloading nga mga operasyon sa mga GPU ug mga espesyal nga processor sama sa NVIDIA PTX.
  • Suporta alang sa gipalawig nga mga instruksyon Intel AVX86-FP512 ug ang _Float16 nga tipo gidugang sa code generation backend para sa x16 architecture.
  • Alang sa x86 nga arkitektura, gidugang ang proteksyon batok sa mga kahuyangan sa mga processor nga gipahinabo sa espekulatibo nga pagpatuman sa mga panudlo pagkahuman sa wala’y kondisyon nga operasyon sa paglukso sa unahan. Ang problema mahitabo tungod sa pre-emptive nga pagproseso sa mga instruksyon diha-diha dayon sa pagsunod sa mga instruksiyon sa sanga sa memorya (SLS, Straight Line Speculation). Aron mahimo ang proteksyon, ang "-mharden-sls" nga kapilian gisugyot.
  • Gidugang nga pagtuki sa paggamit sa mga uninitialized variables sa experimental static analyzer. Gidugang ang inisyal nga suporta alang sa pag-analisar sa code sa asembliya sa mga inline nga pagsal-ot. Gipauswag ang pagsubay sa memorya. Ang kodigo alang sa pagproseso sa mga ekspresyon sa switch kay gisulat na usab.
  • Gidugang ang 30 ka bag-ong mga tawag sa libgccjit, usa ka gipaambit nga librarya alang sa pag-embed sa usa ka code generator sa ubang mga proseso ug paggamit niini sa JIT pag-compile sa bytecode sa code sa makina.
  • Ang suporta alang sa CO-RE (Compile Once - Run Everywhere) nga mekanismo gidugang sa backend alang sa pagmugna og BPF bytecode, nga nagtugot kanimo sa pag-compile sa code sa eBPF nga mga programa alang sa Linux kernel kausa lamang ug paggamit sa usa ka espesyal nga universal loader nga mohaum sa loaded nga programa sa kasamtangan nga kernel ug BPF Types Format). Gisulbad sa CO-RE ang problema sa pagdala sa mga gihugpong nga mga programa sa eBPF, nga kaniadto magamit lamang sa bersyon sa kernel diin sila gihugpong, tungod kay ang posisyon sa mga elemento sa mga istruktura sa datos nagbag-o gikan sa bersyon ngadto sa bersyon.
  • Ang RISC-V backend midugang og suporta alang sa bag-ong instruksiyon set architecture extensions zba, zbb, zbc ug zbs, ingon man ang ISA extensions alang sa vector ug scalar cryptographic nga mga operasyon. Sa kasagaran, ang suporta alang sa RISC-V ISA 20191213 nga espesipikasyon gihatag. Ang -mtune=thead-c906 nga bandila gidugang aron makahimo sa pag-optimize alang sa T-HEAD c906 cores.
  • Suporta para sa __int128_t/integer(kind=16) type ang gidugang sa code generation backend para sa AMD GPUs base sa GCN microarchitecture. Posible nga mogamit hangtod sa 40 ka mga grupo sa trabaho matag yunit sa kompyuter (CU) ug hangtod sa 16 nga mga atubangan sa panudlo (wavefront, usa ka hugpong sa mga hilo nga gihimo nga parehas sa SIMD Engine) matag grupo. Kaniadto, usa ra ka sulab sa panudlo matag CU ang gitugotan.
  • Ang backend sa NVPTX, nga gidisenyo aron makamugna og code gamit ang NVIDIA PTX (Parallel Thread Execution) nga arkitektura nga set sa instruksiyon, nakadugang sa abilidad sa paggamit sa "-march", "-mptx" ug "-march-map" nga mga bandila. Gipatuman nga suporta alang sa PTX ISA sm_53, sm_70, sm_75 ug sm_80. Ang default nga arkitektura mao ang sm_30.
  • Sa backend alang sa mga processor sa PowerPC / PowerPC64 / RS6000, ang mga pagpatuman sa mga built-in nga mga gimbuhaton gisulat pag-usab. Ang built-in nga mga function __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar ug __builtin_seted.
  • Suporta alang sa Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) ug Arm Cortex-X710 (cortex- x2). Gidugang nga suporta para sa bag-ong ARMv2 nga mga opsyon sa arkitektura para gamiton sa "-march" nga opsyon: armv8-a, armv8.7-a, armv8.8-a. Gidugang nga implementasyon sa C functions nga gitukod sa compiler (Intrinsics) para sa atomic loading ug pag-save sa data sa memorya, base sa paggamit sa extended ARM instructions (ls9). Gidugang nga suporta alang sa pagpadali sa memcpy, memmove ug memset function gamit ang mopsoption ARM extension.
  • Gidugang ang usa ka bag-ong mode sa pagsusi "-fsanitize = shadow-call-stack" (ShadowCallStack), nga sa pagkakaron magamit ra alang sa arkitektura sa AArch64 ug molihok kung magtukod og code nga adunay kapilian nga "-ffixed-r18". Ang mode naghatag proteksyon batok sa pag-overwrite sa return address gikan sa usa ka function kung adunay buffer overflow sa stack. Ang esensya sa proteksyon mao ang pagtipig sa adres sa pagbalik sa usa ka bulag nga "anino" nga stack pagkahuman ibalhin ang kontrol sa usa ka function ug makuha kini nga adres sa wala pa mogawas sa function.

Source: opennet.ru

Idugang sa usa ka comment