Релиз набора компиляторов LLVM 15.0
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
После шести месяцев разработки представлен релиз проекта LLVM 15.0 - GCC-совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.
Основные улучшения в 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, работающей через добавление последовательности инструкций, исключающей вовлечение механизма спекулятивного выполнения для косвенных переходов.
Основные новшества 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.
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://discourse.llvm.org/t/l...)
- OpenNews: Релиз набора компиляторов GCC 12
- OpenNews: Проект LLVM переходит со списков рассылки на платформу Discourse
- OpenNews: Первый стабильный релиз компоновщика Mold, развиваемого разработчиком LLVM lld
- OpenNews: Релиз набора компиляторов LLVM 13.0
- OpenNews: Проект LLVM представил HPVM 1.0, компилятор для CPU, GPU, FPGA и ускорителей
Похожие новости:
- Релиз набора компиляторов GCC 12
- Опубликован HPVM 2.0, компилятор для CPU, GPU, FPGA и аппаратных ускорителей
- В ядре Linux 5.18 планируют разрешить использование стандарта языка Си C11
- Проект LLVM переходит со списков рассылки на платформу Discourse
- Опубликован набор патчей, ускоряющих сборку ядра Linux на 50-80%
- Доступен Emscripten 3.0, компилятор из C/C++ в WebAssembly
- Релиз набора компиляторов LLVM 13.0
- Предложен компилятор исходных текстов на языке TypeScript в машинный код
- cproc - новый компактный компилятор для языка Си
- [Программирование, Компиляторы] Почему я прекратил разработку своего старого языка программирования и создал новый
Теги для поиска: #_llvm, #_clang, #_compile
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 05:44
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
После шести месяцев разработки представлен релиз проекта LLVM 15.0 - GCC-совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы. Основные улучшения в Clang 15.0:
=========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 05:44
Часовой пояс: UTC + 5