LLVM 15.0 stiže s poboljšanjima za različite pozadine, većom podrškom i još mnogo toga

LLVM 15 implementira poboljšanja podrške

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

Nakon šest meseci razvoja, Objavljeno je izdanje LLVM 15.0 projekta, u kojem napravljeno je mnogo velikih promjena, kao i dodatnu podršku za nove procesore, arhitekture i još mnogo toga.

Za one koji nisu upoznati sa LLVM-om, trebali biste znati da je ovo je GCC kompatibilan kompajler (kompajleri, optimizatori i generatori koda) koji kompajliraju programe u RISC-sličan virtuelni instrukcijski međubit kod (virtuelna mašina niskog nivoa sa višerazinskim sistemom optimizacije).

Generisani pseudokod može biti konvertovan od strane JIT kompajlera u mašinske instrukcije samo u vreme izvršavanja programa.

Glavne nove karakteristike LLVM 15.0

U ovoj novoj verziji koja je predstavljena, ističe se da podrška za Cortex-M85 procesore, kao i za Armv9-A, Armv9.1-A i Armv9.2-A arhitekture, Armv8.1-M PACBTI-M ekstenzije.

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

libc++ nastavlja sa implementacijom novih funkcija standarda C++20 i C++2b, uključujući završetak implementacije biblioteke "format" i predloženu eksperimentalnu verziju biblioteke "opsegovi".

Za dio izmjena koje se odnose na Clang 15.0 pominje se da dodana eksperimentalna podrška za C-sličan jezik HLSL (High-Level Shading Language), koji se koristi za pisanje shadera počevši od DirectX 9, kao i za prevođenje HLSL shadera u DirectX 12 kompatibilan DXIL (DirectX Intermediate Language) binarni format, kao i SPIR format -V koji koristi Vulkan. U budućnosti, planiraju implementaciju podrške za DXBC format (DirectX Bytecode) koji se koristi u DirectX 9-11. Implementaciju obezbeđuje Microsoft i zasniva se na DirectX Shader Compiler-u, objavljenom 2017. godine, izgrađenom na bazi LLVM 3.7.

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

Pored toga, implementirano za C++: spajanje modula, ABI izolacija članova funkcije, uređena dinamička inicijalizacija ne-lokalnih varijabli u modulu, multidimenzionalni indeksni operatori, auto(x), neliteralne varijable, goto i oznake u funkcijama deklariranim kao constexpr, razgraničene escape sekvence, imenovani izlazni znakovi.

Za sisteme bazirane na arhitekturi x86, dodana zastavica "-fzero-call-used-regs", koji omogućava 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 pogodnih za kreiranje ROP (Return Oriented Programming) uređaja u exploitima za oko 20%.

Primijenjena je randomizacija memorijske lokacije struktura za C kod, što komplikuje ekstrakciju podataka iz struktura u slučaju eksploatacije ranjivosti. Randomizacija se uključuje i isključuje pomoću atributa randomize_layout i no_randomize_layout i zahtijeva da se seed postavi sa zastavicom "-frandomize-layout-seed" ili "-frandomize-layout-seed-file" kako bi se osigurala ponovljiva izrada.

Od ostalih promjena koji se ističu:

  • Proširene mogućnosti vezane za OpenCL i OpenMP podršku. Dodata podrška za OpenCL ekstenziju cl_khr_subgroup_rotate.
  • Poboljšana pozadina za x86, PowerPC i RISC-V arhitekture.
    Poboljšane LLD linker i LLDB debugger mogućnosti.
  • Dodata oznaka "-fstrict-flex-arrays=" » pomoću kojih možete kontrolirati granice mekog elementa niza u strukturama (meki članovi niza, niz neodređene veličine na kraju strukture).
  • Dodata opcija "-warray-parameter" za upozorenje o nadjačavanju funkcija s neusklađenim deklaracijama argumenata povezanih s nizovima fiksne i promjenjive dužine.
  • Poboljšana kompatibilnost sa MSVC-om.
  • Dodata podrška za "#pragma funkciju i "#pragma alloc_text" u MSVC-u.
  • Dodata podrška za MSVC-kompatibilne /JMC i /JMC zastavice.
  • Dodata "-m[no-]rdpru" zastavica za kontrolu upotrebe RDPRU instrukcije, podržane od AMD Zen2 procesora.
  • Dodata je oznaka "-mfunction-return=thunk-extern" za zaštitu od RETBLEED ranjivosti, koja radi dodavanjem niza instrukcija koje isključuju učešće mehanizma spekulativnog izvršenja za indirektne skokove.

Konačno Ako ste zainteresirani da saznate više o tome, detalje možete provjeriti u sljedeći link.


Dodaj kao preferirani izvor na Googleu