The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

На базе Sparse создан LLVM-бэкенд, нацеленный на пересборку ядра Linux

30.08.2011 21:21

Разработчики Sparse, семантического парсера для языка Си, объявили о создании 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.

  1. Главная ссылка к новости (http://lwn.net/Articles/456709...)
  2. OpenNews: Увидел свет Emscripten 1.4, компилятор байткода LLVM в JavaScript-представление
  3. OpenNews: Релиз набора компиляторов LLVM 2.9
  4. OpenNews: Версия компилятора Clang с поддержкой SAFECode для выявления ошибок при работе с памятью
  5. OpenNews: В Clang обеспечена возможность сборки Linux-ядра 2.6.36
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/31636-LLVM
Ключевые слова: LLVM, sparse, compiler, gcc, linux, kernel, analyzer
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (13) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, фтанг (?), 02:12, 31/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >LLVM-бэкенда позволит обеспечить генерацию универсального платформонезависимого псевдокода

    llvm генерит bitcode и он платформенно зависим.
    http://llvm.org/docs/FAQ.html#platformindependent

     
     
  • 2.5, arcade (ok), 10:36, 31/08/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Сам читал перед тем как ссылку ставить?

    LLVM изначально генерит платформонезависимый биткод. Сами языки C и C++ не рассчитаны на компиляцию в платформонезависимый код из-за выбора архитектуры выполнения на уровне препроцессинга исходника. Но сие не значит что путём определённых манипуляций с кодом мы не можем выкинуть или заменить платформозависимые части.

     
     
  • 3.13, Аноним (-), 17:37, 31/08/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Сам читал перед тем как ссылку ставить?
    > LLVM изначально генерит платформонезависимый биткод. Сами языки C и C++ не рассчитаны
    > на компиляцию в платформонезависимый код из-за выбора архитектуры выполнения на уровне
    > препроцессинга исходника. Но сие не значит что путём определённых манипуляций с
    > кодом мы не можем выкинуть или заменить платформозависимые части.

    gcc же делает платформо-независимый gimple. Короче ты не сможешь взять файл с биткодом и запустить его на другой архитектуре. Так что дроч на llvm вместо gcc непонятен

     
     
  • 4.24, XoRe (ok), 17:54, 04/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > gcc же делает платформо-независимый gimple. Короче ты не сможешь взять файл с
    > биткодом и запустить его на другой архитектуре. Так что дроч на
    > llvm вместо gcc непонятен

    А зачем брать файл с биткодом, когда можно взять исходник?

     
     
  • 5.25, Аноним (-), 15:05, 05/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >А зачем брать файл с биткодом, когда можно взять исходник?

    Почему это? LLVM финансируется прежде всего Apple, которая очень не любит показывать исходники.

     
  • 2.9, Аноним (-), 12:34, 31/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > llvm генерит bitcode и он платформенно зависим.
    > http://llvm.org/docs/FAQ.html#platformindependent

    Правильнее было бы сказать не платформозависим, а платформонезависим с определенными исключениями. По ссылке раздел FAQ только про GCC-фронтэнд, а в новости речь про Sparse.

     
  • 2.14, mihon73 (?), 17:43, 31/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > llvm генерит bitcode и он платформенно зависим.
    > платформенно зависим

    Это как так? Моя твоя не понимать

     

  • 1.7, Аноним (-), 10:50, 31/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > Разработчики Sparse (https://sparse.wiki.kernel.org/), семантического парсера для
    > языка Си, объявили (http://permalink.gmane.org/gmane.comp.parsers.sparse/2600) о
    > создании LLVM-бэкенда sparse-llvm (https://github.com/penberg/sparse-llvm). Конечной
    > целью проекта является создание рабочего компилятора Си, способного собрать ядро Linux.
    > Код проекта распространяется под лицензией MIT.

    на базе GCC значит такое не возможно.. интересный факт - запишем в книжечкую

     
  • 1.11, dq0s4y71 (??), 13:02, 31/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Да, "родной" кодгенератор у Спарс кривой. У меня валился в сегфолт на простейших выражениях. С другой стороны, что ожидать от "глупого" бэк-энда, как его окрестил сам Торвальдс...
     
  • 1.17, Аноним (-), 22:09, 31/08/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Тем не менее автор проекта считает, что sparse-llvm сможет достигнуть стадии пересборки ядра Linux раньше, чем Clang, так как Sparse, на базе которого развивается sparse-llvm, изначально полностью поддерживает парсинг кода всего ядра.

    а разве Clang не собирает ядро? По моему они уже года два, как собрали.

     
     
  • 2.18, Аноним (-), 22:23, 31/08/2011 [^] [^^] [^^^] [ответить]  
  • +/
    С Clang собирается только минимум, позволяющий загрузиться. C Clang не работает куча подсистем (SELinux, Posix ACL, IPSec, eCrypt, Xen, IPv6, Netfilter, поддержка модулей ядра  и т.п.).
    PS. http://www.opennet.dev/opennews/art.shtml?num=28418
     
  • 2.21, ананим (?), 03:00, 01/09/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >а разве Clang не собирает ядро? По моему они уже года два, как собрали.

    угу. собрали и уже 2 года не обновляли.
    следующую сборку ждут ещё через 2 года.

     
  • 2.26, Аноним (-), 15:08, 05/09/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > а разве Clang не собирает ядро?

    Нет. Рекламная брехня на эту тему была, но основания для нее достаточно жидкие (собирается лишь куцый уродец с кучей проблем).

    >По моему они уже года два, как собрали.

    Два года назад собрали этого уродца, и с тех пор никаких подвижек нет.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру