Анонсирован проект LLVMLinux, нацеленный на обеспечение сборки ядра Linux при помощи Clang
12 сентября 2012 года
В списке рассылки разработчиков LLVM публично анонсирован (Архивная копия от 8 сентября 2014 на Wayback Machine) проект LLVMLinux, созданный под покровительством организации Linux Foundation для обеспечения сборки ядра Linux с использованием компилятора Clang. Проект LLVMLinux сформирован на основе ряда разрозненных инициатив, в рамках которых осуществлялись попытки решения проблем при сборке ядра с использованием Clang. В частности, учтены наработки проекта lll-project, команды разработчиков PAX и консорциума Linaro.
Создатели LLVMLinux надеются, что консолидация смежных разработок в единый проект позволит избавиться от дублирования работы и даст возможность сконцентрироваться на решении важных задач, что в итоге ускорит появление полноценной поддержки Clang, как сборочного инструментария, альтернативного GCC. В частности, использование компилятора Clang, распространяемого под лицензией BSD, позволяет задействовать дополнительные техники оптимизации и диагностики проблем, например, автоматизировать выявление фактов разыменования указателей и других ошибок, связанных с некорректной работой с памятью.
Отправной точкой LLVMLinux послужила работа по задействованию Clang для сборки ядра Linux для платформы ARM, выполненная консорциумом Linaro в рамках инициативы по улучшению поддержки архитектуры ARM в Linux. На основе порта для ARM (Архивная копия от 19 июля 2017 на Wayback Machine) были подготовлены аналогичные порты для архитектур i586 (Архивная копия от 19 июля 2017 на Wayback Machine) и x86_64 (Архивная копия от 19 июля 2017 на Wayback Machine). В дальнейшем спектр поддерживаемых архитектур планируется расширить (например, добавить поддержку MIPS, PowerPC), если найдутся заинтересованные в подобной работе лица.
Проект LLVMLinux охватывает два направления - решение проблем в ядре Linux при сборке с использованием Clang (уход от использования GNU-расширений, специфичных для GCC)) и адаптация Clang для особенностей ядра. Созданные разработчиками LLVMLinux патчи активно продвигаются в upstream-проекты - ядро Linux и LLVM/Clang. В конечном итоге, планируется из коробки обеспечить формирование полностью работоспособных Clang-сборок ядра Linux, а также обеспечить работу тестового окружения для постоянного мониторинга за появлением регрессивных изменений, проявляющихся при сборке в Clang.
Для упрощения формирования сборочного окружения и кросс-компиляции ядра с использованием Clang подготовлен специальный сборочный инструментарий. Сборки ядра для архитектур ARM, i586 и x86_64, за редким исключением, полностью работоспособны и позволяют получить рабочие системы, но ещё требуют большой работы по тестированию и выявлению неявных проблем, поэтому подобные сборки пока не рекомендуются для применения в конечных продуктах.
Из наблюдаемых при сборке ядра с использованием Clang проблем, которые пытается решить проект LLVMLinux, отмечаются:
- Использование массивов переменной длины в некоторых структурах ядра (SELinux, Posix ACL, IPSec, eCrypt);
- Kbuild, который завязан на особенностях GCC;
- Использование явных регистровых переменных;
- Использование расширенных аннотаций __refdata;
- Применение EXPORT_SYMBOL в inline-функциях;
- Вывод в Clang сообщений об ошибках из-за переопределения POSIX-функций в ядре;
- Использование неподдерживаемых в Clang флагов компиляции: "-fdelete-null-pointer-checks", "--fno-inline-functions-called-once", "--Wno-unused-but-set-variable" и "--mabi=aapcs-linux".
Источники
править- Главная ссылка к новости (http://lists.cs.uiuc.edu/piper...) (Архивная копия от 8 сентября 2014 на Wayback Machine)
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.