LLVM 15.0 надходить із покращеннями для різних серверних програм, розширеною підтримкою тощо

LLVM 15 реалізує покращення підтримки

LLVM 15.0 також містить низку цікавих оновлень для C/C++.

Після півроку розробки, Оголошено про випуск проекту LLVM 15.0, в якому було зроблено багато серйозних змін, а також додана підтримка нових процесорів, архітектур тощо.

Для тих, хто не знайомий з LLVM, ви повинні знати, що це є компілятором, сумісним з GCC (компілятори, оптимізатори та генератори коду), який компілює програми у RISC-подібний проміжний біт-код віртуальної інструкції (низькорівнева віртуальна машина з багаторівневою системою оптимізації).

Згенерований псевдокод може бути перетворений JIT-компілятором у машинні інструкції просто під час виконання програми.

Основні нові можливості LLVM 15.0

У цій представленій новій версії підкреслюється, що підтримка процесорів Cortex-M85, а також для архітектур Armv9-A, Armv9.1-A та Armv9.2-A, розширення Armv8.1-M PACBTI-M.

Ще одна зміна, яка виділяється, полягає в тому, додано експериментальний бекенд DirectX що підтримує формат DXIL (Проміжна мова DirectX), що використовується для шейдерів DirectX. Сервер увімкнено за допомогою параметра збірки "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX".

libc++ продовжує впроваджувати нові функції стандартів C++20 і C++2b, включаючи завершення реалізації бібліотеки "format" і запропоновану експериментальну версію бібліотеки "ranges".

У частині змін, що стосуються Clang 15.0, згадується, що додано експериментальну підтримку C-подібної мови HLSL (High-Level Shading Language), який використовується для написання шейдерів, починаючи з DirectX 9, а також для перекладу шейдерів HLSL у двійковий формат DXIL (проміжна мова DirectX 12), сумісний із DirectX XNUMX, а також у формат SPIR -V, що використовується Vulkan. У майбутньому, планують реалізувати підтримку формату DXBC (байт-код DirectX), який використовується в DirectX 9-11. Реалізація надається Microsoft і базується на DirectX Shader Compiler, випущеному в 2017 році, побудованому на основі LLVM 3.7.

Також згадується, що це продовжується з працювати над підтримкою майбутніх стандартів C2X і C++23. Реалізовано для мови C: атрибут noreturn, ключові слова false і true, тип _BitInt(N) для цілих чисел заданої бітності, макроси *_WIDTH, префікс u8 для символів UTF-8.

На додаток до цього, реалізовано для C++: злиття модулів, ABI-ізоляція функціональних членів, упорядкована динамічна ініціалізація нелокальних змінних у модулі, оператори багатовимірного індексу, auto(x), нелітеральні змінні, goto та мітки у функціях, оголошених як constexpr, розділені керуючі послідовності, іменовані керуючі символи.

Для систем на основі архітектури x86, додано прапорець "-fzero-call-used-regs", який забезпечує обнулення всіх регістрів процесора, що використовуються у функції, перед поверненням керування з функції. цей варіант захищає від витоку даних функцій і зменшити кількість блоків, придатних для створення ROP (Return Oriented Programming) пристроїв у експлойтах приблизно на 20%.

Реалізовано рандомізацію розташування пам’яті структур для коду C, що ускладнює вилучення даних зі структур у разі експлуатації вразливостей. Рандомізація вмикається та вимикається за допомогою атрибутів randomize_layout і no_randomize_layout, і вимагає, щоб початкове значення було встановлено з прапором "-frandomize-layout-seed" або "-frandomize-layout-seed-file", щоб забезпечити повторювані збірки.

З інших змін що виділяються:

  • Розширені можливості, пов’язані з підтримкою OpenCL і OpenMP. Додано підтримку розширення OpenCL cl_khr_subgroup_rotate.
  • Покращено серверні модулі для архітектур x86, PowerPC і RISC-V.
    Покращено компонувальник LLD і можливості налагоджувача LLDB.
  • Додано прапорець "-fstrict-flex-arrays=" » за допомогою якого ви можете керувати межами м’якого елемента масиву в структурах (Soft Array Members, масив невизначеного розміру в кінці структури).
  • Додано параметр "-warray-parameter", щоб попереджати про перевизначення функцій із невідповідними оголошеннями аргументів, пов’язаних із масивами фіксованої та змінної довжини.
  • Покращена сумісність з MSVC.
  • Додано підтримку функції #pragma та #pragma alloc_text у MSVC.
  • Додано підтримку MSVC-сумісних прапорів /JMC і /JMC.
  • Додано прапорець "-m[no-]rdpru" для керування використанням інструкції RDPRU, що підтримується процесорами AMD Zen2.
  • Додано прапорець "-mfunction-return=thunk-extern" для захисту від уразливості RETBLEED, яка працює шляхом додавання послідовності інструкцій, що виключає участь спекулятивного механізму виконання для непрямих переходів.

В кінці кінців Якщо вам цікаво дізнатись більше про це, Ви можете перевірити деталі в наступне посилання.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: AB Internet Networks 2008 SL
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.