Ngaleupaskeun suite kompiler LLVM 15.0

Sanggeus genep bulan pangwangunan, sékrési proyék LLVM 15.0 dibere - a toolkit GCC-cocog (compilers, optimizers sarta generator kode) nu compiles program kana bitcode panengah instruksi maya RISC-kawas (mesin virtual tingkat low kalawan a sistem optimasi multi-tingkat). Pseudocode nu dihasilkeun bisa dirobah maké JIT compiler kana parentah mesin langsung dina waktu palaksanaan program.

Perbaikan utama dina Clang 15.0:

  • Pikeun sistem dumasar kana arsitektur x86, bendera "-fzero-call-used-regs" geus ditambahkeun, nu ensures yén sakabéh registers CPU dipaké dina fungsi nu reset ka enol saméméh balik kontrol ti fungsi. Pilihan ieu ngamungkinkeun anjeun ngajagi tina bocor inpormasi tina fungsi sareng ngirangan jumlah blok anu cocog pikeun ngawangun gadget ROP (Return-Oriented Programming) dina eksploitasi kirang langkung 20%.
  • Randomization panempatan memori struktur pikeun kode C geus dilaksanakeun, nu complicates ékstraksi data tina struktur dina acara eksploitasi kerentanan. Randomization dihurungkeun sareng mareuman nganggo atribut randomize_layout sareng no_randomize_layout, sareng peryogi netepkeun siki nganggo bendera "-frandomize-layout-seed" atanapi "-frandomize-layout-seed-file".
  • Ditambahkeun "-fstrict-flex-arrays =" bandéra ", kalawan nu bisa ngadalikeun wates pikeun unsur Asép Sunandar Sunarya fléksibel dina struktur (Fléksibel Array Anggota, hiji Asép Sunandar Sunarya ti ukuran teu katangtu dina tungtung struktur). Lamun disetel ka 0 (standar), unsur panungtungan tina struktur jeung Asép Sunandar Sunarya salawasna diolah salaku Asép Sunandar Sunarya fléksibel, 1 - ukur ukuran [], [0] jeung [1] diolah salaku Asép Sunandar Sunarya fléksibel, 2 - ukur ukuran. [] jeung [0] diolah kawas Asép Sunandar Sunarya fléksibel.
  • Ditambahkeun dukungan ékspérimén pikeun basa C-kawas HLSL (High-Level Shader Language), dipaké dina DirectX pikeun nulis shaders.
  • Ditambahkeun "-Warray-parameter" pikeun ngingetkeun ngeunaan fungsi overriding sareng deklarasi argumen anu teu cocog sareng susunan panjangna tetep sareng variabel.
  • Ningkat kasaluyuan sareng MSVC. Ditambahkeun rojongan pikeun "fungsi #pragma" (instructs kompiler ka ngahasilkeun panggero fungsi tinimbang ékspansi inline) jeung "#pragma alloc_text" (ngahartikeun nami bagian jeung kode fungsi) disadiakeun dina MSVC. Ditambahkeun rojongan pikeun MSVC-cocog / JMC jeung / JMC umbul.
  • Gawé terus ngadukung standar C2X sareng C ++ 23 kahareup. Pikeun basa C, ieu dilaksanakeun: atribut noreturn, kecap konci palsu sareng leres, jinis _BitInt(N) pikeun integer tina jero bit anu ditangtukeun, *_WIDTH macros, awalan u8 pikeun karakter anu disandikeun UTF-8.

    Pikeun C ++, ieu dilaksanakeun: modul merging, isolasi ABI sahiji anggota fungsi, maréntahkeun initialization dinamis variabel non-lokal dina modul, operator indéks multidimensional, otomatis (x), variabel non-literal, goto jeung labél dina fungsi dinyatakeun salaku constexpr. , runtuyan ngewa delimited, ngaranna karakter ngewa.

  • Kamampuhan anu aya hubunganana sareng dukungan OpenCL sareng OpenMP parantos dilegakeun. Ditambahkeun dukungan pikeun ekstensi OpenCL cl_khr_subgroup_rotate.
  • 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=[euweuh|sadayana|balik|teu langsung-jmp]" diajukeun.
  • Pikeun platform nu ngarojong extension SSE2, tipe _Float16 geus ditambahkeun, nu emulated ngagunakeun tipe float dina kasus kurangna rojongan pikeun parentah AVX512-FP16.
  • Ditambahkeun "-m [no-] rdpru" bandéra pikeun ngadalikeun pamakéan instruksi RDPRU, dirojong dimimitian ku prosesor AMD Zen2.
  • Ditambahkeun bendera "-mfunction-return=thunk-extern" pikeun ngajagaan tina kerentanan RETBLEED, anu dianggo ku cara nambihan sekuen paréntah anu henteu kalebet kalibet mékanisme palaksanaan spekulatif pikeun cabang henteu langsung.

Inovasi konci dina LLVM 15.0:

  • Ditambahkeun rojongan pikeun Cortex-M85 CPU, Armv9-A, Armv9.1-A na Armv9.2-A arsitéktur, ekstensi Armv8.1-M PACBTI-M.
  • Backend eksperimen pikeun DirectX geus ditambahkeun nu ngarojong format DXIL (DirectX Intermediate Language) dipaké pikeun shaders DirectX. backend diaktipkeun ku nangtukeun parameter "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD = DirectX" salila assembly.
  • Libc ++ terus nerapkeun fitur anyar tina standar C ++ 20 jeung C ++ 2b, kaasup parantosan palaksanaan perpustakaan "format" jeung versi eksperimen diusulkeun tina perpustakaan "rentang".
  • Ningkatkeun backends pikeun x86, PowerPC sareng arsitéktur RISC-V.
  • Kamampuhan linker LLD sareng debugger LLDB parantos ditingkatkeun.

sumber: opennet.ru

Tambahkeun komentar