LLVM 15.0 derleyici paketinin yayınlanması

Altı aylık geliştirme sürecinin ardından, programları RISC benzeri sanal talimatların ara bit kodu (düşük seviyeli bir sanal makine) halinde derleyen GCC uyumlu bir araç seti (derleyiciler, optimize ediciler ve kod oluşturucular) olan LLVM 15.0 projesinin piyasaya sürülmesi sunuldu. çok seviyeli optimizasyon sistemi). Oluşturulan sözde kod, bir JIT derleyicisi kullanılarak doğrudan programın yürütülmesi sırasında makine talimatlarına dönüştürülebilir.

Clang 15.0'daki önemli iyileştirmeler:

  • X86 mimarisini temel alan sistemler için, fonksiyonda kullanılan tüm CPU kayıtlarının, kontrolü fonksiyondan geri döndürmeden önce sıfıra sıfırlanmasını sağlayan "-fzero-call-used-regs" bayrağı eklenmiştir. Bu seçenek, işlevlerden bilgi sızıntısına karşı koruma sağlamanıza ve açıklardan yararlanmalarda ROP (Dönüş Odaklı Programlama) aygıtları oluşturmaya uygun blok sayısını yaklaşık %20 azaltmanıza olanak tanır.
  • C kodu için yapıların bellek yerleşiminin rastgeleleştirilmesi uygulandı; bu, güvenlik açıklarından yararlanılması durumunda yapılardan veri çıkarılmasını zorlaştırıyor. Rastgeleleştirme, random_layout ve no_randomize_layout nitelikleri kullanılarak açılıp kapatılır ve "-frandomize-layout-seed" veya "-frandomize-layout-seed-file" bayrağını kullanarak bir tohum ayarlamayı gerektirir.
  • "-fstrict-flex-arrays=" bayrağı eklendi ", bununla yapılardaki esnek bir dizi öğesinin sınırlarını kontrol edebilirsiniz (Esnek Dizi Üyeleri, yapının sonunda belirsiz boyutta bir dizi). 0 (varsayılan) olarak ayarlandığında, dizinin bulunduğu yapının son öğesi her zaman esnek bir dizi olarak işlenir, yalnızca 1 boyutlar [], [0] ve [1] esnek bir dizi olarak işlenir, yalnızca 2 boyut [] ve [0] esnek bir dizi gibi işlenir.
  • Gölgelendiricileri yazmak için DirectX'te kullanılan C benzeri dil HLSL (Yüksek Düzey Gölgelendirici Dili) için deneysel destek eklendi.
  • Sabit ve değişken uzunluklu dizilerle ilişkili uyumsuz bağımsız değişken bildirimlerine sahip işlevlerin geçersiz kılınması konusunda uyarmak için "-Warray-parametresi" eklendi.
  • MSVC ile geliştirilmiş uyumluluk. MSVC'de sağlanan "#pragma işlevi" (derleyiciye satır içi genişletme yerine bir işlev çağrısı oluşturması talimatını verir) ve "#pragma alloc_text" (işlev koduyla bölümün adını tanımlar) için destek eklendi. MSVC uyumlu /JMC ve /JMC bayrakları için destek eklendi.
  • Gelecekteki C2X ve C++23 standartlarını desteklemek için çalışmalar devam ediyor. C dili için aşağıdakiler uygulanır: 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 kodlu karakterler için u8 öneki.

    C++ için aşağıdakiler uygulanır: modül birleştirme, fonksiyon üyelerinin ABI izolasyonu, modüllerdeki yerel olmayan değişkenlerin sıralı dinamik başlatılması, çok boyutlu indeks operatörleri, auto(x), değişmez olmayan değişkenler, goto ve constexpr olarak bildirilen işlevlerdeki etiketler , sınırlandırılmış kaçış dizileri, kaçış karakterleri olarak adlandırılır.

  • OpenCL ve OpenMP desteğiyle ilişkili yetenekler genişletildi. OpenCL uzantısı cl_khr_subgroup_rotate için destek eklendi.
  • X86 mimarisi için, koşulsuz ileri atlama operasyonlarından sonra talimatların spekülatif olarak yürütülmesinden kaynaklanan işlemcilerdeki güvenlik açıklarına karşı koruma eklendi. Sorun, dallanma komutunun hemen ardından gelen talimatların bellekte önceden önleyici olarak işlenmesi nedeniyle ortaya çıkar (SLS, Düz Çizgi Spekülasyon). Korumayı etkinleştirmek için “-mharden-sls=[none|all|return|indirect-jmp]” seçeneği önerilmektedir.
  • SSE2 uzantısını destekleyen platformlar için, AVX16-FP512 talimatlarının desteklenmemesi durumunda float türü kullanılarak taklit edilen _Float16 türü eklenmiştir.
  • RDPRU talimatının kullanımını kontrol etmek için "-m[no-]rdpru" bayrağı eklendi; AMD Zen2 işlemcilerden itibaren desteklenmektedir.
  • Dolaylı dallar 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.

LLVM 15.0'daki önemli yenilikler:

  • Cortex-M85 CPU, Armv9-A, Armv9.1-A ve Armv9.2-A mimarileri, Armv8.1-M PACBTI-M uzantıları için destek eklendi.
  • DirectX gölgelendiricileri için kullanılan DXIL (DirectX Orta Dili) formatını destekleyen deneysel bir DirectX arka ucu eklenmiştir. Montaj sırasında “-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX” parametresi belirtilerek arka uç etkinleştirilir.
  • Libc++, "format" kitaplığının uygulanması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 yeni özelliklerini uygulamaya devam ediyor.
  • x86, PowerPC ve RISC-V mimarileri için geliştirilmiş arka uçlar.
  • LLD bağlayıcının ve LLDB hata ayıklayıcısının yetenekleri geliştirildi.

Kaynak: opennet.ru

Yorum ekle