Pas pas gjashtĂ« muajsh zhvillimi, u prezantua lĂ«shimi i projektit LLVM 15.0 â njĂ« mjet kompatibil me GCC (kompilatorĂ«, optimizues dhe gjeneratorĂ« kodi), qĂ« kompilon programe nĂ« njĂ« kod ndĂ«rmjetĂ«s pĂ«r instrukcionet virtuale tĂ« ngjashme me RISC (njĂ« makinĂ« virtuale me nivele tĂ« shumta optimizimesh). Kodi i gjeneruar mund tĂ« konvertohet pĂ«rmes JIT-kompilatorit nĂ« instruksione makine gjatĂ« ekzekutimit tĂ« programit.
Përmirësimet kryesore në Clang 15.0:
- Për sistemet e bazuara në arkitekturën x86, është shtuar flagu "-fzero-call-used-regs", i cili siguron zerimin e të gjitha registreve të përdorura në funksion para rikthimit të kontrollit nga funksioni. Kjo opsion është ndihmuese për të mbrojtur nga rrjedhja e informacionit nga funksionet dhe redukton me rreth 20% numrin e blloqeve të përshtatshëm për ndërtimin e ROP-gadgeteve (Programimi i Orientuar nga Kthesat) në eksploitë.
- ĂshtĂ« realizuar rastĂ«sia e vendosjes nĂ« kujtesĂ« tĂ« strukturave pĂ«r kodin nĂ« gjuhĂ«n C, e cila e vĂ«shtirĂ«son nxjerrjen e tĂ« dhĂ«nave nga strukturat nĂ« rastin e shfrytĂ«zimit tĂ« dobĂ«sive. Rastezia aktivizohet dhe neutralizohet pĂ«rmes atributeve randomize_layout dhe no_randomize_layout dhe kĂ«rkon caktimin e njĂ« farse pĂ«rmes flagut "-frandomize-layout-seed" ose "-frandomize-layout-seed-file".
- ĂshtĂ« shtuar flagu "-fstrict-flex-arrays=", me anĂ« tĂ« tĂ« cilit mund tĂ« menaxhohet kufizimi pĂ«r elementin fleksibĂ«l-masĂ« nĂ« struktura (Flexible Array Members, njĂ« masĂ« me madhĂ«si tĂ« papĂ«rcaktuar nĂ« fund tĂ« njĂ« strukture). NĂ«se dĂ«rgohet vlera 0 (pĂ«r default), elementi i fundit i strukturĂ«s me masĂ« trajtohet gjithmonĂ« si masĂ« fleksibĂ«l, 1 â vetĂ«m madhĂ«sitĂ« [], [0] dhe [1] trajtohen si masĂ« fleksibĂ«l, 2 â vetĂ«m madhĂ«sitĂ« [] dhe [0] trajtohen si masĂ« fleksibĂ«l.
- ĂshtĂ« shtyrĂ« mbĂ«shtetje eksperimentale pĂ«r gjuhĂ«n e ngjashme me C HLSL (High-Level Shader Language), e cila pĂ«rdoret nĂ« DirectX pĂ«r tĂ« shkruar shenja.
- ĂshtĂ« shtuar parametri "-Warray-parameter", i cili paralajmĂ«ron pĂ«r mbivendosjen e funksioneve me shpallje argumentesh qĂ« nuk janĂ« nĂ« pĂ«rputhje, tĂ« lidhura me masat me gjatĂ«si fikse dhe tĂ« ndryshme.
- ĂshtĂ« pĂ«rmirĂ«suar kompatibiliteti me MSVC. ĂshtĂ« shtuar mbĂ«shtetje pĂ«r "#pragma function" (tregon kompilatorit tĂ« gjenerojĂ« thirrje funksioni, pĂ«rveç shpĂ«rndarjes inline) dhe "#pragma alloc_text" (pĂ«rcakton emrin e seksionit me kodin e funksionit), tĂ« ofruara nĂ« MSVC. ĂshtĂ« shtuar mbĂ«shtetje pĂ«r flagat e pĂ«rputhshme me MSVC /JMC dhe /JMC.
- ĂshtĂ« vazhduar punĂ«n pĂ«r tĂ« siguruar mbĂ«shtetje pĂ«r standardet e ardhshme C2X dhe C++23. PĂ«r gjuhĂ«n C janĂ« realizuar: atributi noreturn, fjalĂ«t kyçe false dhe true, tipi _BitInt(N) pĂ«r numrat e tĂ«rĂ« me njĂ« saktĂ«si tĂ« caktuar, makros *_WIDTH, prefix u8 pĂ«r karakteret nĂ« kodimin UTF-8.
Për C++ janë realizuar: bashkimi i moduleve, izolimi i ABI anëtarëve të funksioneve, inicializimi dinamik i rregullt i variablave jologjikë në module, operatorët shumë-dimensional indeks, auto(x), variablat jo-literal, goto dhe etiketat në funksione, të shpallura si constexpr, sekuencat e arratisjes me ndarës, simbolet e arratisjes me emra.
- JanĂ« zgjeruar mundĂ«sitĂ« e lidhura me mbĂ«shtetje OpenCL dhe OpenMP. ĂshtĂ« shtuar mbĂ«shtetje pĂ«r zgjerimin OpenCL- cl_khr_subgroup_rotate.
- Për arkitekturën x86 është shtuar mbrojtja nga dobësitë në procesorë, të shkaktuara nga ekzekutimi spekulativ i instruksioneve pas operacioneve të kalimit të drejtpërdrejtë të kushtëzuar. Problemi lind për shkak të procesimit të parashikueshëm të instruksioneve, që ndjekin në kujtesë menjëherë pas komandës së kalimit (SLS, Straight Line Speculation). Për të aktivizuar mbrojtjen, është ofruar opsioni "-mharden-sls=[none|all|return|indirect-jmp]".
- Për platformat me mbështetje për zgjerimin SSE2, është shtuar tipi _Float16, i cili imitohet duke përdorur tipin float në rast se mungon mbështetja për instruksionet AVX512-FP16.
- ĂshtĂ« shtuar flagu "-m[no-]rdpru" pĂ«r tĂ« menaxhuar pĂ«rdorimin e instruksionit RDPRU, i mbĂ«shtetur qĂ« nga procesorĂ«t AMD Zen2.
- ĂshtĂ« shtuar flagu "-mfunction-return=thunk-extern" pĂ«r tĂ« mbrojtur nga dobĂ«sia RETBLEED, qĂ« operon pĂ«rmes shtimit tĂ« njĂ« sekuence instruksionesh, duke pĂ«rjashtuar angazhimin e mekanizmit tĂ« ekzekutimit spekulativ pĂ«r kalimet indirekte.
Kryesoret përmirësime në LLVM 15.0:
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r CPU Cortex-M85, arkitekturĂ«n Armv9-A, Armv9.1-A dhe Armv9.2-A, zgjerimet Armv8.1-M PACBTI-M.
- ĂshtĂ« shtuar njĂ« bllok eksperimentale pĂ«r DirectX, qĂ« mbĂ«shtet formatin DXIL (DirectX Intermediate Language), e cila pĂ«rdoret pĂ«r shenjat DirectX. Blloku aktivizohet duke specifikuar gjatĂ« ndĂ«rtimit parametrit "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX".
- Në Libc++ është vazhduar realizimi i mundësive të reja të standarteve C++20 dhe C++2b, përfshirë përfundimin e zbatimit të bibliotekës "format" dhe ofrimin e një varianti eksperimental të bibliotekës "ranges".
- Janë përmirësuar bllokët për arkitekturën x86, PowerPC dhe RISC-V.
- Janë zgjeruar mundësitë e lidhësit LLD dhe debuesit LLDB.
Burimi: opennet.ru
