Útgáfa af LLVM 15.0 þýðandasvítunni

Eftir sex mánaða þróun var útgáfa LLVM 15.0 verkefnisins kynnt - GCC-samhæfð verkfærasett (þýðendur, hagræðingartæki og kóðaframleiðendur) sem safnar saman forritum í millibitakóða af RISC-líkum sýndarleiðbeiningum (lágmarks sýndarvél með hagræðingarkerfi á mörgum stigum). Hægt er að breyta gervikóðanum sem myndast með JIT þýðanda í vélaleiðbeiningar beint á þeim tíma sem forritið er keyrt.

Helstu endurbætur í Clang 15.0:

  • Fyrir kerfi sem byggjast á x86 arkitektúrnum hefur „-fzero-call-used-regs“ fánanum verið bætt við, sem tryggir að allar örgjörvaskrár sem notaðar eru í aðgerðinni séu núllstilltar áður en stjórn er skilað frá aðgerðinni. Þessi valkostur gerir þér kleift að verjast upplýsingaleka frá aðgerðum og fækka blokkum sem henta til að byggja ROP (Return-Oriented Programming) græjur í hetjudáð um það bil 20%.
  • Slembiröðun á minnisstaðsetningu mannvirkja fyrir C kóða hefur verið innleidd, sem torveldar útdrátt gagna úr mannvirkjum ef veikleikar eru nýttir. Slembival er kveikt og slökkt með því að nota randomize_layout og no_randomize_layout eigindirnar og krefst þess að setja fræ með því að nota "-randomize-layout-seed" eða "-randomize-layout-seed-file" fánann.
  • Bætt við "-fstrict-flex-arrays=" fána ", þar sem þú getur stjórnað mörkum fyrir sveigjanlegan fylkisþátt í mannvirkjum (Flexible Array Members, fylki af óákveðinni stærð í lok byggingarinnar). Þegar stillt er á 0 (sjálfgefið), er síðasti þátturinn í uppbyggingu með fylki alltaf unnin sem sveigjanlegt fylki, 1 - aðeins stærðir [], [0] og [1] eru unnar sem sveigjanlegt fylki, 2 - aðeins stærðir [] og [0] eru unnin eins og sveigjanlegt fylki.
  • Bætti við tilraunastuðningi fyrir C-líka tungumálið HLSL (High-Level Shader Language), notað í DirectX til að skrifa skyggingar.
  • Bætt við „-Warray-parameter“ til að vara við því að hnekkja föllum með ósamrýmanlegum rökstuðningsyfirlýsingum sem tengjast fylkjum með fastri og breytilegri lengd.
  • Bætt samhæfni við MSVC. Bætti við stuðningi við "#pragma aðgerð" (skipar þýðandanum að búa til fallkall í stað innbyggðrar stækkunar) og "#pragma alloc_text" (skilgreinir nafn hlutans með aðgerðakóðanum) sem gefinn er upp í MSVC. Bætti við stuðningi við MSVC-samhæfða /JMC og /JMC fána.
  • Vinna heldur áfram að styðja framtíðar C2X og C++23 staðla. Fyrir C tungumálið er eftirfarandi útfært: noreturn eigindin, lykilorðin ósatt og satt, _BitInt(N) tegundin fyrir heiltölur af tiltekinni bitadýpt, *_WIDTH fjölva, u8 forskeytið fyrir UTF-8 kóðaða stafi.

    Fyrir C++ er eftirfarandi útfært: sameining eininga, ABI einangrun aðgerðameðlima, röðuð kraftmikil frumstilling á óstaðbundnum breytum í einingum, fjölvíddar vísitöluaðgerðir, sjálfvirk(x), óbókstafsbreytur, goto og merki í föllum sem lýst er yfir sem constexpr , afmarkaðar flóttaraðir, nefndir flóttastafir.

  • Möguleikarnir sem tengjast OpenCL og OpenMP stuðningi hafa verið auknir. Bætti við stuðningi við OpenCL viðbótina cl_khr_subgroup_rotate.
  • Fyrir x86 arkitektúrinn hefur verið bætt við vörn gegn varnarleysi í örgjörvum sem stafar af íhugandi framkvæmd leiðbeininga eftir skilyrðislausar framstökkaðgerðir. Vandamálið kemur upp vegna forvirkrar vinnslu leiðbeininga strax í kjölfar útibúsleiðbeiningar í minni (SLS, Straight Line Speculation). Til að virkja vernd er valmöguleikinn „-mharden-sls=[none|all|return|indirect-jmp]“ lagður til.
  • Fyrir palla sem styðja SSE2 viðbótina hefur _Float16 gerðinni verið bætt við, sem er líkt eftir með því að nota flotgerðina ef stuðningur fyrir AVX512-FP16 leiðbeiningar skortir.
  • Bætt við "-m[no-]rdpru" fána til að stjórna notkun RDPRU leiðbeininganna, studd frá og með AMD Zen2 örgjörvum.
  • Bætti við "-mfunction-return=thunk-extern" fánanum til að vernda gegn RETBLEED varnarleysinu, sem virkar með því að bæta við röð leiðbeininga sem útilokar þátttöku íhugandi framkvæmdarkerfis fyrir óbein útibú.

Helstu nýjungar í LLVM 15.0:

  • Bætti við stuðningi við Cortex-M85 CPU, Armv9-A, Armv9.1-A og Armv9.2-A arkitektúr, Armv8.1-M PACBTI-M viðbætur.
  • Tilraunabakendi fyrir DirectX hefur verið bætt við sem styður DXIL (DirectX Intermediate Language) sniðið sem notað er fyrir DirectX shaders. Bakendinn er virkjaður með því að tilgreina „-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX“ færibreytuna við samsetningu.
  • Libc++ heldur áfram að innleiða nýja eiginleika C++20 og C++2b staðlanna, þar á meðal að ljúka innleiðingu á „sniði“ bókasafninu og fyrirhugaðri tilraunaútgáfu „sviðs“ bókasafnsins.
  • Bættur stuðningur fyrir x86, PowerPC og RISC-V arkitektúr.
  • Geta LLD tengilinn og LLDB kembiforritsins hefur verið aukin.

Heimild: opennet.ru

Bæta við athugasemd