LLVM 15.0 が到着し、さまざまなバックエンドの改善、サポートの強化などが行われました

LLVM 15 はサポートの改善を実装します

LLVM 15.0 には、C/C++ に対する多くの興味深い更新も含まれています。

開発のXNUMXか月後、 LLVM 15.0 プロジェクトのリリースが発表されました多くの大きな変更が加えられ、 新しいプロセッサ、アーキテクチャなどのサポートが追加されました。

LLVM に慣れていない人は、これを知っておく必要があります。 GCC互換コンパイラです プログラムを RISC のような仮想命令中間ビットコード (マルチレベル最適化システムを備えた低レベル仮想マシン) にコンパイルする (コンパイラ、オプティマイザ、およびコード ジェネレータ)。

生成された疑似コードは、プログラムの実行時に JIT コンパイラーによって機械語命令に変換されます。

LLVM15.0の主な新機能

提示されるこの新しいバージョンでは、 Cortex-M85 プロセッサのサポート、および Armv9-A、Armv9.1-A、および Armv9.2-A アーキテクチャの場合、Armv8.1-M PACBTI-M 拡張機能。

目立つもう一つの変化はそれです 実験的な DirectX バックエンドを追加 その DXIL形式をサポート (DirectX 中間言語) DirectX シェーダーに使用されます。 バックエンドは、「-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX」ビルド オプションを介して有効になります。

libc++ は引き続き新機能を実装します C++20 および C++2b 標準の「フォーマット」ライブラリ実装の完成と「範囲」ライブラリの提案された実験的バージョンを含みます。

Clang 15.0 に関連する変更の一部については、次のことが言及されています。 C ライクな言語 HLSL の実験的サポートを追加 DirectX 9 以降のシェーダーの作成、HLSL シェーダーの DirectX 12 互換の DXIL (DirectX Intermediate Language) バイナリ形式、および Vulkan で使用される SPIR 形式 -V への変換に使用されます。 将来、 DXBCフォーマットのサポートを実装する予定 (DirectX バイトコード) DirectX 9-11 で使用されます。 実装は Microsoft によって提供され、LLVM 2017 に基づいて構築された、3.7 年にリリースされた DirectX Shader Compiler に基づいています。

に続くとも言われています。 将来の C2X および C++23 標準のサポートに取り組んでいます。 C 言語用に実装されています: noreturn 属性、false および true キーワード、特定のビット深度の整数の _BitInt(N) 型、*_WIDTH マクロ、UTF-8 文字の u8 プレフィックス。

それに加えて、 C++ 用に実装されています: モジュールのマージ、 関数メンバーの ABI 分離、モジュール内の非ローカル変数の順序付き動的初期化、 多次元インデックス演算子、auto(x)、非リテラル変数、constexpr として宣言された関数内の goto とラベル、区切り記号付きエスケープ シーケンス、名前付きエスケープ文字。

アーキテクチャに基づくシステムの場合 x86、「-fzero-call-used-regs」フラグを追加、 これにより、関数から制御を返す前に、関数で使用されるすべての CPU レジスタがゼロになります。 このオプション データ漏洩から保護します 機能の数を減らし、エクスプロイトで ROP (Return Oriented Programming) デバイスを作成するのに適したブロックの数を約 20% 削減します。

メモリ位置のランダム化が実装されました これにより、脆弱性が悪用された場合に構造からのデータの抽出が複雑になります。 ランダム化は、randomize_layout 属性と no_randomize_layout 属性でオンとオフを切り替えます。繰り返し可能なビルドを確保するには、「-frandomize-layout-seed」または「-frandomize-layout-seed-file」フラグを使用してシードを設定する必要があります。

その他の変更点 目立つ:

  • OpenCL および OpenMP サポートに関連する拡張機能。 OpenCL 拡張 cl_khr_subgroup_rotate のサポートが追加されました。
  • x86、PowerPC、および RISC-V アーキテクチャのバックエンドが改善されました。
    LLD リンカーと LLDB デバッガーの機能が改善されました。
  • 「-fstrict-flex-arrays=」フラグを追加» 構造内のソフト配列要素の制限を制御できます (ソフト配列メンバー、構造の末尾にある不定サイズの配列)。
  • 固定長配列と可変長配列に関連付けられた引数宣言が一致しない関数のオーバーライドについて警告する「-warray-parameter」オプションを追加しました。
  • MSVC との互換性が向上しました。
  • MSVC で提供されている「#pragma 関数」と「#pragma alloc_text」のサポートを追加しました。
  • MSVC 互換の /JMC および /JMC フラグのサポートが追加されました。
  • AMD Zen2 プロセッサからサポートされる RDPRU 命令の使用を制御する「-m[no-]rdpru」フラグを追加しました。
  • 「-mfunction-return=thunk-extern」フラグを追加して、RETBLEED 脆弱性から保護しました。これは、間接ジャンプの投機的実行メカニズムの参加を除外する一連の命令を追加することによって機能します。

最後に あなたがそれについてもっと知りたいのなら、 あなたはで詳細を確認することができます 次のリンク。


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:AB Internet Networks 2008 SL
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。