LLVM 15.0, farklı arka uçlar için iyileştirmeler, daha fazla destek ve daha fazlasıyla geliyor

LLVM 15, destek iyileştirmelerini uygular

LLVM 15.0 ayrıca C/C++ için bir dizi ilginç güncelleme içerir.

Altı aylık geliştirmeden sonra, LLVM 15.0 proje sürümü duyuruldu, içinde birçok büyük değişiklik yapıldı, yeni işlemciler, mimariler ve daha fazlası için ek desteğin yanı sıra.

LLVM'ye aşina olmayanlar için şunu bilmelisiniz ki GCC uyumlu bir derleyicidir (derleyiciler, optimize ediciler ve kod oluşturucular), programları RISC benzeri bir sanal talimat ara bit kodunda (çok seviyeli optimizasyon sistemine sahip düşük seviyeli bir sanal makine) derleyen.

Oluşturulan sözde kod, JIT derleyicisi tarafından tam program yürütülürken makine talimatlarına dönüştürülebilir.

LLVM 15.0'ın temel yeni özellikleri

Sunulan bu yeni versiyonda, Cortex-M85 işlemciler için destek, Armv9-A, Armv9.1-A ve Armv9.2-A mimarileri, Armv8.1-M PACBTI-M uzantıları için.

Öne çıkan bir diğer değişiklik ise deneysel bir DirectX arka ucu eklendi o DXIL biçimini destekler (DirectX Orta Düzey Dili) DirectX gölgelendiriciler için kullanılır. Arka uç, "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" oluşturma seçeneği aracılığıyla etkinleştirilir.

libc++ yeni özellikleri uygulamaya devam ediyor "Biçim" kitaplığı uygulamasının tamamlanması ve "aralıklar" kitaplığının önerilen deneysel sürümü de dahil olmak üzere C++20 ve C++2b standartlarının.

Clang 15.0 ile ilgili değişikliklerin bir kısmı için, C benzeri dil HLSL için deneysel destek eklendi DirectX 9 ile başlayan gölgelendiricileri yazmak ve HLSL gölgelendiricilerini DirectX 12 uyumlu DXIL (DirectX Orta Dili) ikili biçimine ve ayrıca Vulkan tarafından kullanılan SPIR biçimi -V'ye çevirmek için kullanılan (Yüksek Düzeyli Gölgelendirme Dili). Gelecekte, DXBC formatı için destek uygulamayı planlayın (DirectX Bytecode) DirectX 9-11'de kullanılır. Uygulama Microsoft tarafından sağlanır ve LLVM 2017 temelinde oluşturulan, 3.7'de piyasaya sürülen DirectX Shader Derleyicisini temel alır.

ile devam ettiği de ifade edilmektedir. gelecekteki C2X ve C++23 standartlarını desteklemek için çalışın. C dili için uygulandı: noreturn niteliği, false ve true anahtar sözcükleri, belirli bir bit derinliğindeki tamsayılar için _BitInt(N) türü, *_WIDTH makroları, UTF-8 karakterleri için u8 öneki.

Buna ek olarak, C++ için uygulandı: modül birleştirme, İşlev üyelerinin ABI izolasyonu, modülde yerel olmayan değişkenlerin sıralı dinamik başlatılması, çok boyutlu dizin operatörleri, auto(x), değişmez olmayan değişkenler, constexpr olarak bildirilen işlevlerdeki goto ve etiketler, sınırlandırılmış kaçış dizileri, adlı kaçış karakterleri.

Mimariye dayalı sistemler için x86, "-fzero-call-used-regs" bayrağı eklendi, Bu, işlevden kontrolü döndürmeden önce işlevde kullanılan tüm CPU kayıtlarının sıfırlanmasını sağlar. bu seçenek veri sızıntısına karşı korur ve açıklardan yararlanmalarda ROP (Dönüş Odaklı Programlama) cihazları oluşturmak için uygun blok sayısını yaklaşık %20 oranında azaltın.

Bellek konumu rastgeleleştirme uygulandı Güvenlik açıklarından yararlanılması durumunda yapılardan veri çıkarılmasını zorlaştıran C kodu için yapıların sayısı. Rastgeleleştirme, randomize_layout ve no_randomize_layout öznitelikleri ile açılır ve kapatılır ve tekrarlanabilir yapılar sağlamak için çekirdeğin "-frandomize-layout-seed" veya "-frandomize-layout-seed-file" bayrağıyla ayarlanması gerekir.

Diğer değişikliklerden göze çarpan:

  • OpenCL ve OpenMP desteği ile ilgili genişletilmiş yetenekler. OpenCL uzantısı cl_khr_subgroup_rotate için destek eklendi.
  • x86, PowerPC ve RISC-V mimarileri için iyileştirilmiş arka uçlar.
    Geliştirilmiş LLD bağlayıcı ve LLDB hata ayıklayıcı yetenekleri.
  • "-fstrict-flex-arrays=" bayrağı eklendi » yapılardaki bir yumuşak dizi öğesinin sınırlarını kontrol edebileceğiniz (Yumuşak Dizi Üyeleri, yapının sonunda belirsiz boyutta bir dizi).
  • Sabit ve değişken uzunluklu dizilerle ilişkili uyumsuz argüman bildirimleriyle işlevleri geçersiz kılma konusunda uyarmak için "-warray-parameter" seçeneği eklendi.
  • MSVC ile geliştirilmiş uyumluluk.
  • MSVC'de sağlanan "#pragma işlevi ve "#pragma alloc_text" desteği eklendi.
  • MSVC uyumlu /JMC ve /JMC bayrakları için destek eklendi.
  • AMD Zen2 işlemcilerden desteklenen RDPRU talimatının kullanımını kontrol etmek için "-m[no-]rdpru" bayrağı eklendi.
  • Dolaylı atlamalar için spekülatif yürütme mekanizmasının katılımını hariç tutan bir dizi talimat ekleyerek çalışan RETBLEED güvenlik açığına karşı koruma sağlamak için "-mfunction-return=thunk-extern" bayrağı eklendi.

Nihayet Bununla ilgili daha fazla bilgi edinmek istiyorsanız, ayrıntıları kontrol edebilirsiniz aşağıdaki bağlantı.


Tercih edilen kaynak olarak ekle