Liberasyon LLVM 15.0 konpilatè suite a

Apre sis mwa nan devlopman, yo te prezante liberasyon pwojè LLVM 15.0 la - yon zouti ki konpatib ak GCC (konpilateur, optimisateur ak jeneratè kòd) ki konpile pwogram yo nan bitkod entèmedyè enstriksyon vityèl ki tankou RISC (yon machin vityèl ki ba nivo ak yon sistèm optimize milti-nivo). Pseudokod pwodwi a ka konvèti lè l sèvi avèk yon du JIT nan enstriksyon machin dirèkteman nan moman ekzekisyon pwogram lan.

Gwo amelyorasyon nan Clang 15.0:

  • Pou sistèm ki baze sou achitekti x86, drapo "-fzero-call-used-regs" te ajoute, ki asire ke tout rejis CPU yo itilize nan fonksyon an reset a zewo anvan yo retounen kontwòl nan fonksyon an. Opsyon sa a pèmèt ou pwoteje kont flit enfòmasyon ki soti nan fonksyon epi redwi kantite blòk apwopriye pou bati gadjèt ROP (Return-Oriented Programming) nan exploit pa apeprè 20%.
  • Yo te aplike randomization nan plasman memwa nan estrikti pou kòd C, ki konplike ekstraksyon nan done ki soti nan estrikti nan evènman an nan eksplwatasyon nan frajilite. Yo aktive e etenn randomization lè l sèvi avèk atribi randomize_layout ak no_randomize_layout, epi li mande pou mete yon grenn lè l sèvi avèk drapo "-frandomize-layout-seed" oswa "-frandomize-layout-seed-file".
  • Te ajoute "-fstrict-flex-arrays=" drapo ", ak ki ou ka kontwole limit yo pou yon eleman etalaj fleksib nan estrikti (Flexible Array Members, yon etalaj nan gwosè endefini nan fen estrikti a). Lè yo mete sou 0 (default), dènye eleman estrikti a ak yon etalaj toujou trete kòm yon etalaj fleksib, 1 - sèlman gwosè [], [0] ak [1] yo trete kòm yon etalaj fleksib, 2 - gwosè sèlman. [] ak [0] yo trete tankou yon etalaj fleksib.
  • Te ajoute sipò eksperimantal pou langaj ki sanble ak C HLSL (High-Level Shader Language), yo itilize nan DirectX pou ekri shaders.
  • Te ajoute "-Warray-parameter" pou avèti sou fonksyon plis pase ak deklarasyon agiman enkonpatib ki asosye ak etalaj longè fiks ak varyab.
  • Amelyore konpatibilite ak MSVC. Te ajoute sipò pou "fonksyon #pragma" (enstwi du pou jenere yon apèl fonksyon olye pou yo ekspansyon inline) ak "#pragma alloc_text" (defini non an nan seksyon an ak kòd fonksyon an) bay nan MSVC. Te ajoute sipò pou MSVC-konpatib /JMC ak drapo /JMC.
  • Travay ap kontinye sipòte pwochen estanda C2X ak C++23. Pou langaj C a, sa ki annapre yo aplike: atribi noreturn, mo kle yo fo ak vre, kalite _BitInt(N) pou nonm antye ki gen yon pwofondè bit bay, makro *_WIDTH, prefiks u8 pou karaktè kode UTF-8.

    Pou C++, sa ki annapre yo aplike: fizyon modil, izolasyon ABI manm fonksyon yo, inisyalizasyon dinamik òdone varyab ki pa lokal yo nan modil, operatè endèks miltidimansyonèl, oto(x), varyab ki pa literal, goto ak etikèt nan fonksyon yo deklare kòm konstexpr. , sekans chape delimite, karaktè chape yo te rele.

  • Kapasite ki asosye ak sipò OpenCL ak OpenMP yo te elaji. Te ajoute sipò pou ekstansyon OpenCL cl_khr_subgroup_rotate.
  • Pou achitekti x86 la, yo te ajoute pwoteksyon kont frajilite nan processeurs ki te koze pa ekzekisyon spéculatif nan enstriksyon apre operasyon so devan san kondisyon. Pwoblèm nan rive akòz tretman prevantif nan enstriksyon imedyatman apre enstriksyon branch nan memwa (SLS, Straight Line Speculation). Pou pèmèt pwoteksyon, opsyon "-mharden-sls=[none|all|return|indirect-jmp]" yo pwopoze.
  • Pou platfòm ki sipòte ekstansyon SSE2 a, yo te ajoute kalite _Float16, ki imite lè l sèvi avèk kalite flote a nan ka mank sipò pou enstriksyon AVX512-FP16.
  • Te ajoute drapo "-m[no-]rdpru" pou kontwole itilizasyon ansèyman RDPRU, sipòte kòmanse avèk processeurs AMD Zen2.
  • Te ajoute drapo "-mfunction-return=thunk-extern" pou pwoteje kont vilnerabilite RETBLEED, ki travay lè yo ajoute yon sekans enstriksyon ki eskli patisipasyon mekanis ekzekisyon spéculatif pou branch endirèk yo.

Inovasyon kle nan LLVM 15.0:

  • Te ajoute sipò pou Cortex-M85 CPU, Armv9-A, Armv9.1-A ak Armv9.2-A achitekti, ekstansyon Armv8.1-M PACBTI-M.
  • Yo te ajoute yon backend eksperimantal pou DirectX ki sipòte fòma DXIL (DirectX Intermediate Language) yo itilize pou shaders DirectX. Backend la pèmèt lè w espesifye paramèt "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" pandan asanble a.
  • Libc++ kontinye aplike nouvo karakteristik estanda C++20 ak C++2b, tankou fini aplikasyon bibliyotèk "fòma" ak vèsyon eksperimantal pwopoze bibliyotèk "ranje".
  • Backends amelyore pou achitekti x86, PowerPC ak RISC-V.
  • Kapasite LLD Linker ak debugger LLDB yo te amelyore.

Sous: opennet.ru

Add nouvo kòmantè