LLVM 6 уменьшает опасность Spectre, имеет улучшенную поддержку Windows и CPU компании Intel, а также включает WebAssembly в число поддерживаемых целевых платформ.
![](https://habrastorage.org/webt/fv/by/ll/fvbyllj8auw9agp4uskpr6vso7a.jpeg)
Инфраструктура компилятора LLVM прошла путь от технически любопытной вещи до живой части современного ландшафта программного обеспечения. Это то ядро, которое стоит за компилятором Clang, за компиляторами языков Rust и Swift, и предоставляет широкие возможности для разработки компиляторов для новых языков.
Это также довольно быстро развивающийся проект, его мажорные релизы выходят каждые полгода или близко к этому. Версия 6.0, вышедшая недавно, продолжает миссию LLVM по углублению и расширению поддержки различных целевых платформ. Апдейт также добавляет некоторые патчи, направленные против недавно обнаруженных уязвимостей уровня процессора.
Уязвимости CPU Spectre и Meltdown эксплуатируют особенности спекулятивного выполнения современных процессоров. Их сложно исправить, так как они требуют изменения как микрокода CPU, так и существующего ПО.
Для того, чтобы приложения, собранные с помощью LLVM, также вносили свой вклад в борьбу с этими уязвимостями, LLVM предлагает поддержку так называемых ”retpolines”, программных конструкций, которые частично уменьшают возможность атаки Spectre. Для того, чтобы использовать эту возможность, вам нужно перекомпилировать программы с LLVM 6.0 с ключом -mretpoline.
Microsoft Windows использует отладочную информацию, хранящуюся в формате CodeView, аналогичном формату DWARF, используемому в системах Linux.
В LLVM ранее была добавлена поддержка CodeView, как часть общих усилий по развитию LLVM под Windows, и улучшению состояния инструментов отладки под Windows с использованием CodeView.
LLVM 6 далее улучшает эту поддержку, как благодаря помощи со стороны Microsoft, так и благодаря тщательному reverse engineering со стороны команды LLVM. Долгосрочные планы состоят в улучшении поддержки CodeView до той стадии, когда языки, отличные от C/C++, компилируемые в LLVM смогут надёжно использовать CodeView в своих инструментах.
WebAssembly, бинарный формат приложений для веб-браузера, начал развиваться от стадии эксперимента к стадии используемой в продакшене технологии. Ключевой частью тулчейна WebAssembly, такой же, как Emscripten и PNaCL, является LLVM.
Самым последним шагом в поддержке линковки WebAssembly в LLVM стал инструмент wasm-ld. Этот инструмент получает на входе ассемблер, созданный в LLVM (таргет wasm32-unknown-unknown-wasm), и генерирует готовый к использованию бинарный файл WebAssembly.
Поддержка WebAssembly по-прежнему неполна, и работа над WebAssembly ещё продолжается, но LLVM останется ключевым элементом стека WebAssembly.
Программы LLVM сейчас имеют возможность использовать инструкции множества семейств процессоров Intel: Sandy Bridge, Ivy Bridge, Haswell, Broadwell, и Skylake. Intel Icelake сейчас также поддерживается.
В настоящее время LLVM генерирует код для процессоров Intel с использованием векторных расширений: VAES, GFNI, VPCLMULQDQ, AVX512VBMI2, AVX512BITALG, and AVX512VNNI.
Генерация кода улучшена для различных операций процессоров Intel, таких, как сравнения в памяти (memory comparisons), урезание векторов (vector truncations), умножение вектора на 32-битное целое значение.
![](https://habrastorage.org/webt/fv/by/ll/fvbyllj8auw9agp4uskpr6vso7a.jpeg)
Инфраструктура компилятора LLVM прошла путь от технически любопытной вещи до живой части современного ландшафта программного обеспечения. Это то ядро, которое стоит за компилятором Clang, за компиляторами языков Rust и Swift, и предоставляет широкие возможности для разработки компиляторов для новых языков.
Это также довольно быстро развивающийся проект, его мажорные релизы выходят каждые полгода или близко к этому. Версия 6.0, вышедшая недавно, продолжает миссию LLVM по углублению и расширению поддержки различных целевых платформ. Апдейт также добавляет некоторые патчи, направленные против недавно обнаруженных уязвимостей уровня процессора.
В LLVM добавлена частичная защита от Spectre
Уязвимости CPU Spectre и Meltdown эксплуатируют особенности спекулятивного выполнения современных процессоров. Их сложно исправить, так как они требуют изменения как микрокода CPU, так и существующего ПО.
Для того, чтобы приложения, собранные с помощью LLVM, также вносили свой вклад в борьбу с этими уязвимостями, LLVM предлагает поддержку так называемых ”retpolines”, программных конструкций, которые частично уменьшают возможность атаки Spectre. Для того, чтобы использовать эту возможность, вам нужно перекомпилировать программы с LLVM 6.0 с ключом -mretpoline.
Улучшена отладка LLVM CodeView для Windows
Microsoft Windows использует отладочную информацию, хранящуюся в формате CodeView, аналогичном формату DWARF, используемому в системах Linux.
В LLVM ранее была добавлена поддержка CodeView, как часть общих усилий по развитию LLVM под Windows, и улучшению состояния инструментов отладки под Windows с использованием CodeView.
LLVM 6 далее улучшает эту поддержку, как благодаря помощи со стороны Microsoft, так и благодаря тщательному reverse engineering со стороны команды LLVM. Долгосрочные планы состоят в улучшении поддержки CodeView до той стадии, когда языки, отличные от C/C++, компилируемые в LLVM смогут надёжно использовать CodeView в своих инструментах.
LLVM поддерживает WebAssembly, как цель линковки
WebAssembly, бинарный формат приложений для веб-браузера, начал развиваться от стадии эксперимента к стадии используемой в продакшене технологии. Ключевой частью тулчейна WebAssembly, такой же, как Emscripten и PNaCL, является LLVM.
Самым последним шагом в поддержке линковки WebAssembly в LLVM стал инструмент wasm-ld. Этот инструмент получает на входе ассемблер, созданный в LLVM (таргет wasm32-unknown-unknown-wasm), и генерирует готовый к использованию бинарный файл WebAssembly.
Поддержка WebAssembly по-прежнему неполна, и работа над WebAssembly ещё продолжается, но LLVM останется ключевым элементом стека WebAssembly.
В LLVM улучшена поддержка Intel CPU
Программы LLVM сейчас имеют возможность использовать инструкции множества семейств процессоров Intel: Sandy Bridge, Ivy Bridge, Haswell, Broadwell, и Skylake. Intel Icelake сейчас также поддерживается.
В настоящее время LLVM генерирует код для процессоров Intel с использованием векторных расширений: VAES, GFNI, VPCLMULQDQ, AVX512VBMI2, AVX512BITALG, and AVX512VNNI.
Генерация кода улучшена для различных операций процессоров Intel, таких, как сравнения в памяти (memory comparisons), урезание векторов (vector truncations), умножение вектора на 32-битное целое значение.
obez
Сыро там, у меня из коробки web assembly не завелся (собирал из транка)