LLVM 15.0 компилятор топтомунун чыгарылышы

Алты айлык иштеп чыгуудан кийин LLVM 15.0 долбоорунун релизинин бет ачары болду - программаларды RISC сымал виртуалдык нускамалардын ортоңку биткоддоруна компиляциялоочу GCC шайкеш инструменттер топтому (компиляторлор, оптимизаторлор жана код генераторлор). көп деңгээлдүү оптималдаштыруу системасы). Түзүлгөн псевдокод JIT компиляторунун жардамы менен программаны аткаруу учурунда түздөн-түз машиналык көрсөтмөлөргө айландырылат.

Clang 15.0 негизги жакшыртуулар:

  • X86 архитектурасына негизделген системалар үчүн "-fzero-call-used-regs" желеги кошулду, бул функцияда колдонулган бардык CPU регистрлери функциядан башкарууну кайтарганга чейин нөлгө кайтарылышын камсыз кылат. Бул параметр функциялардан маалыматтын агып кетүүсүнөн коргоого жана эксплойттерде ROP (кайтарууга багытталган программалоо) гаджеттерин курууга ылайыктуу блоктордун санын болжол менен 20% кыскартууга мүмкүндүк берет.
  • С коду үчүн структураларды эстутумга жайгаштырууну рандомизациялоо ишке ашырылган, бул алсыздыктарды эксплуатациялоодо структуралардан маалыматтарды алууну кыйындатат. Randomize randomize_layout жана no_randomize_layout атрибуттары аркылуу күйгүзүлөт жана өчүрүлөт жана "-frandomize-layout-seed" же "-frandomize-layout-seed-file" желегин колдонуу менен үрөн орнотууну талап кылат.
  • "-fstrict-flex-arrays=" желекчеси кошулду ", анын жардамы менен структуралардагы ийкемдүү массив элементинин чектерин көзөмөлдөй аласыз (Ийкемдүү массивдин мүчөлөрү, структуранын аягындагы белгисиз өлчөмдөгү массив). 0 (демейки) коюлганда, массив менен структуранын акыркы элементи ар дайым ийкемдүү массив катары иштетилет, 1 - гана өлчөмдөр [], [0] жана [1] ийкемдүү массив катары иштетилет, 2 - бир гана өлчөмдөр [] жана [0] ийкемдүү массив сыяктуу иштетилет.
  • DirectXте шейдерлерди жазуу үчүн колдонулган HLSL (High-Level Shader Language) тилине окшош тилге эксперименталдык колдоо кошулду.
  • Туруктуу жана өзгөрүлмө узундуктагы массивдер менен байланышкан шайкеш келбеген аргумент жарыялары менен функцияларды жокко чыгаруу жөнүндө эскертүү үчүн "-Warray-параметри" кошулду.
  • MSVC менен жакшыртылган шайкештик. MSVCде берилген "#pragma функциясы" (компиляторго саптык кеңейүүнүн ордуна функция чакырыгын түзүүнү тапшырат) жана "#pragma alloc_text" (функциянын коду менен бөлүмдүн атын аныктайт) үчүн кошумча колдоо. MSVC шайкеш /JMC жана /JMC желектери үчүн кошумча колдоо.
  • Келечектеги C2X жана C++ 23 стандарттарын колдоо боюнча иш улантылууда. Си тили үчүн төмөнкүлөр ишке ашырылат: noreturn атрибуту, false жана true ачкыч сөздөр, берилген бит тереңдигинин бүтүн сандары үчүн _BitInt(N) түрү, *_WIDTH макролору, UTF-8 коддолгон символдор үчүн u8 префикси.

    C++ үчүн төмөнкүлөр ишке ашырылат: модулдарды бириктирүү, функция мүчөлөрүнүн ABI изоляциясы, модулдардагы локалдык эмес өзгөрмөлөрдү иреттелген динамикалык инициализациялоо, көп өлчөмдүү индекс операторлору, auto(x), литералдык эмес өзгөрмөлөр, constexpr деп жарыяланган функциялардагы goto жана энбелгилер , бөлүнгөн качуу ырааттуулугу, аталган качуу символдору.

  • OpenCL жана OpenMP колдоосу менен байланышкан мүмкүнчүлүктөр кеңейтилген. OpenCL кеңейтүүсү үчүн кошумча колдоо cl_khr_subgroup_rotate.
  • X86 архитектурасы үчүн шартсыз алдыга секирүү операцияларынан кийин инструкциялардын алып-сатарлык аткарылышынан келип чыккан процессорлордогу алсыздыктардан коргоо кошулган. Көйгөй инструкцияларды эстутумдагы тармактык инструкциядан кийин дароо алдын ала иштетүүдөн улам келип чыгат (SLS, Straight Line Speculation). Коргоону иштетүү үчүн “-mharden-sls=[none|all|return|indirect-jmp]” варианты сунушталат.
  • SSE2 кеңейтүүсүн колдогон платформалар үчүн AVX16-FP512 нускамалары колдоого алынбаган учурда флоат түрү менен эмуляцияланган _Float16 түрү кошулду.
  • RDPRU нускамасынын колдонулушун көзөмөлдөө үчүн AMD Zen2 процессорлорунан баштап колдоого алынган "-m[no-]rdpru" желеги кошулду.
  • RETBLEED аялуулугунан коргоо үчүн "-mfunction-return=thunk-extern" желеги кошулду, ал кыйыр бутактар ​​үчүн алып-сатарлык аткаруу механизминин катышуусун жокко чыгарган көрсөтмөлөрдүн ырааттуулугун кошуу менен иштейт.

LLVM 15.0 негизги инновациялар:

  • Cortex-M85 CPU, Armv9-A, Armv9.1-A жана Armv9.2-A архитектуралары, Armv8.1-M PACBTI-M кеңейтүүлөрү үчүн колдоо кошулду.
  • DirectX шейдерлери үчүн колдонулган DXIL (DirectX Intermediate Language) форматын колдогон DirectX үчүн эксперименталдык сервер кошулду. Backend монтаж учурунда “-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX” параметрин көрсөтүү менен иштетилет.
  • Libc++ C++20 жана C++2b стандарттарынын жаңы мүмкүнчүлүктөрүн ишке ашырууну улантууда, анын ичинде “формат” китепканасын ишке ашырууну аяктоо жана “диапазондор” китепканасынын сунушталган эксперименталдык версиясы.
  • x86, PowerPC жана RISC-V архитектуралары үчүн жакшыртылган серверлер.
  • LLD шилтемесинин жана LLDB мүчүлүштүктөрдү оңдоочусунун мүмкүнчүлүктөрү жакшыртылды.

Source: opennet.ru

Комментарий кошуу