Нашри маҷмӯи компилятори LLVM 15.0

Пас аз шаш моҳи таҳия, нашри лоиҳаи LLVM 15.0 муаррифӣ шуд - як абзори мувофиқи GCC (компиляторҳо, оптимизаторҳо ва генераторҳои код), ки барномаҳоро ба биткоди фосилавии дастурҳои виртуалии ба RISC монанд (мошини виртуалии сатҳи пасти дорои системаи оптимизатсияи бисёрсатҳа). Псевдокоди тавлидшуда метавонад бо истифода аз компилятори JIT ба дастурҳои мошин бевосита дар вақти иҷрои барнома табдил дода шавад.

Такмилҳои асосӣ дар Clang 15.0:

  • Барои системаҳое, ки бар меъмории x86 асос ёфтааст, парчами "-fzero-call-used-regs" илова карда шудааст, ки кафолат медиҳад, ки ҳамаи регистрҳои CPU, ки дар функсия истифода мешаванд, пеш аз баргардонидани назорат аз функсия ба сифр барқарор карда мешаванд. Ин хосият ба шумо имкон медиҳад, ки аз ихроҷи иттилоот аз функсияҳо муҳофизат кунед ва шумораи блокҳои мувофиқро барои сохтани гаҷетҳои ROP (Баргардонидани барномасозӣ) дар эксплойтҳо тақрибан 20% кам кунед.
  • Рандомизатсияи ҷойгиркунии хотираи сохторҳо барои коди C амалӣ карда шудааст, ки истихроҷи маълумотро аз сохторҳо ҳангоми истифодаи осебпазирӣ мушкил мекунад. Рандомизатсия бо истифода аз атрибутҳои randomize_layout ва no_randomize_layout фаъол ва хомӯш карда мешавад ва насб кардани тухмро бо истифода аз парчами "-frandomize-layout-seed" ё "-frandomize-layout-seed-file" талаб мекунад.
  • Парчами "-fstrict-flex-arrays=" илова карда шуд, ки бо он шумо метавонед сарҳадҳои элементи массиви чандирро дар сохторҳо назорат кунед (Аъзоёни массиви чандир, массиви андозаи номуайян дар охири сохтор). Ҳангоми таъин кардани 0 (пешфарз), унсури охирини сохтор бо массив ҳамеша ҳамчун массиви чандир коркард мешавад, 1 - танҳо андозаҳо [], [0] ва [1] ҳамчун массиви чандир коркард мешаванд, 2 - танҳо андозаҳо [] ва [0] ҳамчун массиви чандир коркард карда мешаванд.
  • Дастгирии таҷрибавӣ барои забони C-монанди HLSL (Забони Шадер сатҳи баланд), ки дар DirectX барои навиштани шейдерҳо истифода мешавад, илова карда шуд.
  • Илова "-Warray-parameter" барои огоҳӣ дар бораи бекор кардани функсияҳо бо эъломияҳои аргументҳои номувофиқ, ки бо массивҳои собит ва тағирёбандаи дарозӣ алоқаманданд.
  • Мутобиқати беҳтаршуда бо MSVC. Дастгирии иловашуда барои "функсияи #pragma" (ба компилятор супориш медиҳад, ки ба ҷои тавсеаи дохилӣ занги функсия тавлид кунад) ва "#pragma alloc_text" (номи бахшро бо рамзи функсия муайян мекунад), ки дар MSVC дода шудааст. Дастгирии иловашуда барои парчамҳои MSVC-мувофиқ /JMC ва /JMC.
  • Кор барои дастгирии стандартҳои ояндаи C2X ва C++23 идома дорад. Барои забони Си амалҳои зерин амалӣ карда мешаванд: атрибути noreturn, калимаҳои калидӣ false ва true, навъи _BitInt(N) барои ададҳои бутуни умқи бит, макросҳои *_WIDTH, префикси u8 барои аломатҳои рамзгузоришудаи UTF-8.

    Барои C++ инҳо амалӣ карда мешаванд: якҷоякунии модулҳо, ҷудокунии аъзои функсияҳои ABI, оғозкунии фармоишии динамикии тағирёбандаҳои ғайримаҳаллӣ дар модулҳо, операторҳои индекси бисёрченака, auto(x), тағирёбандаҳои ғайрирасмӣ, goto ва тамғакоғазҳо дар функсияҳои ҳамчун constexpr эълоншуда , пайдарпаии фирор ҷудошуда, аломатҳои фирор ном.

  • Имкониятҳои марбут ба дастгирии OpenCL ва OpenMP васеъ карда шуданд. Дастгирии иловашуда барои васеъшавии OpenCL cl_khr_subgroup_rotate.
  • Барои меъмории x86, муҳофизат аз осебпазирии протсессорҳо, ки дар натиҷаи иҷрои тахминии дастурҳо пас аз амалиёти бечунучаро ҷаҳиши пеш ба вуҷуд омадаанд, илова карда шудааст. Мушкилот аз сабаби коркарди пешгирикунандаи дастурҳо фавран пас аз дастури филиал дар хотира (SLS, Straight Line Speculation) ба амал меояд. Барои фаъол кардани муҳофизат, варианти "-mharden-sls=[none|all|return|indirect-jmp]" пешниҳод карда мешавад.
  • Барои платформаҳое, ки тамдиди SSE2-ро дастгирӣ мекунанд, навъи _Float16 илова карда шудааст, ки бо истифода аз навъи шинокунанда дар сурати набудани дастгирӣ барои дастурҳои AVX512-FP16 тақлид карда мешавад.
  • Барои назорати истифодаи дастури RDPRU парчами "-m[no-]rdpru" илова карда шуд, ки аз протсессори AMD Zen2 дастгирӣ мешавад.
  • Барои муҳофизат аз осебпазирии RETBLEED парчами "-mfunction-return=thunk-extern" илова карда шуд, ки тавассути илова кардани пайдарпаии дастурҳо кор мекунад, ки ҷалби механизми иҷрои тахминиро барои шохаҳои ғайримустақим истисно мекунад.

Навовариҳои асосӣ дар LLVM 15.0:

  • Дастгирии иловашуда барои CPU Cortex-M85, Armv9-A, Armv9.1-A ва Armv9.2-A, васеъшавии Armv8.1-M PACBTI-M.
  • Як пуштибонии таҷрибавӣ барои DirectX илова карда шудааст, ки формати DXIL (DirectX Intermediate Language)-ро, ки барои shaders DirectX истифода мешавад, дастгирӣ мекунад. Параметри пуштибонӣ тавассути муайян кардани параметри "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" ҳангоми васлкунӣ фаъол карда мешавад.
  • Libc++ татбиқи хусусиятҳои нави стандартҳои C++20 ва C++2b, аз ҷумла анҷоми татбиқи китобхонаи “формат” ва версияи таҷрибавии пешниҳодшудаи китобхонаи “диапазон”-ро идома медиҳад.
  • Бозгаштҳои такмилёфта барои меъмории x86, PowerPC ва RISC-V.
  • Имкониятҳои пайвандгари LLD ва ислоҳкунандаи LLDB такмил дода шуданд.

Манбаъ: opennet.ru

Илова Эзоҳ