Rilis set kompiler LLVM 15.0

Sawise nem sasi pembangunan, release saka project LLVM 15.0 diwenehi - toolkit GCC-kompatibel (kompiler, optimizers lan generator kode) sing compiles program menyang bitcode penengah instruksi virtual kaya RISC (mesin virtual tingkat rendah karo a sistem optimasi multi-level). Pseudocode sing digawe bisa diowahi nggunakake compiler JIT menyang instruksi mesin langsung nalika eksekusi program.

Dandan utama ing Clang 15.0:

  • Kanggo sistem adhedhasar arsitektur x86, flag "-fzero-call-used-regs" wis ditambahake, kang mesthekake yen kabeh ndhaftar CPU digunakake ing fungsi sing direset menyang nul sadurunge bali kontrol saka fungsi. Opsi iki ngidini sampeyan nglindhungi saka bocor informasi saka fungsi lan nyuda jumlah blok sing cocog kanggo mbangun gadget ROP (Return-Oriented Programming) ing eksploitasi kira-kira 20%.
  • Randomization saka panggonan memori saka struktur kanggo kode C wis dipun ginakaken, kang complicates extraction data saka struktur ing acara eksploitasi kerentanan. Randomization diuripake lan mateni nggunakake atribut randomize_layout lan no_randomize_layout, lan mbutuhake nyetel wiji nggunakake flag "-frandomize-layout-seed" utawa "-frandomize-layout-seed-file".
  • Ditambahake "-fstrict-flex-arrays =" flag ", karo sampeyan bisa ngontrol wates kanggo unsur susunan fleksibel ing struktur (Anggota Array Fleksibel, Uploaded ukuran indefinite ing mburi struktur). Yen disetel dadi 0 (standar), unsur pungkasan saka struktur karo array tansah diproses minangka array fleksibel, 1 - mung ukuran [], [0] lan [1] diproses minangka array fleksibel, 2 - mung ukuran. [] lan [0] diproses kaya array fleksibel.
  • Ditambahake dhukungan eksperimen kanggo basa C-kaya HLSL (High-Level Shader Language), digunakake ing DirectX kanggo nulis shaders.
  • Ditambahake "-Warray-parameter" kanggo ngelekake babagan fungsi overriding karo deklarasi argumen sing ora kompatibel sing digandhengake karo susunan dawa tetep lan variabel.
  • Peningkatan kompatibilitas karo MSVC. Dhukungan sing ditambahake kanggo "fungsi #pragma" (ngarahake kompiler kanggo ngasilake telpon fungsi tinimbang ekspansi inline) lan "#pragma alloc_text" (nemtokake jeneng bagean kanthi kode fungsi) sing kasedhiya ing MSVC. Dhukungan ditambahake kanggo panji MSVC / JMC lan / JMC.
  • Pakaryan terus ndhukung standar C2X lan C ++ 23 ing mangsa ngarep. Kanggo basa C, ing ngisor iki dileksanakake: atribut noreturn, tembung kunci palsu lan bener, jinis _BitInt(N) kanggo integer saka ambane bit tartamtu, * _WIDTH macro, awalan u8 kanggo UTF-8 karakter dienkode.

    Kanggo C ++, ing ngisor iki dileksanakake: penggabungan modul, isolasi ABI saka anggota fungsi, urutan inisialisasi dinamis variabel non-lokal ing modul, operator indeks multidimensi, otomatis (x), variabel non-literal, goto lan label ing fungsi sing diumumake minangka constexpr , urutan uwal diwatesi, jenenge karakter uwal.

  • Kapabilitas sing ana gandhengane karo dhukungan OpenCL lan OpenMP wis ditambahi. Dhukungan ditambahake kanggo ekstensi OpenCL cl_khr_subgroup_rotate.
  • 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=[ora ana|kabeh|bali|ora langsung-jmp]" diusulake.
  • Kanggo platform sing ndhukung extension SSE2 wis ditambahakΓ© jinis _Float16, kang ditiru nggunakake jinis float ing cilik saka lack of support kanggo instruksi AVX512-FP16.
  • Added "-m [no-] rdpru" flag kanggo kontrol nggunakake instruksi RDPRU, didhukung miwiti karo prosesor AMD Zen2.
  • Nambahake gendera "-mfunction-return=thunk-extern" kanggo nglindhungi kerentanan RETBLEED, sing dianggo kanthi nambahake urutan instruksi sing ora kalebu keterlibatan mekanisme eksekusi spekulatif kanggo cabang ora langsung.

Inovasi utama ing LLVM 15.0:

  • Dhukungan ditambahake kanggo arsitektur Cortex-M85 CPU, Armv9-A, Armv9.1-A lan Armv9.2-A, ekstensi Armv8.1-M PACBTI-M.
  • Backend eksperimental kanggo DirectX wis ditambahake sing ndhukung format DXIL (DirectX Intermediate Language) sing digunakake kanggo shaders DirectX. Backend diaktifake kanthi nemtokake parameter "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" sajrone perakitan.
  • Libc ++ terus ngleksanakake fitur-fitur anyar saka standar C ++ 20 lan C ++ 2b, kalebu completion saka implementasine saka perpustakaan "format" lan ngajokaken versi eksperimen saka perpustakaan "kisaran".
  • Backends apik kanggo arsitektur x86, PowerPC lan RISC-V.
  • Kapabilitas linker LLD lan debugger LLDB wis ditingkatake.

Source: opennet.ru

Add a comment