Scaoileadh sraith tiomsaithe LLVM 15.0

Tar éis sé mhí forbartha, cuireadh scaoileadh an tionscadail LLVM 15.0 i láthair - foireann uirlisí atá comhoiriúnach le GCC (tiomsaitheoirí, optimizers agus gineadóirí cód) a thiomsaíonn cláir i gcód giotán idirmheánach de threoracha fíorúla cosúil le RISC (meaisín fíorúil íseal-leibhéal le a. córas optamaithe illeibhéil). Is féidir an pseudocode a ghintear a thiontú trí úsáid a bhaint as tiomsaitheoir JIT go treoracha meaisín go díreach ag an am a dhéantar an clár.

Основные улучшения в Clang 15.0:

  • Для систем на базе архитектуры x86 добавлен флаг «-fzero-call-used-regs», обеспечивающий обнуление всех использованных в функции регистров CPU перед возвращением управления из функции. Указанная опция позволяет защититься от утечки информации из функций и примерно на 20% сократить число блоков, пригодных для построения ROP-гаджетов (Return-Oriented Programming) в эксплоитах.
  • Реализована рандомизация размещения в памяти структур для кода на языке Си, которая усложняет извлечение данных из структур в случае эксплуатации уязвимостей. Рандомизация включается и выключается при помощи атрибутов randomize_layout и no_randomize_layout, и требует установки затравки при помощи флага «-frandomize-layout-seed» или «-frandomize-layout-seed-file».
  • Добавлен флаг «-fstrict-flex-arrays=<arg>», при помощи которого можно управлять границами для гибкого элемента-массива в структурах (Flexible Array Members, массив неопределённого размера в конце структуры). При выставлении значения в 0 (по умолчанию) последний элемент структуры с массивом всегда обрабатывается как гибкий массив, 1 — только размеры [], [0] и [1] обрабатываются как гибкий массив, 2 — только размеры [] и [0] обрабатываются как гибкий массив.
  • Добавлена экспериментальная поддержка Си-подобного языка HLSL (High-Level Shader Language), применяемого в DirectX для написания шейдеров.
  • Добавлен параметр «-Warray-parameter», который предупреждает о переопределении функций с не сочетающимся объявлением аргументов, связанных с массивами фиксированной и переменной длины.
  • Улучшена совместимость с MSVC. Добавлена поддержка «#pragma function» (указывает компилятору генерировать вызов функции, вместо её inline-развёртывания) и «#pragma alloc_text» (определяет имя секции с кодом функции), предоставляемых в MSVC. Добавлена поддержка совместимых с MSVC флагов /JMC и /JMC.
  • Продолжена работа по обеспечению поддержки будущих стандартов C2X и C++23. Для языка Си реализованы: атрибут noreturn, ключевые слова false и true, тип _BitInt(N) для целых чисел заданной разрядности, макросы *_WIDTH, префикс u8 для символов в кодировке UTF-8.

    Для С++ реализованы: слияние модулей, изоляция ABI членов функций, упорядоченная динамическая инициализация нелокальных переменных в модулях, многомерные индексные операторы, auto(x), нелитеральные переменные, goto и метки в функциях, объявленных как constexpr, escape-последовательности с разделителями, именованные escape-символы.

  • Расширены возможности, связанные с поддержкой OpenCL и OpenMP. Добавлена поддержка OpenCL-расширения cl_khr_subgroup_rotate.
  • Для архитектуры x86 добавлена защита от уязвимостей в процессорах, вызванных спекулятивным выполнением инструкций после операций безусловного прямого перехода. Проблема возникает из-за упреждающей обработки инструкций, следующих в памяти сразу за командой перехода (SLS, Straight Line Speculation). Для включения защиты предложена опция «-mharden-sls=[none|all|return|indirect-jmp]».
  • Для платформ с поддержкой расширения SSE2 добавлен тип _Float16, который эмулируется с использованием типа float в случае отсутствия поддержки инструкций AVX512-FP16.
  • Добавлен флаг «-m[no-]rdpru» для управления использованием инструкции RDPRU, поддерживаемой начиная с процессоров AMD Zen2.
  • Добавлен флаг «-mfunction-return=thunk-extern» для защиты от уязвимости RETBLEED, работающей через добавление последовательности инструкций, исключающей вовлечение механизма спекулятивного выполнения для косвенных переходов.

Príomh-nuálaíochtaí LLVM 15.0:

  • Добавлена поддержка CPU Cortex-M85, архитектур Armv9-A, Armv9.1-A и Armv9.2-A, расширений Armv8.1-M PACBTI-M.
  • Добавлен экспериментальный бэкенд для DirectX, поддерживающий формат DXIL (DirectX Intermediate Language), применяемый для шейдеров DirectX. Бэкенд включается через указание при сборке параметра «-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX».
  • В Libc++ продолжена реализация новых возможностей стандартов C++20 и C++2b, в том числе завершена реализация библиотеки «format» и предложен экспериментальный вариант библиотеки «ranges».
  • Улучшены бэкенды для архитектур x86, PowerPC и RISC-V.
  • Расширены возможности компоновщика LLD и отладчика LLDB.

Foinse: oscailtenet.ru

Add a comment