На базе 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.

Источники

править
 
 
Creative Commons
Эта статья содержит материалы из статьи «На базе Sparse создан LLVM-бэкенд, нацеленный на пересборку ядра Linux», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.