На базе Sparse создан LLVM-бэкенд, нацеленный на пересборку ядра Linux
30 августа 2011 года
Разработчики Sparse, семантического парсера для языка Си, объявили (Архивная копия от 7 апреля 2015 на Wayback Machine) о создании LLVM-бэкенда sparse-llvm. Конечной целью проекта является создание рабочего компилятора Си, способного собрать ядро Linux. Код проекта распространяется под лицензией MIT.
LLVM-бэкенд уже способен генерировать код для простых примеров на языке Си для различных платформ, но проект ещё находится на ранней стадии развития и не способен осуществить сборку реальных проектов. Созданный на базе Sparse LLVM-бэкенд, пока ограничен поддержкой таких возможностей языка Си, как вызов функций, разбор выражений Switch и if-else, выполнение арифметических, бинарных и операций с плавающей запятой. Тем не менее автор проекта считает, что sparse-llvm сможет достигнуть стадии пересборки ядра Linux раньше, чем Clang, так как Sparse, на базе которого развивается sparse-llvm, изначально полностью поддерживает парсинг кода всего ядра.
Sparse был создан(недоступная ссылка) Линусом Торвальдсом в 2003 году, во время его работы в компании Transmeta, в качестве замены стандартному препроцессору GCC, который не мог выявлять многие проблемы в коде ядра. В итоге, Sparse длительное время использовался для дополнительного статического анализа кода ядра Linux и позволял выявлять такие проблемы, как смешивание указателей на адресное пространство ядра и уровень пользователя (в коде ядра для разделения областей используется атрибут "__user").
Впоследствии, к проекту подключились другие разработчики, которые расширили возможности Sparse и подготовили рабочий фронтэнд для компилятора, способный осуществлять парсинг большей части ANSI C и различных расширений GCC. Sparse предоставляет набор аннотаций, предназначенных для выявления семантической информации о типах, например, о том, на какое адресное пространство указывает указатель или какие блокировки будут установлены/сняты при вызове функции.
В качестве причины создания LLVM-бэкенда указывается то, что без рабочего бэкенда (генератора кода) невозможно гарантировать полную работоспособность фронтэнда (синтаксический разбор). Ранее уже был создан тестовый бэкенд, но он был ограничен возможностью генерации кода для архитектуры i386, не был доведен до конца и содержал множество недоработок. Так как Sparse в роли фронтэнда уже полностью поддерживает парсинг кода ядра, создание LLVM-бэкенда позволит обеспечить генерацию биткода, который сможет быть преобразован в машинные инструкции для различных аппаратных архитектур. Иными словами, задача LLVM-бэкенда sparse-llvm сводится к преобразованию уже генерируемого силами Sparse промежуточного представления кода в биткод LLVM.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.