LLVM 15.0 hadir dengan peningkatan untuk berbagai backend, dukungan yang lebih besar, dan banyak lagi

LLVM 15 mengimplementasikan peningkatan dukungan

LLVM 15.0 juga menyertakan sejumlah pembaruan menarik untuk C/C++.

Setelah enam bulan pengembangan, Rilis proyek LLVM 15.0 diumumkan, di mana banyak perubahan besar yang dilakukan, serta dukungan tambahan untuk prosesor baru, arsitektur, dan banyak lagi.

Bagi mereka yang tidak terbiasa dengan LLVM, Anda harus tahu bahwa ini adalah kompiler yang kompatibel dengan GCC (kompiler, pengoptimal, dan pembuat kode) yang mengkompilasi program menjadi bitcode perantara instruksi virtual mirip RISC (mesin virtual tingkat rendah dengan sistem optimasi bertingkat).

Pseudocode yang dihasilkan dapat diubah oleh kompiler JIT menjadi instruksi mesin tepat pada saat eksekusi program.

Fitur baru utama dari LLVM 15.0

Dalam versi baru yang disajikan ini, disoroti bahwa dukungan untuk prosesor Cortex-M85, serta untuk arsitektur Armv9-A, Armv9.1-A dan Armv9.2-A, ekstensi Armv8.1-M PACBTI-M.

Perubahan lain yang menonjol adalah itu menambahkan backend DirectX eksperimental bahwa mendukung format DXIL (DirectX Intermediate Language) digunakan untuk shader DirectX. Backend diaktifkan melalui opsi build "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX".

libc++ terus mengimplementasikan fitur baru standar C++20 dan C++2b, termasuk penyelesaian implementasi pustaka "format" dan versi eksperimental yang diusulkan dari pustaka "rentang".

Untuk bagian dari perubahan yang terkait dengan Clang 15.0 disebutkan bahwa menambahkan dukungan eksperimental untuk bahasa seperti C HLSL (High-Level Shading Language), yang digunakan untuk menulis shader yang dimulai dengan DirectX 9, serta menerjemahkan shader HLSL ke dalam format biner DXIL (DirectX Intermediate Language) yang kompatibel dengan DirectX 12, serta format SPIR -V yang digunakan oleh Vulkan. Di masa depan, berencana untuk mengimplementasikan dukungan untuk format DXBC (DirectX Bytecode) digunakan di DirectX 9-11. Implementasinya disediakan oleh Microsoft dan didasarkan pada DirectX Shader Compiler, dirilis pada tahun 2017, dibangun berdasarkan LLVM 3.7.

Disebutkan juga bahwa itu berlanjut dengan bekerja untuk mendukung standar C2X dan C++23 di masa mendatang. Diimplementasikan untuk bahasa C: atribut noreturn, kata kunci false dan true, tipe _BitInt(N) untuk bilangan bulat dengan kedalaman bit tertentu, makro *_WIDTH, awalan u8 untuk karakter UTF-8.

Selain itu, telah diimplementasikan untuk C++: penggabungan modul, Isolasi ABI anggota fungsi, memerintahkan inisialisasi dinamis variabel non-lokal dalam modul, operator indeks multidimensi, auto(x), variabel non-literal, goto dan label dalam fungsi yang dideklarasikan sebagai constexpr, urutan escape yang dibatasi, bernama karakter escape.

Untuk sistem berdasarkan arsitektur x86, menambahkan tanda "-fzero-call-used-regs", yang memberikan zeroing pada semua register CPU yang digunakan dalam fungsi tersebut sebelum mengembalikan kontrol dari fungsi tersebut. pilihan ini melindungi terhadap kebocoran data fungsi dan mengurangi jumlah blok yang cocok untuk membuat perangkat ROP (Return Oriented Programming) dalam eksploitasi sekitar 20%.

Pengacakan lokasi memori telah diterapkan struktur untuk kode C, yang memperumit ekstraksi data dari struktur jika terjadi eksploitasi kerentanan. Pengacakan dihidupkan dan dimatikan dengan atribut randomize_layout dan no_randomize_layout, dan memerlukan seed untuk disetel dengan flag "-frandomize-layout-seed" atau "-frandomize-layout-seed-file" untuk memastikan build yang dapat diulang.

Dari perubahan lainnya yang menonjol:

  • Kemampuan yang diperluas terkait dengan dukungan OpenCL dan OpenMP. Menambahkan dukungan untuk ekstensi OpenCL cl_khr_subgroup_rotate.
  • Peningkatan backend untuk arsitektur x86, PowerPC, dan RISC-V.
    Peningkatan LLD linker dan kemampuan debugger LLDB.
  • Menambahkan bendera "-fstrict-flex-arrays=" » yang dengannya Anda dapat mengontrol batas elemen larik lunak dalam struktur (Anggota Larik Lunak, larik dengan ukuran tak terbatas di akhir struktur).
  • Menambahkan opsi "-warray-parameter" untuk memperingatkan tentang penggantian fungsi dengan deklarasi argumen yang tidak cocok yang terkait dengan array panjang tetap dan variabel.
  • Peningkatan kompatibilitas dengan MSVC.
  • Menambahkan dukungan untuk "#pragma function dan "#pragma alloc_text" yang disediakan di MSVC.
  • Menambahkan dukungan untuk flag /JMC dan /JMC yang kompatibel dengan MSVC.
  • Menambahkan flag "-m[no-]rdpru" untuk mengontrol penggunaan instruksi RDPRU, didukung dari prosesor AMD Zen2.
  • Menambahkan flag "-mfunction-return=thunk-extern" untuk melindungi dari kerentanan RETBLEED, yang bekerja dengan menambahkan urutan instruksi yang mengecualikan partisipasi mekanisme eksekusi spekulatif untuk lompatan tidak langsung.

Akhirnya Jika Anda tertarik untuk mengetahui lebih banyak tentang itu, Anda dapat memeriksa detailnya di link berikut.


Tambahkan sebagai sumber pilihan