LLVM 15.0 arrive avec des améliorations pour différents backends, un meilleur support et plus encore

LLVM 15 implémente des améliorations de prise en charge

LLVM 15.0 inclut également un certain nombre de mises à jour intéressantes de C/C++.

Après six mois de développement, Annonce de la sortie du projet LLVM 15.0dans lequel beaucoup de changements majeurs ont été apportés, ainsi qu'une prise en charge supplémentaire des nouveaux processeurs, architectures, etc.

Pour ceux qui ne connaissent pas LLVM, vous devez savoir que cela est un compilateur compatible GCC (compilateurs, optimiseurs et générateurs de code) qui compile les programmes dans un bitcode intermédiaire d'instruction virtuelle de type RISC (une machine virtuelle de bas niveau avec un système d'optimisation à plusieurs niveaux).

Le pseudocode généré peut être converti par le compilateur JIT en instructions machine juste au moment de l'exécution du programme.

Nouvelles fonctionnalités majeures de LLVM 15.0

Dans cette nouvelle version qui est présentée, il est mis en évidence que le prise en charge des processeurs Cortex-M85, ainsi que pour les architectures Armv9-A, Armv9.1-A et Armv9.2-A, les extensions Armv8.1-M PACBTI-M.

Un autre changement qui ressort est que ajout d'un backend DirectX expérimental Quoi prend en charge le format DXIL (DirectX Intermediate Language) utilisé pour les shaders DirectX. Le backend est activé via l'option de build "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX".

libc++ continue d'implémenter de nouvelles fonctionnalités des standards C++20 et C++2b, y compris l'achèvement de l'implémentation de la bibliothèque "format" et la version expérimentale proposée de la bibliothèque "ranges".

Pour la partie des modifications liées à Clang 15.0, il est mentionné que ajout de la prise en charge expérimentale du langage de type C HLSL (High-Level Shading Language), qui est utilisé pour écrire des shaders à partir de DirectX 9, ainsi que pour traduire les shaders HLSL au format binaire DXIL (DirectX Intermediate Language) compatible DirectX 12, ainsi qu'au format SPIR -V utilisé par Vulkan. Dans le futur, prévoient d'implémenter la prise en charge du format DXBC (Bytecode DirectX) utilisé dans DirectX 9-11. L'implémentation est fournie par Microsoft et est basée sur le compilateur DirectX Shader, sorti en 2017, construit sur la base de LLVM 3.7.

Il est également mentionné qu'il continue avec le travailler pour prendre en charge les futures normes C2X et C++23. Implémentés pour le langage C : l'attribut noreturn, les mots clés false et true, le type _BitInt(N) pour les entiers d'une résolution donnée, les macros *_WIDTH, le préfixe u8 pour les caractères UTF-8.

En plus de cela, a été implémenté pour C++ : fusion de modules, Isolation ABI des membres de la fonction, initialisation dynamique ordonnée des variables non locales dans le module, opérateurs d'index multidimensionnels, auto(x), variables non littérales, goto et étiquettes dans les fonctions déclarées comme constexpr, séquences d'échappement délimitées, caractères d'échappement nommés.

Pour les systèmes basĂ©s sur l'architecture x86, ajout du drapeau "-fzero-call-used-regs", qui fournit la remise Ă  zĂ©ro de tous les registres CPU utilisĂ©s dans la fonction avant de rendre le contrĂ´le de la fonction. cette option protège contre les fuites de donnĂ©es de fonctions et de rĂ©duire d'environ 20 % le nombre de blocs adaptĂ©s Ă  la crĂ©ation de dispositifs ROP (Return Oriented Programming) dans les exploits.

La randomisation de l'emplacement de la mémoire a été implémentée des structures pour le code C, ce qui complique l'extraction des données des structures en cas d'exploitation de vulnérabilités. La randomisation est activée et désactivée avec les attributs randomize_layout et no_randomize_layout, et nécessite que la graine soit définie avec l'indicateur "-frandomize-layout-seed" ou "-frandomize-layout-seed-file" pour garantir des versions reproductibles.

Des autres changements qui se démarquent:

  • FonctionnalitĂ©s Ă©tendues liĂ©es Ă  la prise en charge d'OpenCL et d'OpenMP. Ajout de la prise en charge de l'extension OpenCL cl_khr_subgroup_rotate.
  • Backends amĂ©liorĂ©s pour les architectures x86, PowerPC et RISC-V.
    Amélioration des capacités de l'éditeur de liens LLD et du débogueur LLDB.
  • Ajout du drapeau "-fstrict-flex-arrays=" » avec lequel vous pouvez contrĂ´ler les limites d'un Ă©lĂ©ment de tableau souple dans les structures (Soft Array Members, un tableau de taille indĂ©finie Ă  la fin de la structure).
  • Ajout de l'option "-warray-parameter" pour avertir du remplacement des fonctions avec des dĂ©clarations d'arguments incompatibles associĂ©es Ă  des tableaux de longueur fixe et variable.
  • CompatibilitĂ© amĂ©liorĂ©e avec MSVC.
  • Ajout de la prise en charge de la "fonction #pragma et "#pragma alloc_text" fournies dans MSVC.
  • Ajout de la prise en charge des indicateurs /JMC et /JMC compatibles MSVC.
  • Ajout de l'indicateur "-m[no-]rdpru" pour contrĂ´ler l'utilisation de l'instruction RDPRU, prise en charge par les processeurs AMD Zen2.
  • Ajout du drapeau "-mfunction-return=thunk-extern" pour se protĂ©ger contre la vulnĂ©rabilitĂ© RETBLEED, qui fonctionne en ajoutant une sĂ©quence d'instructions qui exclut la participation du mĂ©canisme d'exĂ©cution spĂ©culative pour les sauts indirects.

Enfin Si vous souhaitez en savoir plus, vous pouvez vérifier les détails dans le lien suivant


Ajouter comme source préférée