Ngaleupaskeun GCC 12 kompiler suite

Saatos sataun pangwangunan, kompiler suite gratis GCC 12.1 parantos dileupaskeun, pelepasan signifikan munggaran dina cabang GCC 12.x énggal. Luyu sareng skéma panomeran pelepasan énggal, versi 12.0 dianggo dina prosés pamekaran, sareng teu lami sateuacan sékrési GCC 12.1, cabang GCC 13.0 parantos bercabang, dumasar kana sékrési utama salajengna, GCC 13.1, bakal. ngawujud. Dina 23 Méi, proyék éta bakal ngagungkeun 35 taun ti formasi édisi munggaran GCC.

Parobahan utama:

  • Ditambahkeun rojongan pikeun CTF (Compact Type Format) format debugging, nu nyadiakeun gudang ci informasi ngeunaan jenis C, sambungan antara fungsi jeung simbol debugging. Nalika dipasang dina objék ELF, formatna ngamungkinkeun ngagunakeun tabel karakter EFL pikeun nyegah duplikasi data.
  • Rojongan pikeun "STABS" format gudang informasi debugging, dijieun dina 1980s, geus deprecated.
  • Karya terus dilegakeun pangrojong pikeun standar C2X jeung C ++ 23 kahareup pikeun basa C jeung C ++. Contona, rojongan pikeun "lamun consteval" ekspresi geus ditambahkeun; diwenangkeun ngagunakeun otomatis dina argumen fungsi ("f (otomatis (g ()))"); pamakéan variabel non-literal, goto na labél diwenangkeun dina fungsi dinyatakeun salaku constexpr; rojongan ditambahkeun pikeun operator indéks multidimensional operator []; dina lamun, keur jeung switch, kamampuhan tina blok initialization geus dimekarkeun ("keur (ngagunakeun T = int; T e: v) ").
  • Perpustakaan Standar C ++ parantos ningkatkeun dukungan pikeun bagian ékspérimén tina standar C ++ 20 sareng C ++ 23. Ditambahkeun dukungan pikeun std::move_only_function, , std::basic_string::resize_and_overwrite, , sareng std::invoke_r. Diidinan ngagunakeun std :: unique_ptr, std :: vektor, std :: basic_string, std :: opsional jeung std :: varian dina fungsi constexpr.
  • Frontend Fortran nyayogikeun dukungan lengkep pikeun spésifikasi TS 29113, anu ngajelaskeun kamampuan pikeun mastikeun portabilitas antara Fortran sareng kode C.
  • Ditambahkeun rojongan pikeun __builtin_shufflevector (vec1, vec2, index1, index2, ...) extension saméméhna ditambahkeun kana Clang, nu nawarkeun hiji panggero pikeun ngalakukeun acak vektor umum tur operasi acak.
  • Nalika nganggo tingkat optimasi "-O2", vectorization diaktipkeun sacara standar (mode -ftree-vectorize sareng -fvect-cost-model=very-cheap mode diaktipkeun). Modél anu murah pisan ngamungkinkeun vektorisasi ngan upami kode vektor tiasa ngagentos kodeu skalar anu divektorkeun.
  • Ditambahkeun mode "-ftrivial-auto-var-init" pikeun ngaktipkeun initialization eksplisit variabel dina tumpukan pikeun ngalacak masalah sareng meungpeuk kerentanan anu aya hubunganana sareng pamakean variabel anu teu diinisialisasi.
  • Pikeun basa C jeung C ++, diwangun-di fungsi __builtin_dynamic_object_size geus ditambahkeun pikeun nangtukeun ukuran hiji obyék, cocog sareng fungsi sarupa ti Clang.
  • Pikeun basa C jeung C ++, rojongan pikeun atribut "teu sadia" geus ditambahkeun (Contona, anjeun tiasa nyirian fungsi anu bakal ngahasilkeun kasalahan mun anjeun nyobian nganggo aranjeunna).
  • Pikeun basa C jeung C ++, rojongan pikeun preprocessing directives "#elifdef" jeung "#elifndef" geus ditambahkeun.
  • Ditambahkeun bendera "-Wbidi-chars" pikeun nunjukkeun peringatan upami karakter UTF-8 dianggo teu leres, ngarobih urutan téks bidirectional ditampilkeun.
  • Ditambahkeun bandéra "-Warray-compare" pikeun nunjukkeun peringatan nalika nyobian ngabandingkeun dua operan anu ngarujuk kana susunan.
  • Palaksanaan standar OpenMP 5.0 sareng 5.1 (Open Multi-Processing), anu netepkeun API sareng metode pikeun nerapkeun metode pemrograman paralel dina sistem multi-inti sareng hibrid (CPU + GPU / DSP) kalayan mémori sareng unit vectorization (SIMD) anu dibagi. , geus nuluykeun.
  • Ningkatkeun palaksanaan spésifikasi pamrograman paralel OpenACC 2.6, anu ngahartikeun alat pikeun ngamuat operasi dina GPU sareng prosesor khusus sapertos NVIDIA PTX.
  • Rojongan pikeun parentah nambahan Intel AVX86-FP512 sarta tipe _Float16 geus ditambahkeun kana backend generasi kode pikeun arsitektur x16.
  • Pikeun arsitektur x86, panyalindungan geus ditambahkeun ngalawan kerentanan dina prosesor disababkeun ku palaksanaan spekulatif parentah sanggeus operasi luncat ka hareup tanpa sarat. Masalahna lumangsung alatan pamrosésan pre-emptive instruksi langsung nuturkeun instruksi cabang dina mémori (SLS, Straight Line Spekulasi). Pikeun ngaktipkeun panyalindungan, pilihan "-mharden-sls" diajukeun.
  • Ditambahkeun deteksi pamakean variabel uninitialized kana analisa statik eksperimen. Ditambahkeun rojongan awal pikeun nganalisis kode assembly dina inserts inline. Ningkatkeun tracking memori. Kode pikeun ngolah ekspresi switch geus ditulis ulang.
  • Ditambahkeun 30 sauran énggal ka libgccjit, perpustakaan anu dibagikeun pikeun nampilkeun generator kode kana prosés anu sanés sareng nganggo éta pikeun JIT nyusun bytecode kana kode mesin.
  • Rojongan pikeun mékanisme CO-RE (Compile Once - Run Everywhere) geus ditambahkeun kana backend pikeun ngahasilkeun bytecode BPF, nu ngidinan Anjeun pikeun compile kode program eBPF pikeun kernel Linux Ubuntu ngan sakali tur ngagunakeun loader universal husus nu nyaluyukeun program dimuat kana kernel ayeuna sareng BPF Types Format). CO-RE ngarengsekeun masalah portabilitas program eBPF anu disusun, anu saacanna ngan ukur tiasa dianggo dina versi kernel anu aranjeunna disusun, sabab posisi unsur dina struktur data robih tina versi ka versi.
  • The RISC-V backend nambahkeun rojongan pikeun instruksi anyar set arsitéktur ekstensi zba, zbb, zbc na zbs, kitu ogé ekstensi ISA pikeun vektor sarta operasi cryptographic skalar. Sacara standar, dukungan pikeun spésifikasi RISC-V ISA 20191213 disayogikeun. Bandéra -mtune=thead-c906 parantos ditambah pikeun ngaktipkeun optimasi pikeun inti T-HEAD c906.
  • Rojongan pikeun tipe __int128_t/integer(jenis=16) geus ditambahkeun kana backend generasi kode pikeun AMD GPUs dumasar kana microarchitecture GCN. Kasebut nyaéta dimungkinkeun pikeun ngagunakeun nepi ka 40 grup gawé per Unit komputasi (CU) sarta nepi ka 16 instruksi fronts (wavefront, susunan threads dieksekusi dina paralel ku SIMD Engine) per grup. Saméméhna, ngan hiji ujung instruksi per CU diwenangkeun.
  • Backend NVPTX, dirancang pikeun ngahasilkeun kode nganggo arsitéktur set instruksi NVIDIA PTX (Parallel Thread Execution), parantos nambihan kamampuan pikeun nganggo bendera "-march", "-mptx" sareng "-march-map". Dilaksanakeun dukungan pikeun PTX ISA sm_53, sm_70, sm_75 sareng sm_80. Arsitéktur standar nyaéta sm_30.
  • Dina backend pikeun prosesor PowerPC / PowerPC64 / RS6000, palaksanaan fungsi diwangun-di parantos ditulis deui. The diwangun-di fungsi __builtin_get_texasr, __builtin_get_texasru, __builtin_get_tfhar, __builtin_get_tfiar, __builtin_set_texasr, __builtin_set_texasru, __builtin_set_tfhar jeung __builtin_seted.
  • Rojongan pikeun Arm Ampere-64 (-mcpu/-mtune ampere1), Arm Cortex-A1 (cortex-a510), Arm Cortex-A510 (cortex-a710) jeung Arm Cortex-X710 (cortex- x2). rojongan ditambahkeun pikeun pilihan arsitéktur ARMv2 anyar pikeun pamakéan ku "-march" pilihan: armv8-a, armv8.7-a, armv8.8-a. Ditambahkeun palaksanaan fungsi C diwangun kana kompiler (Intrinsik) pikeun loading atom tur nyimpen data kana mémori, dumasar kana pamakéan parentah ARM nambahan (ls9). Ditambahkeun dukungan pikeun ngagancangkeun fungsi memcpy, memmove sareng memset nganggo ekstensi ARM mopsoption.
  • Ditambahkeun mode pamariksaan anyar "-fsanitize = shadow-call-stack" (ShadowCallStack), anu ayeuna ngan sayogi pikeun arsitektur AArch64 sareng dianggo nalika ngawangun kode sareng pilihan "-fixed-r18". Modeu nyadiakeun panyalindungan ngalawan overwriting alamat balik ti fungsi dina acara panyangga mudal dina tumpukan. Hakekat panyalindungan nyaéta pikeun nyimpen alamat balik dina tumpukan "kalangkang" misah sanggeus mindahkeun kontrol ka fungsi sarta retrieving alamat ieu saméméh exiting fungsi.

sumber: opennet.ru

Tambahkeun komentar