LLVM 15.0 arriva con miglioramenti per diversi backend, maggiore supporto e altro ancora

LLVM 15 implementa miglioramenti del supporto

LLVM 15.0 include anche una serie di interessanti aggiornamenti a C/C++.

Dopo sei mesi di sviluppo, Annunciata la versione del progetto LLVM 15.0, in cui sono state apportate molte modifiche importanti, oltre a un supporto aggiuntivo per nuovi processori, architetture e altro ancora.

Per chi non ha familiarità con LLVM, dovresti sapere che questo è un compilatore compatibile con GCC (compilatori, ottimizzatori e generatori di codice) che compila i programmi in un bitcode intermedio di istruzione virtuale simile a RISC (una macchina virtuale di basso livello con un sistema di ottimizzazione multilivello).

Lo pseudocodice generato può essere convertito dal compilatore JIT in istruzioni macchina solo al momento dell'esecuzione del programma.

Principali novità di LLVM 15.0

In questa nuova versione che viene presentata, si evidenzia che il supporto per processori Cortex-M85, nonché per le architetture Armv9-A, Armv9.1-A e Armv9.2-A, estensioni Armv8.1-M PACBTI-M.

Un altro cambiamento che spicca è quello aggiunto un backend sperimentale DirectX che supporta il formato DXIL (DirectX Intermediate Language) utilizzato per gli shader DirectX. Il backend è abilitato tramite l'opzione di build "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX".

libc++ continua a implementare nuove funzionalità degli standard C++20 e C++2b, compreso il completamento dell'implementazione della libreria "format" e la proposta versione sperimentale della libreria "ranges".

Per la parte delle modifiche relative a Clang 15.0 si ricorda che aggiunto il supporto sperimentale per il linguaggio C-like HLSL (High-Level Shading Language), che viene utilizzato per scrivere shader a partire da DirectX 9, nonché per tradurre gli shader HLSL in formato binario DXIL (DirectX Intermediate Language) compatibile con DirectX 12, nonché nel formato SPIR -V utilizzato da Vulkan. Nel futuro, pianificare di implementare il supporto per il formato DXBC (DirectX Bytecode) utilizzato in DirectX 9-11. L'implementazione è fornita da Microsoft e si basa sul DirectX Shader Compiler, rilasciato nel 2017, costruito sulla base di LLVM 3.7.

Si dice anche che continua con il lavorare per supportare i futuri standard C2X e C++23. Implementato per il linguaggio C: l'attributo noreturn, le parole chiave false e true, il tipo _BitInt(N) per gli interi di una data profondità di bit, le macro *_WIDTH, il prefisso u8 per i caratteri UTF-8.

Inoltre, è stato implementato per C++: unione di moduli, Isolamento ABI dei membri della funzione, inizializzazione dinamica ordinata di variabili non locali nel modulo, operatori di indici multidimensionali, auto(x), variabili non letterali, goto ed etichette nelle funzioni dichiarate come constexpr, sequenze di escape delimitate, caratteri di escape denominati.

Per sistemi basati sull'architettura x86, aggiunto il flag "-fzero-call-used-regs", che fornisce l'azzeramento di tutti i registri della CPU utilizzati nella funzione prima di restituire il controllo dalla funzione. questa opzione protegge dalla fuga di dati di funzioni e ridurre di circa il 20% il numero di blocchi atti a creare dispositivi ROP (Return Oriented Programming) in exploit.

È stata implementata la randomizzazione della posizione di memoria delle strutture per il codice C, che complica l'estrazione dei dati dalle strutture in caso di sfruttamento delle vulnerabilità. La randomizzazione viene attivata e disattivata con gli attributi randomize_layout e no_randomize_layout e richiede che il seme sia impostato con il flag "-frandomize-layout-seed" o "-frandomize-layout-seed-file" per garantire build ripetibili.

Delle altre modifiche che risaltano:

  • Funzionalità estese relative al supporto OpenCL e OpenMP. Aggiunto supporto per l'estensione OpenCL cl_khr_subgroup_rotate.
  • Backend migliorati per architetture x86, PowerPC e RISC-V.
    Migliorate le capacità del linker LLD e del debugger LLDB.
  • Aggiunto il flag "-fstrict-flex-arrays=" » con cui è possibile controllare i limiti di un elemento soft array nelle strutture (Soft Array Members, un array di dimensioni indefinite all'estremità della struttura).
  • Aggiunta l'opzione "-warray-parameter" per avvertire di sovrascrivere funzioni con dichiarazioni di argomenti non corrispondenti associate a matrici di lunghezza fissa e variabile.
  • Migliorata la compatibilità con MSVC.
  • Aggiunto supporto per la "funzione #pragma e "#pragma alloc_text" forniti in MSVC.
  • Aggiunto supporto per i flag /JMC e /JMC compatibili con MSVC.
  • Aggiunto il flag "-m[no-]rdpru" per controllare l'uso dell'istruzione RDPRU, supportata dai processori AMD Zen2.
  • Aggiunto il flag "-mfunction-return=thunk-extern" per proteggersi dalla vulnerabilità RETBLEED, che funziona aggiungendo una sequenza di istruzioni che esclude la partecipazione del meccanismo di esecuzione speculativa per i salti indiretti.

Infine Se sei interessato a saperne di più, puoi controllare i dettagli nel file seguente link


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile del trattamento: AB Internet Networks 2008 SL
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.