Verëffentlechung vun der LLVM 15.0 Compiler Suite

No sechs Méint vun der Entwécklung gouf d'Verëffentlechung vum LLVM 15.0 Projet presentéiert - e GCC-kompatibel Toolkit (Compilatoren, Optimisateuren a Code Generatoren) déi Programmer an Zwëschen Bitcode vu RISC-ähnleche virtuelle Instruktiounen kompiléiert (eng niddereg-Niveau virtuell Maschinn mat engem Multi-Level Optimisatiounssystem). De generéierte Pseudocode ka mat engem JIT Compiler a Maschinninstruktiounen direkt zur Zäit vun der Ausféierung vum Programm ëmgewandelt ginn.

Grouss Verbesserungen am Clang 15.0:

  • Fir Systemer baséiert op der x86 Architektur, ass de "-fzero-call-used-regs" Fändel bäigefüügt, wat garantéiert datt all CPU Registere, déi an der Funktioun benotzt ginn, op Null zréckgesat ginn ier d'Kontroll vun der Funktioun zréckkoum. Dës Optioun erlaabt Iech géint Informatiounsleckage vu Funktiounen ze schützen an d'Zuel vu Blocken ze reduzéieren déi gëeegent sinn fir ROP (Return-Oriented Programming) Gadgeten an Exploiten ëm ongeféier 20% ze bauen.
  • Randomiséierung vun der Erënnerungsplazéierung vu Strukturen fir C Code gouf implementéiert, wat d'Extraktioun vun Daten aus Strukturen am Fall vun Ausbeutung vu Schwachstelle komplizéiert. D'Randomiséierung gëtt ausgeschalt an ausgeschalt mat den Attributer randomize_layout an no_randomize_layout, a erfuerdert e Som mat der "-frandomize-layout-seed" oder "-frandomize-layout-seed-file" Fändel.
  • Added "-fstrict-flex-arrays=" Fändel ", mat deem Dir d'Grenze fir e flexibel Array-Element a Strukturen kontrolléiere kënnt (Flexible Array Members, eng Array vun onbestëmmter Gréisst um Enn vun der Struktur). Wann op 0 gesat (Standard), gëtt dat lescht Element vun der Struktur mat enger Array ëmmer als flexibel Array veraarbecht, 1 - nëmme Gréissten [], [0] an [1] ginn als flexibel Array veraarbecht, 2 - nëmme Gréissten [] an [0] gi wéi eng flexibel Array veraarbecht.
  • Experimentell Ënnerstëtzung bäigefüügt fir d'C-ähnlech Sprooch HLSL (High-Level Shader Language), déi an DirectX benotzt gëtt fir Shaders ze schreiwen.
  • "-Warray-Parameter" bäigefüügt fir ze warnen iwwer Iwwerdribblenfunktiounen mat inkompatibelen Argumenterklärungen, déi mat fixen a variabelen Längt Arrays verbonne sinn.
  • Verbessert Kompatibilitéit mat MSVC. Zousätzlech Ënnerstëtzung fir "#pragma Funktioun" (instruéiert de Compiler fir e Funktiounsopruff ze generéieren anstatt inline Expansioun) an "#pragma alloc_text" (definéiert den Numm vun der Sektioun mam Funktiounscode) an MSVC geliwwert. Zousätzlech Ënnerstëtzung fir MSVC-kompatibel / JMC an / JMC Fändelen.
  • D'Aarbecht geet weider fir zukünfteg C2X an C ++ 23 Standarden z'ënnerstëtzen. Fir d'C Sprooch ginn déi folgend implementéiert: d'noreturn Attribut, d'Schlësselwierder falsch a richteg, den _BitInt(N) Typ fir ganz Zuelen vun enger bestëmmter Bitdéift, *_WIDTH Makroen, den u8 Präfix fir UTF-8 kodéiert Zeechen.

    Fir C++ ginn déi folgend implementéiert: Modulfusioun, ABI Isolatioun vu Funktiounsmemberen, bestallt dynamesch Initialiséierung vun net-lokale Variablen a Moduler, multidimensional Indexoperateuren, auto(x), net-literal Variablen, Goto an Etiketten a Funktiounen, déi als constexpr deklaréiert sinn. , ofgrenzt Fluchsequenzen, genannt Flucht Zeechen.

  • D'Kapazitéite verbonne mat OpenCL an OpenMP Support goufen erweidert. Zousätzlech Ënnerstëtzung fir d'OpenCL Extensioun cl_khr_subgroup_rotate.
  • Fir d'x86 Architektur gouf Schutz géint Schwachstelle bei Prozessoren bäigefüügt, déi duerch spekulativ Ausféierung vun Instruktiounen no bedingungslosen Forward Sprong Operatiounen verursaacht ginn. De Problem geschitt wéinst pre-emptive Veraarbechtung vun Instruktiounen direkt no der Brancheinstruktioun an der Erënnerung (SLS, Straight Line Speculation). Fir de Schutz z'aktivéieren, gëtt d'Optioun "-mharden-sls=[none|all|return|indirect-jmp]" proposéiert.
  • Fir Plattformen déi d'SSE2 Extensioun ënnerstëtzen, ass den _Float16 Typ bäigefüügt, deen mam Float Typ emuléiert gëtt am Fall vu Mangel un Ënnerstëtzung fir AVX512-FP16 Instruktiounen.
  • Zousätzlech "-m[no-]rdpru" Fändel fir d'Benotzung vun der RDPRU Instruktioun ze kontrolléieren, ënnerstëtzt mat AMD Zen2 Prozessoren.
  • Den "-mfunction-return=thunk-extern" Fändel bäigefüügt fir géint d'RETBLEED Schwachstelle ze schützen, déi funktionnéiert andeems Dir eng Sequenz vun Instruktiounen bäidréit, déi d'Beteiligung vum spekulativen Ausféierungsmechanismus fir indirekt Filialen ausschléisst.

Schlëssel Innovatiounen am LLVM 15.0:

  • Zousätzlech Ënnerstëtzung fir Cortex-M85 CPU, Armv9-A, Armv9.1-A an Armv9.2-A Architekturen, Armv8.1-M PACBTI-M Extensiounen.
  • En experimentellen Backend fir DirectX gouf bäigefüügt, deen den DXIL (DirectX Intermediate Language) Format ënnerstëtzt fir DirectX Shaders. De Backend ass aktivéiert andeems Dir de "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" Parameter während der Assemblée spezifizéiert.
  • Libc ++ weider nei Fonctiounen vun der C ++ 20 an C ++ 2b Standarden ëmsetzen, dorënner d'Réalisatioun vun der Ëmsetzung vun der "Format" Bibliothéik an der proposéiert experimentell Versioun vun der "Gamme" Bibliothéik.
  • Verbesserte Backends fir x86, PowerPC a RISC-V Architekturen.
  • D'Kapazitéite vum LLD Linker an dem LLDB Debugger goufen verbessert.

Source: opennet.ru

Setzt e Commentaire