LLVM 15.0 arriba amb millores per a diferents backend, més suport i més

LLVM 15 implementa millores de suport

LLVM 15.0 també inclou una sèrie d'actualitzacions força interessants per a C/C++

Després de sis mesos de desenvolupament, es va donar a conèixer el llançament del projecte LLVM 15.0, En el qual s'han realitzat una gran quantitat de canvis importants, així com també que s'hi ha afegit el suport per a nous processadors, arquitectures i més.

Per als que desconeixen de LLVM, han de saber que aquest és un compilador compatible amb GCC (compiladors, optimitzadors i generadors de codi) que compila programes en un codi de bits intermedi d'instruccions virtuals tipus RISC (una màquina virtual de baix nivell amb un sistema d'optimització multinivell).

El pseudocodi generat pot ser convertit pel compilador JIT en instruccions de màquina just al moment de l'execució del programa.

Principals novetats de LLVM 15.0

En aquesta nova versió que es presenta es destaca que es va afegir el suport per als processadors Cortex-M85, així com per les arquitectures Armv9-A, Armv9.1-A i Armv9.2-A, extensions Armv8.1-M PACBTI-M.

Un altre dels canvis que es destaca és que s'ha afegit un backend experimental de DirectX que admet el format DXIL (DirectX Intermediate Language) utilitzat per als ombrejadors de DirectX. El backend s'habilita mitjançant l'opció de compilació "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX".

Libc++ continua implementant noves funcions dels estàndards C++20 i C++2b, inclosa la finalització de la implementació de la biblioteca format i la versió experimental proposada de la biblioteca ranges.

Per la part dels canvis relacionats amb Clang 15.0 s'esmenta que es va afegir suport experimental per al llenguatge similar a C HLSL (Llenguatge d'ombreig d'alt nivell), que s'usa per escriure ombrejadors a partir de DirectX 9, així com també la traducció d'ombrejadors HLSL al format binari DXIL (Llenguatge intermedi de DirectX) compatible amb DirectX 12, així com en el format SPIR -V utilitzat per Vulkan. En el futur, planegen implementar suport per al format DXBC (DirectX Bytecode) utilitzat a DirectX 9-11. La implementació la proporciona Microsoft i es basa en el compilador DirectX Shader Compiler, obert el 2017, creat sobre la base de LLVM 3.7.

També s'esmenta que es continua amb el treball per admetre futurs estàndards C2X i C++23. Implementat per al llenguatge C: l'atribut noreturn , les paraules clau false i true, el tipus _BitInt(N) per a enters d'una profunditat de bits donada, les macros *_WIDTH , el prefix u8 per a caràcters UTF-8.

A més d'això, s'ha implementat per a C++: fusió de mòduls, aïllament ABI de membres de funcions, inicialització dinàmica ordenada de variables no locals en mòdul, operadors d'índexs multidimensionals, auto(x), variables no literals, goto i etiquetes en funcions declarades com a constexpr, seqüències d'escapament delimitades, caràcters d'escapament amb nom.

Per als sistemes basats en l'arquitectura x86, es va afegir l'indicador «-fzero-call-used-regs», que proporciona la posada a zero de tots els registres de la CPU utilitzats en la funció abans de tornar el control des de la funció. Aquesta opció permet protegir-se contra la fugida d'informació de les funcions i reduir la quantitat de blocs adequats per crear dispositius ROP (programació orientada al retorn) en exploits en aproximadament un 20%.

S'ha implementat l'aleatorització de la ubicació de la memòria de les estructures per al codi C, cosa que complica l'extracció de dades de les estructures en cas d'explotació de vulnerabilitats. L'aleatorització s'activa i desactiva amb els atributs randomize_layout i no_randomize_layout, i requereix que la llavor es configuri amb l'indicador “-frandomize-layout-seed” o “-frandomize-layout-seed-file” per garantir compilacions repetibles.

Dels altres canvis que es destaquen:

  • Capacitats ampliades relacionades amb la compatibilitat amb OpenCL i OpenMP. S'ha afegit suport per a l'extensió d'OpenCL cl_khr_subgroup_rotate.
  • Backends millorats per a arquitectures x86, PowerPC i RISC-V.
    Capacitats millorades de l'enllaçador LLD i el depurador LLDB.
  • S'ha afegit l'indicador «-fstrict-flex-arrays= » amb què podeu controlar els límits d'un element de matriu flexible en estructures (Membres de matriu flexibl, una matriu de mida indefinida al final de l'estructura).
  • S'ha afegit l'opció -Warray-parameter per advertir sobre l'anul·lació de funcions amb declaracions d'arguments no coincidents associades amb matrius de longitud fixa i variable.
  • Compatibilitat millorada amb MSVC.
  • S'ha afegit suport per a la funció #pragma i #pragma alloc_text proporcionada a MSVC.
  • S'ha afegit suport per a banderes /JMC i /JMC compatibles amb MSVC.
  • S'ha afegit l'indicador -m[no-]rdpru per controlar l'ús de la instrucció RDPRU, compatible des dels processadors AMD Zen2.
  • S'ha afegit l'indicador -mfunction-return=thunk-extern per protegir contra la vulnerabilitat RETBLEED , que funciona afegint una seqüència d'instruccions que exclou la participació del mecanisme d'execució especulativa per a salts indirectes.

Finalment si estàs interessat en poder conèixer més a l'respecte, pots consultar els detalls al següent enllaç.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: AB Internet Networks 2008 SL
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.