LLVM 15.0 dolazi s poboljšanjima za različite pozadine, većom podrškom i više

LLVM 15 implementira poboljšanja podrške

LLVM 15.0 također uključuje niz zanimljivih ažuriranja za C/C++.

Nakon šest mjeseci razvoja, Najavljeno izdanje projekta LLVM 15.0, u kojem napravljeno je mnogo velikih promjena, kao i dodatnu podršku za nove procesore, arhitekture i više.

Za one koji nisu upoznati s LLVM-om, trebali biste znati da ovo je GCC kompatibilan prevodilac (kompilatori, optimizatori i generatori koda) koji kompajlira programe u srednji bit kod virtualnih instrukcija nalik RISC-u (virtualni stroj niske razine s višerazinskim optimizacijskim sustavom).

Generirani pseudokod JIT kompajler može pretvoriti u strojne instrukcije upravo u trenutku izvođenja programa.

Glavne nove značajke LLVM-a 15.0

U ovoj novoj verziji koja je predstavljena, naglašeno je da je podrška za Cortex-M85 procesore, kao i za Armv9-A, Armv9.1-A i Armv9.2-A arhitekture, Armv8.1-M PACBTI-M proširenja.

Druga promjena koja se ističe je ta dodao je eksperimentalni DirectX backend ovo podržava DXIL format (DirectX Intermediate Language) koji se koristi za DirectX shadere. Pozadina je omogućena putem opcije izgradnje "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX".

libc++ nastavlja implementirati nove značajke standarda C++20 i C++2b, uključujući dovršetak implementacije biblioteke "format" i predloženu eksperimentalnu verziju biblioteke "rasponi".

Za dio promjena koji se odnosi na Clang 15.0 navodi se da dodana eksperimentalna podrška za jezik sličan C-u HLSL (High-Level Shading Language), koji se koristi za pisanje shadera počevši od DirectX 9, kao i prevođenje HLSL shadera u DXIL (DirectX Intermediate Language) binarni format kompatibilan s DirectX 12, kao i SPIR format -V koji koristi Vulkan. U budućnosti, planiraju implementirati podršku za DXBC format (DirectX Bytecode) koji se koristi u DirectX 9-11. Implementaciju osigurava Microsoft, a temelji se na DirectX Shader Compiler-u, objavljenom 2017., izgrađenom na temelju LLVM 3.7.

Također se spominje da se nastavlja s raditi na podršci budućim standardima C2X i C++23. Implementirano za jezik C: atribut noreturn, ključne riječi false i true, tip _BitInt(N) za cijele brojeve zadane dubine bita, makronaredbe *_WIDTH, prefiks u8 za UTF-8 znakove.

Uz to, je implementiran za C++: spajanje modula, ABI izolacija funkcijskih članova, uređena dinamička inicijalizacija nelokalnih varijabli u modulu, višedimenzionalni indeksni operatori, auto(x), neliteralne varijable, goto i oznake u funkcijama deklariranim kao constexpr, razgraničene izlazne sekvence, imenovane izlazne znakove.

Za sustave temeljene na arhitekturi x86, dodana zastavica "-fzero-call-used-regs", koji osigurava nuliranje svih CPU registara koji se koriste u funkciji prije vraćanja kontrole iz funkcije. ovu opciju štiti od curenja podataka funkcija i smanjiti broj blokova prikladnih za stvaranje ROP (Return Oriented Programming) uređaja u eksploatacijama za oko 20%.

Implementirana je randomizacija memorijskih lokacija struktura za C kod, što komplicira ekstrakciju podataka iz struktura u slučaju iskorištavanja ranjivosti. Randomizacija se uključuje i isključuje s atributima randomize_layout i no_randomize_layout i zahtijeva da se početna vrijednost postavi s oznakom "-frandomize-layout-seed" ili "-frandomize-layout-seed-file" kako bi se osigurale ponovljive gradnje.

Od ostalih promjena koji se ističu:

  • Proširene mogućnosti koje se odnose na podršku za OpenCL i OpenMP. Dodana podrška za OpenCL proširenje cl_khr_subgroup_rotate.
  • Poboljšana pozadina za x86, PowerPC i RISC-V arhitekture.
    Poboljšani LLD povezivač i mogućnosti LLDB programa za ispravljanje pogrešaka.
  • Dodana zastavica "-fstrict-flex-arrays=" » s kojim možete kontrolirati granice mekog elementa niza u strukturama (Soft Array Members, niz neodređene veličine na kraju strukture).
  • Dodana opcija "-warray-parameter" za upozorenje o nadjačavanju funkcija s neusklađenim deklaracijama argumenata povezanih s nizovima fiksne i promjenjive duljine.
  • Poboljšana kompatibilnost s MSVC-om.
  • Dodana podrška za "#pragma funkciju i "#pragma alloc_text" u MSVC-u.
  • Dodana podrška za /JMC i /JMC oznake kompatibilne s MSVC-om.
  • Dodana je zastavica "-m[no-]rdpru" za kontrolu upotrebe instrukcije RDPRU, koju podržavaju AMD Zen2 procesori.
  • Dodana je zastavica "-mfunction-return=thunk-extern" za zaštitu od ranjivosti RETBLEED, koja radi dodavanjem niza instrukcija koje isključuju sudjelovanje spekulativnog mehanizma izvršavanja za neizravne skokove.

Konačno Ako vas zanima više o tome, pojedinosti možete provjeriti u sljedeći link.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Odgovoran za podatke: AB Internet Networks 2008 SL
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.