Rhyddhau'r gyfres casglu LLVM 15.0

Ar ôl chwe mis o ddatblygiad, cyflwynwyd rhyddhau'r prosiect LLVM 15.0 - pecyn cymorth sy'n gydnaws â'r GCC (casglu, optimeiddio a generaduron cod) sy'n crynhoi rhaglenni i god did canolradd o gyfarwyddiadau rhithwir tebyg i RISC (peiriant rhithwir lefel isel gyda a system optimeiddio aml-lefel). Gellir trosi'r ffuggod a gynhyrchir gan ddefnyddio casglwr JIT yn gyfarwyddiadau peiriant yn uniongyrchol ar adeg gweithredu'r rhaglen.

Gwelliannau mawr yn Clang 15.0:

  • Ar gyfer systemau sy'n seiliedig ar bensaernïaeth x86, mae'r faner “-fzero-call-used-regs” wedi'i hychwanegu, sy'n sicrhau bod yr holl gofrestrau CPU a ddefnyddir yn y swyddogaeth yn cael eu hailosod i sero cyn dychwelyd rheolaeth o'r swyddogaeth. Mae'r opsiwn hwn yn eich galluogi i amddiffyn rhag gollwng gwybodaeth o swyddogaethau a lleihau'r nifer o flociau sy'n addas ar gyfer adeiladu teclynnau ROP (Rhaglen sy'n Canolbwyntio ar Ddychwelyd) mewn campau tua 20%.
  • Mae hap-leoli strwythurau cof ar gyfer cod C wedi'i roi ar waith, sy'n cymhlethu echdynnu data o strwythurau pe bai gwendidau'n cael eu hecsbloetio. Mae hapnodi yn cael ei droi ymlaen ac i ffwrdd gan ddefnyddio'r priodoleddau randomize_layout a no_randomize_layout, ac mae angen gosod hedyn gan ddefnyddio'r faner "-frandomize-layout-seed" neu "-frandomize-layout-seed-file".
  • Ychwanegwyd y faner "-fstrict-flex-arrays=", y gallwch reoli'r ffiniau ar gyfer yr elfen arae hyblyg mewn strwythurau â hi (Aelodau Arae Hyblyg, amrywiaeth o faint amhenodol ar ddiwedd y strwythur). Pan gaiff ei osod i 0 (diofyn), mae elfen olaf y strwythur gydag arae bob amser yn cael ei phrosesu fel arae hyblyg, 1 - dim ond meintiau [], [0] a [1] sy'n cael eu prosesu fel arae hyblyg, 2 - meintiau yn unig [] a [0] yn cael eu prosesu fel arae hyblyg.
  • Ychwanegwyd cefnogaeth arbrofol ar gyfer yr iaith tebyg i C HLSL (Iaith Lliwydd Lefel Uchel), a ddefnyddir yn DirectX ar gyfer ysgrifennu graddwyr.
  • Ychwanegwyd "-Warray-parameter" i rybuddio am swyddogaethau gor-redol gyda datganiadau dadl anghydnaws yn gysylltiedig ag araeau hyd sefydlog ac amrywiol.
  • Gwell cydnawsedd â MSVC. Cefnogaeth ychwanegol ar gyfer "#pragma function" (yn cyfarwyddo'r casglwr i gynhyrchu galwad ffwythiant yn lle ehangiad mewnol) a "#pragma alloc_text" (yn diffinio enw'r adran gyda'r cod swyddogaeth) a ddarperir yn MSVC. Cefnogaeth ychwanegol ar gyfer baneri sy'n gydnaws â MSVC / JMC a / JMC.
  • Mae gwaith yn parhau i gefnogi safonau C2X a C++23 yn y dyfodol. Ar gyfer yr iaith C, gweithredir y canlynol: y priodoledd noreturn, y geiriau allweddol ffug a gwir, y math _BitInt(N) ar gyfer cyfanrifau o ddyfnder did penodol, *_WIDTH macros, y rhagddodiad u8 ar gyfer nodau wedi'u hamgodio UTF-8.

    Ar gyfer C++, mae'r canlynol yn cael eu gweithredu: uno modiwlau, ynysu aelodau swyddogaeth ABI, cychwyniad deinamig o newidynnau nad ydynt yn lleol mewn modiwlau, gweithredwyr mynegai aml-ddimensiwn, auto(x), newidynnau anllythrennol, goto a labeli mewn swyddogaethau a ddatganwyd fel constexpr , dilyniannau dianc wedi'u hamffinio, cymeriadau dianc a enwir.

  • Mae'r galluoedd sy'n gysylltiedig â chymorth OpenCL ac OpenMP wedi'u hehangu. Ychwanegwyd cefnogaeth i'r estyniad OpenCL cl_khr_subgroup_rotate.
  • Ar gyfer pensaernïaeth x86, mae amddiffyniad wedi'i ychwanegu rhag gwendidau mewn proseswyr a achosir trwy weithredu cyfarwyddiadau ar hap ar ôl gweithrediadau neidio ymlaen diamod. Mae'r broblem yn digwydd o ganlyniad i brosesu cyfarwyddiadau rhagataliol yn syth ar ôl y cyfarwyddyd cangen er cof (SLS, Straight Line Speculation). Er mwyn galluogi amddiffyniad, cynigir yr opsiwn “-mharden-sls=[dim|all|dychwelyd|anuniongyrchol-jmp]”.
  • Ar gyfer llwyfannau sy'n cefnogi'r estyniad SSE2, mae'r math _Float16 wedi'i ychwanegu, sy'n cael ei efelychu gan ddefnyddio'r math arnofio yn achos diffyg cefnogaeth i gyfarwyddiadau AVX512-FP16.
  • Ychwanegwyd baner "-m[no-]rdpru" i reoli'r defnydd o'r cyfarwyddyd RDPRU, wedi'i gefnogi gan ddechrau gyda phroseswyr AMD Zen2.
  • Ychwanegwyd y faner "-mfunction-return=thunk-extern" i amddiffyn rhag y bregusrwydd RETBLEED, sy'n gweithio trwy ychwanegu dilyniant o gyfarwyddiadau sy'n eithrio ymglymiad y mecanwaith gweithredu hapfasnachol ar gyfer canghennau anuniongyrchol.

Datblygiadau arloesol allweddol yn LLVM 15.0:

  • Cefnogaeth ychwanegol ar gyfer pensaernïaeth Cortex-M85 CPU, Armv9-A, Armv9.1-A ac Armv9.2-A, estyniadau Armv8.1-M PACBTI-M.
  • Ychwanegwyd ôl-wyneb arbrofol ar gyfer DirectX sy'n cefnogi'r fformat DXIL (Iaith Ganolradd DirectX) a ddefnyddir ar gyfer graddwyr DirectX. Mae'r pen ôl wedi'i alluogi trwy nodi'r paramedr “-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX” yn ystod y gwasanaeth.
  • Mae Libc ++ yn parhau i weithredu nodweddion newydd safonau C++20 a C++2b, gan gynnwys cwblhau gweithrediad y llyfrgell “fformat” a fersiwn arbrofol arfaethedig y llyfrgell “ystod”.
  • Gwell ôl-daliadau ar gyfer pensaernïaeth x86, PowerPC a RISC-V.
  • Mae galluoedd y cysylltydd LLD a'r dadfygiwr LLDB wedi'u gwella.

Ffynhonnell: opennet.ru

Ychwanegu sylw