LLVM 15.0 kommer med forbedringer for forskjellige backends, større støtte og mer

LLVM 15 implementerer støtteforbedringer

LLVM 15.0 inkluderer også en rekke interessante oppdateringer til C/C++.

Etter seks måneders utvikling, LLVM 15.0 prosjektutgivelse annonsert, der mange store endringer er gjort, samt ekstra støtte for nye prosessorer, arkitekturer og mer.

For de som ikke er kjent med LLVM, bør du vite at dette er en GCC-kompatibel kompilator (kompilatorer, optimerere og kodegeneratorer) som kompilerer programmer til en RISC-lignende mellombitkode for virtuell instruksjon (en virtuell maskin på lavt nivå med et optimaliseringssystem på flere nivåer).

Den genererte pseudokoden kan konverteres av JIT-kompilatoren til maskininstruksjoner akkurat på tidspunktet for programkjøring.

Viktigste nye funksjoner i LLVM 15.0

I denne nye versjonen som presenteres, fremheves det at støtte for Cortex-M85-prosessorer, samt for Armv9-A, Armv9.1-A og Armv9.2-A arkitekturer, Armv8.1-M PACBTI-M utvidelser.

En annen endring som skiller seg ut er at la til en eksperimentell DirectX-backend que støtter DXIL-format (DirectX Intermediate Language) brukt for DirectX shaders. Backend er aktivert via "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" byggealternativet.

libc++ fortsetter å implementere nye funksjoner av C++20- og C++2b-standardene, inkludert fullføringen av "format"-biblioteksimplementeringen og den foreslåtte eksperimentelle versjonen av "ranges"-biblioteket.

For den delen av endringene knyttet til Clang 15.0 er det nevnt at lagt til eksperimentell støtte for C-lignende språk HLSL (High-Level Shading Language), som brukes til å skrive shaders som starter med DirectX 9, samt oversette HLSL shaders til DirectX 12-kompatibelt DXIL (DirectX Intermediate Language) binært format, samt SPIR-format -V brukt av Vulkan. I fremtiden, planlegger å implementere støtte for DXBC-formatet (DirectX Bytecode) brukt i DirectX 9-11. Implementeringen er levert av Microsoft og er basert på DirectX Shader Compiler, utgitt i 2017, bygget på grunnlag av LLVM 3.7.

Det nevnes også at det fortsetter med arbeide for å støtte fremtidige C2X- og C++23-standarder. Implementert for C-språket: noreturn-attributtet, falske og sanne nøkkelord, _BitInt(N)-typen for heltall med en gitt bitdybde, *_WIDTH-makroene, u8-prefikset for UTF-8-tegn.

I tillegg til det, har blitt implementert for C++: modulsammenslåing, ABI-isolering av funksjonsmedlemmer, bestilt dynamisk initialisering av ikke-lokale variabler i modulen, flerdimensjonale indeksoperatorer, auto(x), ikke-litterale variabler, goto og etiketter i funksjoner deklarert som constexpr, avgrensede escape-sekvenser, navngitte escape-tegn.

For systemer basert på arkitekturen x86, la til flagget "-fzero-call-used-regs", som gir nullstilling av alle CPU-registre som brukes i funksjonen før kontroll returneres fra funksjonen. dette alternativet beskytter mot datalekkasje av funksjoner og redusere antall blokker som er egnet for å lage ROP (Return Oriented Programming)-enheter i utnyttelser med omtrent 20 %.

Randomisering av minneplassering er implementert av strukturene for C-kode, noe som kompliserer utvinning av data fra strukturene i tilfelle utnyttelse av sårbarheter. Randomisering slås på og av med attributtene randomize_layout og no_randomize_layout, og krever at frøet settes med flagget "-frandomize-layout-seed" eller "-frandomize-layout-seed-file" for å sikre repeterbare bygg.

Av de andre endringene som skiller seg ut:

  • Utvidede muligheter knyttet til OpenCL- og OpenMP-støtte. Lagt til støtte for OpenCL-utvidelsen cl_khr_subgroup_rotate.
  • Forbedrede backends for x86-, PowerPC- og RISC-V-arkitekturer.
    Forbedret LLD linker og LLDB debugger evner.
  • Lagt til flagget "-fstrict-flex-arrays=" » som du kan kontrollere grensene for et mykt array-element i strukturer (Soft Array Members, en array av ubestemt størrelse på slutten av strukturen).
  • Lagt til "-warray-parameter"-alternativet for å advare om overstyrende funksjoner med feilaktige argumenterklæringer knyttet til matriser med fast og variabel lengde.
  • Forbedret kompatibilitet med MSVC.
  • Lagt til støtte for "#pragma-funksjonen og "#pragma alloc_text" gitt i MSVC.
  • Lagt til støtte for MSVC-kompatible /JMC- og /JMC-flagg.
  • Lagt til "-m[no-]rdpru"-flagg for å kontrollere bruken av RDPRU-instruksjonen, støttet fra AMD Zen2-prosessorer.
  • Lagt til "-mfunction-return=thunk-extern"-flagget for å beskytte mot RETBLEED-sårbarheten, som fungerer ved å legge til en sekvens av instruksjoner som utelukker deltakelse av den spekulative utførelsesmekanismen for indirekte hopp.

Endelig Hvis du er interessert i å vite mer om det, kan du sjekke detaljene i følgende lenke.


Bli den første til å kommentere

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: AB Internet Networks 2008 SL
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.