LLVM 15.0 přichází s vylepšeními pro různé backendy, větší podporou a dalšími

LLVM 15 implementuje vylepšení podpory

LLVM 15.0 také obsahuje řadu zajímavých aktualizací C/C++.

Po šesti měsících vývoje Bylo oznámeno vydání projektu LLVM 15.0, ve kterém došlo k mnoha zásadním změnám, stejně jako přidaná podpora pro nové procesory, architektury a další.

Pro ty, kteří nejsou obeznámeni s LLVM, měli byste vědět, že toto je kompilátor kompatibilní s GCC (kompilátory, optimalizátory a generátory kódu), který kompiluje programy do virtuálního instrukčního intermediálního bitkódu podobného RISC (nízkoúrovňový virtuální stroj s víceúrovňovým optimalizačním systémem).

Vygenerovaný pseudokód je možné převést kompilátorem JIT na strojové instrukce právě v době provádění programu.

Hlavní nové funkce LLVM 15.0

V této nové verzi, která je prezentována, je zdůrazněno, že podpora procesorů Cortex-M85, stejně jako pro architektury Armv9-A, Armv9.1-A a Armv9.2-A, rozšíření Armv8.1-M PACBTI-M.

Další změna, která vyniká, je ta přidán experimentální rozhraní DirectX že podporuje formát DXIL (DirectX Intermediate Language) používaný pro DirectX shadery. Backend je povolen prostřednictvím možnosti sestavení "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX".

libc++ pokračuje v implementaci nových funkcí standardů C++20 a C++2b, včetně dokončení implementace knihovny "formát" a navržené experimentální verze knihovny "rozsahy".

U části změn souvisejících s Clang 15.0 je zmíněno, že přidána experimentální podpora pro jazyk podobný C HLSL (High-Level Shading Language), který se používá pro psaní shaderů počínaje DirectX 9 a také pro překlad shaderů HLSL do binárního formátu DXIL (DirectX Intermediate Language) kompatibilního s DirectX 12 a také do formátu SPIR -V používaného společností Vulkan. V budoucnu, plán implementovat podporu formátu DXBC (DirectX Bytecode) používaný v DirectX 9-11. Implementaci zajišťuje Microsoft a je založena na DirectX Shader Compiler, vydaném v roce 2017, postaveném na bázi LLVM 3.7.

Je také zmíněno, že pokračuje s pracovat na podpoře budoucích standardů C2X a C++23. Implementováno pro jazyk C: atribut noreturn, klíčová slova false a true, typ _BitInt(N) pro celá čísla dané bitové hloubky, makra *_WIDTH, předpona u8 pro znaky UTF-8.

Kromě toho bylo implementováno pro C++: sloučení modulů, ABI izolace funkčních členů, uspořádaná dynamická inicializace nelokálních proměnných v modulu, vícerozměrné indexové operátory, auto(x), non-literal variables, goto a labels ve funkcích deklarovaných jako constexpr, oddělené escape sekvence, pojmenované escape znaky.

Pro systémy založené na architektuře x86, přidán příznak "-fzero-call-used-regs", který poskytuje vynulování všech CPU registrů použitých ve funkci před vrácením řízení z funkce. tuto možnost chrání před únikem dat funkcí a snížit počet bloků vhodných pro vytváření zařízení ROP (Return Oriented Programming) v exploitech asi o 20 %.

Byla implementována randomizace umístění paměti struktur pro C kód, což komplikuje extrakci dat ze struktur v případě zneužití zranitelností. Randomizace se zapíná a vypíná pomocí atributů randomize_layout a no_randomize_layout a vyžaduje, aby byl seed nastaven s příznakem „-frandomize-layout-seed“ nebo „-frandomize-layout-seed-file“, aby byla zajištěna opakovatelná sestavení.

Z dalších změn které vynikají:

  • Rozšířené možnosti související s podporou OpenCL a OpenMP. Přidána podpora pro rozšíření OpenCL cl_khr_subgroup_rotate.
  • Vylepšené backendy pro architektury x86, PowerPC a RISC-V.
    Vylepšený LLD linker a LLDB debugger schopnosti.
  • Přidán příznak "-fstrict-flex-arrays=" » pomocí kterého můžete ovládat limity prvku měkkého pole ve strukturách (Členy měkkého pole, pole neurčité velikosti na konci struktury).
  • Přidána možnost "-warray-parameter" pro varování před přepisujícími funkcemi s neodpovídajícími deklaracemi argumentů spojenými s poli s pevnou a proměnnou délkou.
  • Vylepšená kompatibilita s MSVC.
  • Přidána podpora pro "funkce #pragma a "#pragma alloc_text" poskytované v MSVC.
  • Přidána podpora pro příznaky /JMC a /JMC kompatibilní s MSVC.
  • Přidán příznak "-m[no-]rdpru" pro řízení použití instrukce RDPRU, podporované procesory AMD Zen2.
  • Přidán příznak "-mfunction-return=thunk-extern" na ochranu před zranitelností RETBLEED, která funguje přidáním sekvence instrukcí, která vylučuje účast mechanismu spekulativního provádění pro nepřímé skoky.

Konečně Máte-li zájem o tom vědět více, můžete zkontrolovat podrobnosti v následující odkaz.


Přidat jako preferovaný zdroj v Googlu